Czy istnieje sposób zapobiegania uruchamianiu aplikacji Java EE w przypadku wystąpienia wyjątku podczas inicjowania aplikacji? Po prostu szukam sposobu, aby spowodować, że aplikacja wejdzie w stan "j2ee.state.failed
" (na JSR-77) po nieobsługiwanym wyjątku wyrzuconym z fasoli ServletContextListener
lub Singleton
Startup
podczas inicjowania aplikacji.Błąd uruchamiania aplikacji Java EE
Wydaje się, że EJB specification wskazuje, że jeśli wystąpi wyjątek podczas inicjowania komponentu bean Singleton
, aplikacja będzie nadal uruchamiana i uruchamiana bez błędu; jednak tylko sama fasola może znajdować się w stanie, w którym nie można jej wywołać. Niestety nie jest to zachowanie, którego szukam.
4.8.4 Singleton obsługi błędów
błędy występujące podczas inicjalizacji Singleton uważa się krytyczny i może to prowadzić do wyrzucania instancji Singleton. Możliwe błędy inicjalizacji obejmują błąd iniekcji, wyjątek systemowy zgłoszony w metodzie
PostConstruct
lub niepowodzenie metody zarządzania transakcją zarządzaną przez kontener w celu pomyślnego zatwierdzenia. Jeśli pojedyncza inicjalizacja nie powiedzie się, próba wywołania w Singletonie spowoduje wyjątek zdefiniowany w sekcji 3.4.3 i sekcji 3.4.4.
Servlet specification jest bardziej niejednoznaczna wymogami, pozornie nie wymaga pojemniku zachowywać się w jakiś szczególny sposób, ale jedynie sugeruje (poprzez zastosowanie terminu „may”), które w sieci moduł nadal się uruchamia, ale wszelkie żądania powinny skutkować wewnętrznym błędem serwera. Ponownie, nie jest to nie zachowanie, którego szukam. Dlaczego aplikacja internetowa powinna się nadal uruchamiać i wydawać się uruchomiona, jeśli nie może obsłużyć żadnych żądań?
11,6 słuchaczy wyjątkami
Pojemnik może odpowiedzieć na wszystkich kolejnych żądań do aplikacji WWW z kodem stanu HTTP 500 wskazuje błąd aplikacji.
Z doświadczenia wiem, że serwery aplikacji radzą sobie z tym wymaganiem w różny sposób. Niektóre pojemniki w rzeczywistości uniemożliwiają uruchomienie aplikacji w tych przypadkach, podczas gdy inne będą jedynie tłumić wyjątek i odpowiadać na żądania z 500 błędami, zgodnie z sugestią podaną w specyfikacji.
Czy mogę pominąć jakąkolwiek część specyfikacji, która uniemożliwi uruchomienie aplikacji, jeśli wystąpi wyjątek podczas inicjowania?
+1; dobre pytanie. To także moje doświadczenie - robią to inaczej ... – home