1 Reply Latest reply on Dec 11, 2014 9:01 AM by mkouba

    Problem using Weld 2.2.8 and JSF Invalidate Session

    ignacio.ayuste

      Hi guys, i updated to the new version of Weld 2.2.8 from 2.2.6 and now i have a problem when i try to logout the application, im using RichFaces 4.5.1.

       

      Here is my bean:

       

      package ar.com.controller;
      
      
      import java.util.ArrayList;
      import java.util.Date;
      import java.util.List;
      
      
      import javax.annotation.PostConstruct;
      import javax.enterprise.context.ConversationScoped;
      import javax.faces.context.FacesContext;
      import javax.inject.Inject;
      import javax.inject.Named;
      
      
      import lombok.Getter;
      import lombok.Setter;
      import lombok.extern.slf4j.Slf4j;
      
      
      import org.hibernate.exception.ConstraintViolationException;
      
      
      import ar.com.entities.Empresa;
      import ar.com.entities.Rol;
      import ar.com.entities.Usuario;
      import ar.com.entities.UsuarioRolEmpresa;
      import ar.com.interceptors.bindings.Loggeable;
      import ar.com.services.RolService;
      import ar.com.services.UsuarioRolEmpresaService;
      import ar.com.services.UsuarioService;
      import ar.com.util.JsfUtil;
      import ar.com.util.Messages;
      
      
      @Named(value="usuarioController")
      @ConversationScoped
      @Getter @Setter
      @Slf4j
      public class UsuarioController extends BaseController  {
      
      
        private static final long serialVersionUID = 7947699776587013746L;
      
        private Usuario usuario;
        private Rol rol;
        private Empresa empresa;
        private UsuarioRolEmpresa usuarioRolEmpresa;
        private List<Usuario> listaDeUsuarios;
        private List<Rol> roles;
        private List<UsuarioRolEmpresa> listaUsuariosRolesEmpresas;
        private @Inject UsuarioService usuarioService;
        private @Inject UsuarioRolEmpresaService usuarioRolEmpresaService;
        private @Inject RolService rolService;
        private @Inject SkinController skinController;
        private int indiceUsuario = -1;
      
        @PostConstruct
        public void init(){
      
        initForm();
      
        //Cargo el combo de los roles.
        roles = rolService.cargarTodos();
      
        }
      
      
        private void initForm() {
        usuario = new Usuario();
      
        usuarioRolEmpresa = new UsuarioRolEmpresa();
      
        rol = new Rol();
      
        listaUsuariosRolesEmpresas = new ArrayList<UsuarioRolEmpresa>();
        }
      
        @Loggeable
        public String login(){
      
        usuarioService.login(usuario,empresa);
      
        if(JsfUtil.verifyObjectFromSession("usuario")){
        Usuario user = (Usuario) JsfUtil.getObjectFromSession("usuario");
      
        if(user.getFechaBaja() != null){
        JsfUtil.addErrorMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.login.baja", new Object[]{usuario.getFechaBaja()}).getDetail());
        JsfUtil.removeObjectFromSession("usuario");
        return "login";
        }
      
        if(user.getFechaExpiracion() != null && user.getFechaExpiracion().before(new Date())){
        JsfUtil.addErrorMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.login.expirado", new Object[]{}).getDetail());
        JsfUtil.removeObjectFromSession("usuario");
        return "login";
        }
      
        skinController.setSkin("deepMarine");
        skinController.setEnableControlSkinning(true);
      
        return "bienvenido?faces-redirect=true";
        }else{
        JsfUtil.addErrorMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.login.invalido", new Object[]{}).getDetail());
        }
      
        return "login";
        }
      
        @Loggeable
        public String logout(){
        log.debug("Esta deslogueandose de la aplicacion....");
      
        FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
      
        return "/abm/usuarios/login.xhtml?faces-redirect=true";
        }
      
        @Loggeable
        public String alta(){
        log.debug("COMIENZA ALTA DEL USUARIO: " + usuario);
      
        try{
      
        usuario.setUsuariosRolesEmpresas(listaUsuariosRolesEmpresas);
      
        usuarioService.crear(usuario);
        JsfUtil.addSuccessMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.alta.mensaje.exito", new Object[]{usuario.getId()}).getDetail());
      
        initForm();
      
        }catch(ConstraintViolationException ex){
        JsfUtil.addErrorMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.alta.mensaje.duplicado", new Object[]{usuario.getUsuario()}).getDetail());
        }
      
        return "alta";
        }
      
        @Loggeable
        public void agregarRol(){
        usuarioRolEmpresa.setUsuario(usuario);
        usuarioRolEmpresa.setEmpresa(empresa);
        usuarioRolEmpresa.setRol(rol);
        listaUsuariosRolesEmpresas.add(usuarioRolEmpresa);
      
        rol = new Rol();
        empresa = new Empresa();
        usuarioRolEmpresa = new UsuarioRolEmpresa();
        }
      
        /* Este metodo es usado para cargar los usuarios en la pagina de baja de usuarios. */
        public List<Long> cargarUsuariosPorId(){
        List<Usuario> usuarios = usuarioService.cargarTodos();
        List<Long> idDeUsuarios = new ArrayList<Long>();
      
        for(Usuario u : usuarios){
        idDeUsuarios.add(u.getId());
        }
        return idDeUsuarios;
        }
      
        /*Este metodo toma el id del paquete, busca el mismo en la base y lo setea a la segunda tabla
         en la pagina de consulta.
        */
        @Loggeable
        public void buscarRolDelUsuario(){
        log.debug("Indice Usuario: " + indiceUsuario);
      
        if(indiceUsuario != -1 ){
      
        usuario = listaDeUsuarios.get(indiceUsuario);
        //usuario.setUsuariosRolesEmpresas(usuarioRolEmpresaService.cargarPorUsuario(usuario));
        listaUsuariosRolesEmpresas = usuarioRolEmpresaService.cargarPorUsuario(usuario); 
        }
        }
      
        @Loggeable
        public void buscarUsuarioSegunCriterios(){
        log.debug("Buscando Usuario: " + usuario);
      
        try{
        listaDeUsuarios = usuarioService.buscarUsuarioByCriteria(usuario);
      
        if(listaDeUsuarios.isEmpty()){
        JsfUtil.addErrorMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.consulta.mensaje.datos.invalidos", null).getDetail());
        }
      
        }catch(Exception ex){
        JsfUtil.addErrorMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.consulta.mensaje.error.generico", null).getDetail());
        }
        }
      
        @Loggeable
        public void quitarUsuario(){
        log.debug("Eliminando usuario de indiceUsuario " + indiceUsuario);
      
        log.debug("USUARIO SELECCIONADO: " + usuario);
        log.debug("USUARIO A ELIMINAR DE LA LISTA: " + listaDeUsuarios.get(indiceUsuario));
      
        String nombre =listaDeUsuarios.get(indiceUsuario).getNombre();
      
        usuarioService.eliminar(listaDeUsuarios.get(indiceUsuario));
      
      
        listaDeUsuarios.remove(indiceUsuario);
      
        indiceUsuario = -1;
      
        JsfUtil.addSuccessMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.consulta.elimininacion.mensaje.exito", new Object[]{nombre}).getDetail());
      
        }
      
        @Loggeable
        public void actualizar(){
      
      
        usuario.setUsuariosRolesEmpresas(listaUsuariosRolesEmpresas);
      
        usuarioService.actualizar(usuario);
      
        JsfUtil.addSuccessMessage(Messages.getMessage(Messages.bundleName, "usuario.abm.popup.actualizacion.usuario.mensaje", new Object[]{usuario.getNombre()}).getDetail());
        }
      
      
      }
      

       

      And right now i having this error when i call the logout method.

       

      ADVERTENCIA: #{usuarioController.logout()}: java.lang.IllegalStateException: This InterceptionDecorationContext is no longer valid.

      javax.faces.FacesException: #{usuarioController.logout()}: java.lang.IllegalStateException: This InterceptionDecorationContext is no longer valid.

        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)

        at javax.faces.component.UICommand.broadcast(UICommand.java:315)

        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:786)

        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1251)

        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)

        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)

        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at ar.com.filter.HibernateSessionRequestFilter.doFilter(HibernateSessionRequestFilter.java:35)

        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)

        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)

        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)

        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)

        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)

        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)

        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)

        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)

        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)

        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)

        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)

        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

        at java.lang.Thread.run(Thread.java:745)

      Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException: This InterceptionDecorationContext is no longer valid.

        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)

        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)

        ... 30 more

      Caused by: java.lang.IllegalStateException: This InterceptionDecorationContext is no longer valid.

        at org.jboss.weld.bean.proxy.InterceptionDecorationContext$Stack.checkState(InterceptionDecorationContext.java:107)

        at org.jboss.weld.bean.proxy.InterceptionDecorationContext$Stack.pop(InterceptionDecorationContext.java:97)

        at org.jboss.weld.bean.proxy.InterceptionDecorationContext$Stack.end(InterceptionDecorationContext.java:83)

        at org.jboss.weld.bean.proxy.CombinedInterceptorAndDecoratorStackMethodHandler.invoke(CombinedInterceptorAndDecoratorStackMethodHandler.java:77)

        at ar.com.controller.UsuarioController$Proxy$_$$_WeldSubclass.logout(Unknown Source)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:606)

        at org.apache.el.parser.AstValue.invoke(AstValue.java:278)

        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:273)

        at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:40)

        at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)

        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)

        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)

        ... 31 more

       

      Thanks

      Ignacio