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
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
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.
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. –
Tego właśnie potrzebowałem. Dzięki za szybką i zwięzłą pomoc! – NBJack
możesz oznaczyć odpowiedź jako zaakceptowaną? Pomoże to zachęcić innych do odpowiedzi, gdy zapytasz: –