2009-08-26 6 views
5

¿Hay alguna manera con WebSphere 6.1.0.25 para evitar que una aplicación empresarial se inicie debido a una excepción? Tengo un ServletContextListener que preparé para lanzar una RuntimeException durante contextInitialized(). Esto produce un seguimiento de pila en el registro del servidor; sin embargo, la consola de WebSphere todavía muestra que la aplicación se inició correctamente y aún se puede acceder a los recursos de WAR. ¿Hay algún mecanismo que impida que WebSphere marque correctamente la aplicación que se puede generar mediante artefactos en WAR?Evitar el inicio de la aplicación Java EE en WebSphere en la excepción

También intenté configurar un servlet para cargar al inicio, y lancé una excepción desde init(), y esto no produjo el efecto que estaba buscando.

+0

Posible duplicado - http://stackoverflow.com/questions/272194/abort-java-webapp-on-startup –

Respuesta

4

Sí, hay una manera de hacerlo, pero creo que todavía es específico de WebSphere. Tuvimos este mismo problema hace unos años, una aplicación que requería mucha configuración todavía se mostraría como iniciada, incluso cuando se produjo un error importante. La única forma de saberlo era mirar el archivo de registro y ver si se había producido alguna excepción (y la interfaz de usuario web no funcionaba muy bien).

La forma estándar de manejar el ciclo de vida, que parece funcionar en la mayoría de los contenedores, es el ServletContextListener pero, como han descubierto, no existe una manera elegante de manejar los errores de arranque.

En WebSphere (para algunas versiones de todos modos) existe el concepto de un bean de inicio. En lugar de tratar de explicarlo en detalle como lo fue hace un par de años que hice esto, puede echar un vistazo a este enlace http://publib.boulder.ibm.com/inforcenter...

En esencia, esto le permite crear un bean EJB que implementa dos métodos:

public boolean start() { 
    return new Delegate().start(); 
} 

public void stop() { 
    new Delegate().stop(); 
} 

Si devuelve true desde el método de inicio devuelve un inicio exitoso; de lo contrario, devolver false detiene la aplicación, por lo que en la consola la aplicación indicará que no se pudo iniciar. Implementamos un delegado para que hiciera el trabajo para poder conectarlo al bean de inicio o a ServletContextListener si el contenedor no implementaba beans de inicio.

Lo único adicional con beans de inicio es que en WebSphere debe habilitar el servicio de beans de inicio en la consola administrativa o de lo contrario no se ejecutarán y su aplicación no realizará ninguna inicialización, pero se mostrará como iniciada cuando Intenta y comienza. Hay información sobre cómo hacerlo desde la página anterior.

También estoy seguro de que hay información más detallada en un IBM Redbook sobre esto, pero por el momento parece que no puedo encontrarlo.

+0

Gracias por el liderazgo en esto. No estoy seguro de que pueda hacer que esto funcione en el gráfico de dependencia actual del proyecto, pero es buena información para saber. Es posible que deba apuntar sobre esto y simplemente establecer un indicador, y luego ejecutar todo a través de un filtro de servlet para devolver 500 si el arranque interno no tuvo éxito. –

Cuestiones relacionadas