[jboss-user] [JBoss Seam] - Injection at destroy time

lowecg2004 do-not-reply at jboss.com
Fri Dec 1 09:35:01 EST 2006


I have some stateless beans injected into a stateful bean that are only required at destroy time.  Currently when destroy is invoked, these beans are null.  Code is as follows:
@Name("sessionTimeoutHandler")
  | @Stateful
  | @Scope(ScopeType.SESSION)
  | public class SessionTimeoutHandlerHome implements SessionTimeoutHandler, Serializable
  | {
  |   private static final long serialVersionUID = 1L;
  | 
  |   @Logger
  |   private Log log;
  |   
  |   @In(create=true)
  |   private SessionDao sessionDao;   // this is stateless
  | 
  |   @In(create=true)
  |   private AuditLog auditLog;    // and so is this
  |   
  |   private Session currentSession;
  | 
  |   ...
  | 
  |  @Remove @Destroy
  |   public void destroy() {
  |        // Session has timed out, so update the user session entry and perform
  |       // cleanup.
  |       currentSession.setClosed(new Date());
  |       
  |       sessionDao.merge(currentSession);
  | 
  |       auditLog.addAuditEntry("User session timeout for session id #0" currentSession.getId());
  | 
  |       log.info("User session timeout for session id #0" currentSession.getId());
  |    }
  | }

Should I be getting the stateless beans injected at this point? I'm sure I've seen this working in the past.

When creating the bean I did notice what I believe to be inconsistent behaviour with respect to @Logger injection.  I initially created the bean using method 1 below, by simply specifying the bean as an @Out parameter and instantiating the object within an action.  Using this method, the @Logger object on SessionTimeoutHandler was null when @Destroy was called.  However, when I changed to method 2 the logger was available - but still no stateless beans.
Creation Method 1 - Using @Out
  | @Name("login")
  | @Stateful
  | @Scope(ScopeType.EVENT)
  | public class LoginAction implements Login, Serializable
  | {
  |   @Out(required=false)
  |   private SessionTimeoutHandler sessionTimeoutHandler;
  | 
  | 
  |  public String login() {
  |     ...
  | 
  |     SessionTimeoutHandler sessionTimeoutHandler = new SessionTimeoutHandler();
  | 
  |     // create a session timeout handler
  |     sessionTimeoutHandler.setCurrentSession(currentSession);
  |   }
  | }
  | 
  | 
  | Creation Method  2 - Using @In(create = true)
  | @Name("login")
  | @Stateful
  | @Scope(ScopeType.EVENT)
  | public class LoginAction implements Login, Serializable
  | {
  |   @In(create = true)
  |   @Out(required = false)
  |   private SessionTimeoutHandler sessionTimeoutHandler;
  | 
  | 
  |  public String login() {
  |     ...
  | 
  |     // create a session timeout handler
  |     sessionTimeoutHandler.setCurrentSession(currentSession);
  |   }
  | }

I am using Seam 1.1 CR2.

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3990451#3990451

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3990451



More information about the jboss-user mailing list