2010-09-09 11 views
11

Voglio inizializzare un'istanza globale di una classe prima che il mio server Tomcat completi l'avvio e inizi a offrire i miei servlet. Se questo servizio in qualche modo fallisce l'inizializzazione, mi piacerebbe che anche l'intera sequenza di avvio fallisse (o il più vicino possibile a questo, sarebbe inutile che il server funzioni altrimenti). Qual è il modo migliore per farlo?Esiste un modo per eseguire codice durante l'avvio di Apache Tomcat 6.x per eseguire le routine di inizializzazione, ecc.?

risposta

18

Ad ogni applicazione Web è associato un ServletContext. L'oggetto ServletContext viene creato all'avvio dell'applicazione e distrutto quando l'applicazione viene arrestata. Un servletContext ha un ambito globale ed è simile a una variabile globale in un'applicazione.

http://www.javabeat.net/tips/178-servletcontextlistener-example.html

completa spiegazione qui

http://onjava.com/pub/a/onjava/2001/04/12/listeners.html

+0

Questo è quello che mi serviva. Grazie per l'aiuto rapido e conciso! – NBJack

+2

puoi contrassegnare la risposta come accettata? aiuterà a convincere gli altri a rispondere quando lo chiedi –

2

Una cosa che si può fare portabile è quella di implementare una servlet che inizializza tutto ciò che serve nel suo metodo init() (e forse chiamare System.exit() se fallisce, non so se sei autorizzato a farlo in Tomcat). Quindi lo caricherai usando <load-on-startup> nel tuo web.xml per specificare l'ordine di inizializzazione.

+0

Non è una buona soluzione. Tutti i filtri sono inizializzati prima di tutti i servlet. Quindi i filtri verrebbero inizializzati prima dell'inizializzazione se la classe nella domanda. –

Problemi correlati