Información y enlaces

Participa comentando, viendo lo que otros tienen que decir, o enlazandolo desde tu blog.


Otros artículos
Extraño problema con Boolean en Java 5
¿com.sun:tools:jar:1.5.0?

Seam en aplicaciones Standalone

Posteado por Félix García Borrego en 20 February, 2008

Jboss Seam es un magnífico framework para el desarrollo de aplicaciones Web, pero plantea algunos problemas, cuando deseamos reutilizar nuestro código Seam  desde una aplicación que no se esta ejecutando dentro de un servidor de aplicaciones o desde un Thread independiente. Esto es debido a que sin la envoltura del servidor de aplicaciones, ninguno de los contextos Seam estarán disponibles.

El error típico con el que nos vamos a encontrar es:


java.lang.IllegalStateException: No application context active
at org.jboss.seam.Component.forName(Component.java:1807)

Código para inicializar Seam antes de utilizarlo:


     /**
     * Inicializa el contexto Seam.
     * Necesario para ejecutar código cuando el contexto Seam no esta inicializado y necesitamos acceder a elementos del contexto.
     * Con esto evitamos la excepción "No application context active"
     * @author Félix García Borrego
     */
    public static void initContextApplication(){
        if(!Contexts.isApplicationContextActive()){
        // Si el contexto no esta inicializado lo creamos
       if(!Lifecycle.isApplicationInitialized()){
            // La aplicación no esta activa, la activamos
            MockServletContext servletcontextMock = new MockServletContext();
            ServletLifecycle.beginApplication(servletcontextMock);
            new Initialization(servletcontextMock).create().init();
     }
     // Inicializamos el contexto
     ServletLifecycle.beginInitialization();
 }


Escriba un comentario

Tomate un momento para comentar y contar lo que piensas sobre el post. Puedes usar un HTML básico para formatear

Comentarios leidos

Gracias!!

Probado desde Coldfusion 8 como war en una aplicacion en donde los componentes seam estan en un jar (modulo EJB) y funciona bien

Bien eso soluciona lo del application context… pero como se soluciona luego lo del:

java.lang.IllegalStateException: No session context active

me ocurre cuando trato de efectuar un request.getContextPath();

Cierto, esta solución es útil si tienes todos tus beans en contexto de Aplicación, si quieres acceder a sesión es un poco mas complejo, quizás esto código te pueda servir de orientación:
/**
* Si la request del usuario no esta asociada a Seam la inicializa
* Para que estén disponibles todos los elementos seam.
* Nota: Si el Application Context no esta inicializado, también lo crea.
* @param request
*/
public static void beginRequest(HttpServletRequest request){
ServletLifecycle.beginRequest(request);
ServletContexts.instance().setRequest(request);
ConversationPropagation.instance().restoreConversationId( request.getParameterMap() );
Manager.instance().restoreConversation();
ServletLifecycle.resumeConversation(request);
Manager.instance().handleConversationPropagation( request.getParameterMap() );
}