java - knowledge - websphere application server infocenter
Abort java webapp en el inicio (2)
Lanzar una RuntimeException probablemente solo hará que ese servlet no esté disponible. Una forma más segura podría ser implementar algo así como un interceptor de Spring que se enviará a una página de error o algo así si las comprobaciones no funcionó. De esta forma, no es necesario que evite que la aplicación se cargue, pero puede manejarla de forma más ágil en tiempo de ejecución.
Mi aplicación web es parte de un EAR más grande que se implementa en un servidor websphere. El servidor aloja la cantidad de otras aplicaciones en el mismo servidor virtual. Mi aplicación web tiene algunas comprobaciones de inicialización / estado en un método servletContextListener-> contextInitialized. Quiero que la aplicación web no esté disponible si fallan las comprobaciones de inicialización / estado. ¿Cuál es una forma realista de hacer esto? ¿Lanzará una RuntimeException desde dentro de contexto? ¿Bastará? ¿Se espera que el resto del EAR esté disponible? Gracias.
Recomiendo lanzar una RuntimeException
de ServletContextListener.contextInitialized
.
Servlet 2.3 no fue muy claro en esto, pero Servlet 2.4 agregó el siguiente detalle:
Algunas excepciones no ocurren en la pila de llamadas de otro componente en la aplicación. Un ejemplo de esto es un ... ServletContextListener que arroja una excepción no controlada durante una notificación de inicialización de contexto de servlet .... En este caso, el Desarrollador no tiene la oportunidad de manejar la excepción. El contenedor puede responder a todas las solicitudes posteriores a la aplicación web con un código de estado HTTP 500 para indicar un error de aplicación.
Como dice que el motor del servlet "puede" deshabilitar el acceso a la aplicación, es posible que encuentre un servidor que haga algo más. Sin embargo, Tomcat y WebLogic deshabilitan la aplicación, y la única otra cosa razonable que puedo pensar sería ignorar la excepción. No puedo ver un contenedor que hizo que sea muy popular, así que será mejor que lo pruebes en WebSphere.