Abbruch Java Webapp beim Start
-
07-07-2019 - |
Frage
Meine Webapp ist Teil eines größeren EAR die in einen Websphere-Server bereitgestellt wird. Der Server verwaltet Anzahl von anderen Anwendungen auf demselben virtuellen Server. Meine Webapp hat einige Initialisierung / Gesundheitskontrollen in einer servletContextListener-> contextInitialized Methode. Ich mag die Webapp nicht verfügbar machen, wenn die Initialisierung / Gesundheitskontrollen versagen. Was ist eine realiable Art und Weise, dies zu tun? Wird das Werfen einer Runtime aus contextInitialized ausreiche? Ist der Rest der EAR noch verfügbar zu erwarten? Danke.
Lösung
Ich würde empfehlen, eine RuntimeException
von ServletContextListener.contextInitialized
werfen.
Servlet 2.3 war nicht ganz klar zu diesem Thema, aber Servlet 2.4 hinzugefügt, um das folgende Detail:
Einige Ausnahmen treten nicht unter dem Aufrufliste einer anderen Komponente in der Anwendung. Ein Beispiel hierfür ist ein ... ServletContextListener dass wirft eine nicht behandelte Ausnahme während eines Anmeldung Servletkontext Initialisierung…. In diesem Fall, Der Entwickler hat keine Möglichkeit, behandelt die Ausnahme. Der Kontainer können für alle nachfolgenden Anfragen antworten auf die Web-Anwendung mit einem HTTP Statuscode 500, um anzuzeigen, ein Anwendungsfehler.
Da heißt es, dass die Servlet-Engine „kann“ Zugriff auf die Anwendung deaktivieren, können Sie einen Server finden, die etwas anderes tut. Allerdings Tomcat und WebLogic deaktivieren sowohl die Anwendung und die einzige andere vernünftige Sache, die ich denken kann, wäre die Ausnahme zu ignorieren. Ich kann nicht einen Behälter sehen, dass das sehr zu sein tat populär so würden Sie besser testen Sie es in WebSphere selbst.
Andere Tipps
eine Runtime Werfen wird wahrscheinlich nur das Servlet nicht verfügbar machen. Ein sicherer Weg könnte sein, so etwas wie ein Frühling Abfangjäger zu implementieren, die auf eine Fehlerseite oder etwas weiterzuleiten, wenn die Kontrollen nicht geklappt haben schwenken. Auf diese Weise brauchen Sie nicht die App von Laden zu verhindern, aber es kann mehr anmutig zur Laufzeit behandeln.