Domanda

La mia webapp fa parte di un EAR più grande che viene distribuito in un server websphere. Il server ospita il numero di altre app sullo stesso server virtuale. La mia webapp ha alcuni controlli di inizializzazione / integrità in un metodo servletContextListener- > contextInitialized. Voglio rendere la webapp non disponibile se i controlli di inizializzazione / integrità falliscono. Qual è un modo affidabile per farlo? Sarà sufficiente lanciare una RuntimeException dall'interno del contesto Inizializzato? Si prevede che il resto dell'EAR sarà ancora disponibile? Grazie.

È stato utile?

Soluzione

Consiglio di lanciare un RuntimeException da ServletContextListener.contextInitialized .

Servlet 2.3 non era molto chiaro su questo, ma Servlet 2.4 ha aggiunto il seguente dettaglio:

  

Alcune eccezioni non si verificano in   chiama lo stack di un altro componente nel file   applicazione. Un esempio di questo è un   ... ServletContextListener quello   genera un'eccezione non gestita durante a   notifica del contesto servlet   inizializzazione…. In questo caso,   lo sviluppatore non ha alcuna possibilità di farlo   gestire l'eccezione. Il container    può rispondere a tutte le richieste successive   all'applicazione Web con un HTTP   codice di stato 500 per indicare un   errore dell'applicazione.

Poiché dice che il motore servlet "può" disabilita l'accesso all'applicazione, potresti trovare un server che fa qualcos'altro. Tuttavia, Tomcat e WebLogic disabilitano entrambi l'applicazione e l'unica altra cosa ragionevole a cui riesco a pensare sarebbe ignorare l'eccezione. Non riesco a vedere un container che è stato molto popolare, quindi è meglio testarlo in WebSphere da soli.

Altri suggerimenti

Lanciare una RuntimeException probabilmente renderà non disponibile solo quel servlet. Un modo più sicuro potrebbe essere quello di implementare qualcosa come un intercettore Spring che inoltrerà a una pagina di errore o qualcosa del genere se i controlli non si sono verificati. In questo modo, non è necessario impedire il caricamento dell'app, ma è possibile gestirlo con maggiore grazia in fase di esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top