2 Replies Latest reply on Jun 13, 2007 1:23 PM by xinhua

    Sometime seam listener does not work correctly...

    xinhua

      hi,all
      i use Seam 1.2.1GA security and event listener to trigger logout() from authenticator when user session is time out. But it didnot work sometime.

      Here is my configuration in components.xml

       <event type="org.jboss.seam.preDestroyContext.SESSION">
       <action expression="#{authenticator.logout}" />
       </event>
      


      authenticator:
      @Stateless
      @Name("authenticator")
      public class AuthenticatorBean implements Authenticator{
      
       @In
       private Identity identity;
       @In
       private FacesMessages facesMessages;
      
       @Logger
       private Log log;
      
       public boolean authenticate() {
       String username = identity.getUsername();
       String password = identity.getPassword();
      
      
       if(username.equalsIgnoreCase("xinhua")){
       return true;
      
       }else{
       facesMessages.addFromResourceBundle("loginForm_loginFailed");
       return false;
       }
      
      
       }
      
       public void logout() {
       log.info("logout(): user "+identity.getUsername()+" logout");
       identity.logout();
       }
      
      }
      

      When user session is out of time, a null exception appears sometime.And logout() is skipped...



      17:52:40,793 ERROR [[/strato]] Session event listener threw exception
      java.lang.NullPointerException: facesContext
       at org.apache.myfaces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:110)
       at org.jboss.seam.actionparam.ActionParamBindingHelper.invokeTheExpression(ActionParamBindingHelper.java:58)
       at org.jboss.seam.actionparam.ActionParamMethodBinding.invoke(ActionParamMethodBinding.java:75)
       at org.jboss.seam.core.Expressions$2.invoke(Expressions.java:148)
       at org.jboss.seam.core.Events.raiseEvent(Events.java:63)
       at org.jboss.seam.contexts.Contexts.destroy(Contexts.java:215)
       at org.jboss.seam.contexts.Lifecycle.endSession(Lifecycle.java:297)
       at org.jboss.seam.servlet.SeamListener.sessionDestroyed(SeamListener.java:45)
       at org.apache.catalina.session.StandardSession.expire(StandardSession.java:687)
       at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:579)
       at org.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:678)
       at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:663)
       at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1284)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1569)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1558)
       at java.lang.Thread.run(Thread.java:595)
      17:52:49,059 INFO [Lifecycle] starting up: org.jboss.seam.security.identity
      17:54:40,891 ERROR [[/strato]] Session event listener threw exception
      java.lang.IllegalStateException: Please end the HttpSession via Seam.invalidateSession()
       at org.jboss.seam.contexts.Lifecycle.endSession(Lifecycle.java:269)
       at org.jboss.seam.servlet.SeamListener.sessionDestroyed(SeamListener.java:45)
       at org.apache.catalina.session.StandardSession.expire(StandardSession.java:687)
       at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:579)
       at org.apache.catalina.session.ManagerBase.processExpires(ManagerBase.java:678)
       at org.apache.catalina.session.ManagerBase.backgroundProcess(ManagerBase.java:663)
       at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1284)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1569)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1578)
       at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1558)
       at java.lang.Thread.run(Thread.java:595)
      


      the listener is not stable when sessionDestroyed. :(

      anyone can tell me why?

      thanks!