[weld-commits] Weld SVN: r6013 - core/trunk/impl/src/main/java/org/jboss/weld/servlet.

weld-commits at lists.jboss.org weld-commits at lists.jboss.org
Sat Mar 6 16:09:27 EST 2010


Author: dallen6
Date: 2010-03-06 16:09:27 -0500 (Sat, 06 Mar 2010)
New Revision: 6013

Modified:
   core/trunk/impl/src/main/java/org/jboss/weld/servlet/HttpSessionBeanStore.java
   core/trunk/impl/src/main/java/org/jboss/weld/servlet/ServletLifecycle.java
Log:
Fixed problem where ServletContext was lost with invalidated sessions for cleaning up the conversation store.

Modified: core/trunk/impl/src/main/java/org/jboss/weld/servlet/HttpSessionBeanStore.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/servlet/HttpSessionBeanStore.java	2010-03-06 06:25:30 UTC (rev 6012)
+++ core/trunk/impl/src/main/java/org/jboss/weld/servlet/HttpSessionBeanStore.java	2010-03-06 21:09:27 UTC (rev 6013)
@@ -18,6 +18,7 @@
 
 import java.util.Enumeration;
 
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpSession;
 
 import org.jboss.weld.context.SessionContext;
@@ -36,8 +37,10 @@
 
    private static final NamingScheme NAMING_SCHEME = new NamingScheme(SessionContext.class.getName(), "#");
 
-   // The HTTP session context to use as backing map
+   // The HTTP session to use as backing map
    private HttpSession session;
+   // The ServletContext associated with the session
+   private ServletContext servletContext;
 
    /**
     * Attaches this bean store to a session dynamically. This allows the session
@@ -50,6 +53,7 @@
    public void attachToSession(HttpSession session)
    {
       this.session = session;
+      this.servletContext = session.getServletContext();
    }
 
    /**
@@ -100,4 +104,9 @@
       return NAMING_SCHEME;
    }
 
+   public ServletContext getServletContext()
+   {
+      return servletContext;
+   }
+
 }

Modified: core/trunk/impl/src/main/java/org/jboss/weld/servlet/ServletLifecycle.java
===================================================================
--- core/trunk/impl/src/main/java/org/jboss/weld/servlet/ServletLifecycle.java	2010-03-06 06:25:30 UTC (rev 6012)
+++ core/trunk/impl/src/main/java/org/jboss/weld/servlet/ServletLifecycle.java	2010-03-06 21:09:27 UTC (rev 6013)
@@ -22,10 +22,12 @@
  */
 package org.jboss.weld.servlet;
 
+import static org.jboss.weld.jsf.JsfHelper.getServletContext;
 import static org.jboss.weld.logging.messages.ServletMessage.REQUEST_SCOPE_BEAN_STORE_MISSING;
 import static org.jboss.weld.servlet.BeanProvider.conversationManager;
 import static org.jboss.weld.servlet.BeanProvider.httpSessionManager;
 
+import javax.faces.context.FacesContext;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
@@ -172,38 +174,24 @@
     */
    public void endRequest(HttpServletRequest request)
    {
-      if (request.getAttribute(REQUEST_ATTRIBUTE_NAME) == null)
+      if (request.getAttribute(REQUEST_ATTRIBUTE_NAME) != null)
       {
-         return;
+         HttpPassThruSessionBeanStore sessionBeanStore = (HttpPassThruSessionBeanStore) lifecycle.getSessionContext().getBeanStore();
+         if ((sessionBeanStore != null) && (sessionBeanStore.isInvalidated()))
+         {
+            conversationManager(sessionBeanStore.getServletContext()).teardownContext();
+            lifecycle.endSession(request.getRequestedSessionId(), sessionBeanStore);
+         }
+         lifecycle.getSessionContext().setActive(false);
+         lifecycle.getSessionContext().setBeanStore(null);
+         BeanStore beanStore = (BeanStore) request.getAttribute(REQUEST_ATTRIBUTE_NAME);
+         if (beanStore == null)
+         {
+            throw new ForbiddenStateException(REQUEST_SCOPE_BEAN_STORE_MISSING);
+         }
+         lifecycle.endRequest(request.getRequestURI(), beanStore);
+         request.removeAttribute(REQUEST_ATTRIBUTE_NAME);
       }
-      teardownSession(request);
-      teardownRequest(request);
-      lifecycle.getConversationContext().setBeanStore(null);
-      lifecycle.getConversationContext().setActive(false);
    }
-   
-   private void teardownSession(HttpServletRequest request)
-   {
-      HttpPassThruSessionBeanStore sessionBeanStore = (HttpPassThruSessionBeanStore) lifecycle.getSessionContext().getBeanStore();
-      if ((sessionBeanStore != null) && (sessionBeanStore.isInvalidated()))
-      {
-         conversationManager(request.getSession().getServletContext()).teardownContext();
-         lifecycle.endSession(request.getRequestedSessionId(), sessionBeanStore);
-      }
-      lifecycle.getSessionContext().setActive(false);
-      lifecycle.getSessionContext().setBeanStore(null);
-      
-   }
-   
-   private void teardownRequest(HttpServletRequest request)
-   {
-      BeanStore beanStore = (BeanStore) request.getAttribute(REQUEST_ATTRIBUTE_NAME);
-      if (beanStore == null)
-      {
-         throw new ForbiddenStateException(REQUEST_SCOPE_BEAN_STORE_MISSING);
-      }
-      lifecycle.endRequest(request.getRequestURI(), beanStore);
-      request.removeAttribute(REQUEST_ATTRIBUTE_NAME);
-   }
 
 }



More information about the weld-commits mailing list