2011-02-15 5 views
5

(no estoy seguro si esta pregunta se aplica a las aplicaciones Java EE, en general, o es Websphere específica.)Como prevenir una aplicación Java EE cuando se inicie la primavera DI no

Cuando conseguimos un fracaso DI primavera en las aplicaciones que hemos implementado en WebSphere (una falla en la búsqueda JNDI, por ejemplo), la aplicación parece haber comenzado correctamente.

[15/02/11 17:21:22:495 GMT] 00000037 ContextLoader E org.springframework.web.context.ContextLoader initWebApplicationContext Context initialization failed 
           org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mybean' defined in 
    ...big stack trace... 
[15/02/11 17:21:22:526 GMT] 00000037 ApplicationMg A WSVR0221I: Application started: myapp 

¿Cómo puedo hacer que la aplicación no se inicie si se lanzan excepciones durante la inicialización de primavera?

+0

En un Tomcat 6.0, por ejemplo, la aplicación no se iniciará si no se puede construir el contexto de la primavera. – Ralph

Respuesta

2

Compruebe si this ayuda. Basado en eso, supongo que es específico del servidor de aplicaciones, pero no estoy seguro.

0

Encuadernación El ciclo de vida del contexto de Spring con el ciclo de vida de una aplicación debería ayudar.

Dentro J2EE contexto primavera servidor se adquiere en su mayoría a través de la org.springframework.context.access.ContextSingletonBeanFactoryLocator (por ejemplo se utiliza por org.springframework.ejb.interceptor.SpringBeanAutowiringInterceptor). Invocar la inicialización del contexto de Spring con impaciencia en el inicio de la aplicación debería hacer el trabajo.

que se podía hacer en la forma específica WebSphere usando Beans de inicio:

 

@RemoteHome(AppStartUpHome.class) 
@Stateless 
public class SpringLifecycleBean { 
    private static Log logger = LogFactory.getLog(SpringLifecycleBean.class); 
    private static BeanFactoryReference bfr; 

    public boolean start() throws RemoteException { 
     logger.debug("Initializing spring context."); 

     try { 
      BeanFactoryLocator bfl = ContextSingletonBeanFactoryLocator.getInstance(); 
      //hardcoded spring context's name (refactor for more complex use cases) 
      bfr = bfl.useBeanFactory("appContext"); 
     } catch (Exception e) { 
      logger.error("Spring context startup failed", e); 
      return false; 
     } 

     return true; 
    } 

    public void stop() throws RemoteException { 
     if (bfr != null) { 
      logger.debug("Releasing spring context."); 
      bfr.release(); 
     } 
    } 

} 
 

Adición de un módulo de aplicación de web con javax.servlet.ServletContextListener que contiene código similar también funcionará.

Cuestiones relacionadas