2009-08-26 18 views
5

Esiste un modo con WebSphere 6.1.0.25 per impedire l'avvio di un'applicazione aziendale a causa di un'eccezione? Ho un ServletContextListener che ho truccato per lanciare una RuntimeException durante contextInitialized(). Ciò produce una traccia stack nel log del server, tuttavia la console di WebSphere continua a mostrare che l'applicazione si avvia correttamente e che è comunque possibile accedere alle risorse WAR. Esiste un meccanismo che impedisca a WebSphere di contrassegnare l'avvio dell'applicazione con successo che può essere generato da risorse in-WAR?Impedire l'avvio dell'applicazione Java EE su WebSphere

Ho anche provato a impostare un servlet per il caricamento all'avvio e ho lanciato un'eccezione da init(), e questo non ha prodotto l'effetto che stavo cercando.

+0

Possibile duplicato - http://stackoverflow.com/questions/272194/abort-java-webapp-on-startup –

risposta

4

Sì, c'è un modo per farlo ma credo che sia ancora specifico di WebSphere. Abbiamo avuto lo stesso problema alcuni anni fa, un'applicazione che richiedeva molte configurazioni sarebbe comunque stata visualizzata come avviata anche quando si è verificato un errore grave. L'unico modo per dire era di guardare il file di log e vedere se si erano verificate eccezioni (e l'interfaccia utente web non funzionava molto bene).

Il modo standard per gestire il ciclo di vita, che sembra funzionare sulla maggior parte dei contenitori, è ServletContextListener ma, come è stato rilevato, non esiste un modo elegante per gestire gli errori di avvio.

In WebSphere (per alcune versioni comunque) esiste il concetto di bean di avvio. Piuttosto che cercare di spiegare in dettaglio come è stato un paio di anni fa, che ho fatto questo si può dare un'occhiata a questo link http://publib.boulder.ibm.com/inforcenter...

Questo permette in sostanza di creare un bean EJB che implementa due metodi:

public boolean start() { 
    return new Delegate().start(); 
} 

public void stop() { 
    new Delegate().stop(); 
} 

Se si restituisce true dal metodo start, restituisce un avvio corretto, altrimenti restituendo false arresti all'avvio dell'applicazione in modo tale che l'applicazione indicherà che non è stato avviato. Abbiamo implementato un delegato per svolgere il lavoro in modo da poterlo collegare al bean di avvio o a ServletContextListener se il contenitore non implementava i bean di avvio.

L'unica cosa aggiuntiva con i bean di avvio è che in WebSphere è necessario abilitare il servizio Esecuzione dei bean nella Console di amministrazione altrimenti non verranno eseguiti e l'app non avvierà alcuna inizializzazione ma verrà comunque visualizzata come avviata quando tu provi ad avviarlo. Ci sono informazioni su come farlo dalla pagina sopra.

Sono sicuro che ci sono informazioni più dettagliate in un Redbook IBM su questo, ma al momento non riesco a individuarlo.

+0

Grazie per il ruolo principale. Non sono sicuro di riuscire a far funzionare tutto ciò nel grafico attuale delle dipendenze del progetto, ma è una buona informazione sapere. Potrebbe essere necessario punt su questo e basta impostare un flag, e quindi eseguire tutto, anche se un filtro servlet per restituire 500 se l'avvio interno non ha avuto successo. –