2010-09-09 7 views
11

Chcę zainicjować globalną instancję klasy, zanim mój serwer Tomcat zakończy rozruch i zacznie oferować moje serwlety. Jeśli ta usługa w jakiś sposób nie powiedzie się inicjalizacji, chciałbym, aby cała sekwencja uruchamiania również się nie powiodła (lub tak blisko jak to możliwe, byłoby to bezcelowe, gdyby serwer działał inaczej). W jaki sposób mogę to osiągnąć?Czy istnieje sposób wykonywania kodu podczas uruchamiania serwera Apache Tomcat 6.x w celu wykonywania procedur inicjowania itp.?

Odpowiedz

18

Każda aplikacja internetowa ma powiązanie z serwletem kontekstu. Obiekt ServletContext jest tworzony po uruchomieniu aplikacji i jest niszczony po wyłączeniu aplikacji. ServletContext ma zasięg globalny i jest podobny do zmiennej globalnej w aplikacji.

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

kompletne wyjaśnienie tutaj

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

+0

Tego właśnie potrzebowałem. Dzięki za szybką i zwięzłą pomoc! – NBJack

+2

możesz oznaczyć odpowiedź jako zaakceptowaną? Pomoże to zachęcić innych do odpowiedzi, gdy zapytasz: –

2

Jedną rzeczą, jaką można zrobić przenośnie jest wdrożenie aplet, który inicjuje wszystko, czego potrzeba w jego metoda init() (a może wywołać System.exit() jeśli zawiedzie, nie wiem, czy masz uprawnienia do tego w Tomcat). Następnie można załadować go za pomocą <load-on-startup> w swoim web.xml, aby określić kolejność inicjowania.

+0

To nie jest dobre rozwiązanie. Wszystkie filtry są inicjowane przed wszystkimi serwletami. Więc filtry zostaną zainicjowane przed inicjalizacją, jeśli klasa w pytaniu. –

Powiązane problemy