Author: struberg
Date: Sun Aug 28 17:20:47 2011
New Revision: 1162561

URL: http://svn.apache.org/viewvc?rev=1162561&view=rev
Log:
OWB-595 terminate/un-use Conversations at latest at the end of each request  

Modified:
    
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
    openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
    
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
    
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
    
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java

Modified: 
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
--- 
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
 (original)
+++ 
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
 Sun Aug 28 17:20:47 2011
@@ -107,6 +107,15 @@ public class LoginBean
     }
 
     /**
+     * This method got introduced to test OWB-595
+     * @return null and always throws a RuntimeException
+     */
+    public String createError()
+    {
+        throw new RuntimeException("Just to show OWB-595");
+    }
+
+    /**
      * @param userName the userName to set
      */
     public void setUserName(String userName)

Modified: openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
--- openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml 
(original)
+++ openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml Sun Aug 
28 17:20:47 2011
@@ -62,6 +62,7 @@ under the License.
             <h:panelGroup>
                 <h:commandButton action="#{loginBean.login}" value="Login" />
                 <h:commandButton action="false" value="Clear Form" 
onclick="document.forms[0].reset();document.getElementById('form:userName').focus();return
 false;" />
+                <h:commandButton action="#{loginBean.createError}" 
value="Create an Error" />
             </h:panelGroup>
 
             <h:outputLink 
value="#{facesContext.externalContext.requestContextPath}/register.xhtml">
@@ -73,4 +74,4 @@ under the License.
     </h:form>
 </div>
 </body>
-</html>
\ No newline at end of file
+</html>

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
 Sun Aug 28 17:20:47 2011
@@ -151,7 +151,7 @@ public class ConversationManager
         Asserts.assertNotNull(conversationId, "conversationId parameter can 
not be null");
         Asserts.assertNotNull(sessionId,"sessionId parameter can not be null");
 
-        ConversationImpl conv = null;
+        ConversationImpl conv;
         Set<Conversation> set = conversations.keySet();
         Iterator<Conversation> it = set.iterator();
 
@@ -175,7 +175,7 @@ public class ConversationManager
     {
         Asserts.assertNotNull(sessionId, "sessionId parameter can not be 
null");
 
-        ConversationImpl conv = null;
+        ConversationImpl conv;
         Set<Conversation> set = conversations.keySet();
         Iterator<Conversation> it = set.iterator();
 

Modified: 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
 (original)
+++ 
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
 Sun Aug 28 17:20:47 2011
@@ -143,7 +143,7 @@ public class NormalScopedBeanInterceptor
      */
     protected Object getContextualInstance()
     {
-        Object webbeansInstance = null;
+        Object webbeansInstance;
 
         //Context of the bean
         Context webbeansContext = 
getBeanManager().getContext(this.bean.getScope());

Modified: 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
 (original)
+++ 
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
 Sun Aug 28 17:20:47 2011
@@ -22,11 +22,13 @@ import org.apache.webbeans.config.OWBLog
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.context.AbstractContextsService;
 import org.apache.webbeans.context.ApplicationContext;
+import org.apache.webbeans.context.ContextFactory;
 import org.apache.webbeans.context.ConversationContext;
 import org.apache.webbeans.context.DependentContext;
 import org.apache.webbeans.context.RequestContext;
 import org.apache.webbeans.context.SessionContext;
 import org.apache.webbeans.context.SingletonContext;
+import org.apache.webbeans.conversation.ConversationImpl;
 import org.apache.webbeans.conversation.ConversationManager;
 import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.logger.WebBeansLogger;
@@ -35,6 +37,7 @@ import org.apache.webbeans.web.intercept
 
 import javax.enterprise.context.ApplicationScoped;
 import javax.enterprise.context.ContextException;
+import javax.enterprise.context.Conversation;
 import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.RequestScoped;
@@ -97,6 +100,8 @@ public class WebContextsService extends 
     
     protected FailOverService failoverService = null;
 
+    private WebBeansContext webBeansContext;
+
     /**Initialize thread locals*/
     static
     {
@@ -129,6 +134,7 @@ public class WebContextsService extends 
      */
     public WebContextsService(WebBeansContext webBeansContext)
     {
+        this.webBeansContext = webBeansContext;
         supportsConversation =  
webBeansContext.getOpenWebBeansConfiguration().supportsConversation();
         failoverService = webBeansContext.getService(FailOverService.class);
         conversationManager = webBeansContext.getConversationManager();
@@ -361,6 +367,13 @@ public class WebContextsService extends 
      */
     private void destroyRequestContext(ServletRequestEvent request)
     {
+        // cleanup open conversations first
+        if (supportsConversation)
+        {
+            cleanupConversations();
+        }
+
+
         //Get context
         RequestContext context = getRequestContext();
 
@@ -376,7 +389,7 @@ public class WebContextsService extends 
         {
             elStore.destroyELContextStore();
         }
-        
+
         //Clear thread locals
         requestContext.set(null);
         requestContext.remove();
@@ -394,6 +407,42 @@ public class WebContextsService extends 
         conversationContext.remove();
     }
 
+    private void cleanupConversations()
+    {
+        ConversationContext conversationContext = getConversationContext();
+
+        if (conversationContext == null)
+        {
+            return;
+        }
+
+        ConversationManager conversationManager = 
webBeansContext.getConversationManager();
+        Conversation conversation = 
conversationManager.getConversationBeanReference();
+
+        if (conversation == null)
+        {
+            return;
+        }
+
+        if (conversation.isTransient())
+        {
+            if (logger.wblWillLogDebug())
+            {
+                logger.debug("Destroying the conversation context with cid : 
[{0}]", conversation.getId());
+            }
+            ContextFactory contextFactory = 
webBeansContext.getContextFactory();
+            contextFactory.destroyConversationContext();
+        }
+        else
+        {
+            //Conversation must be used by one thread at a time
+            ConversationImpl owbConversation = (ConversationImpl)conversation;
+            owbConversation.updateTimeOut();
+            //Other threads can now access propogated conversation.
+            owbConversation.setInUsed(false);
+        }
+    }
+
     /**
      * Creates the session context at the session start. 
      * @param session http session object

Modified: 
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java
URL: 
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
--- 
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java
 (original)
+++ 
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java
 Sun Aug 28 17:20:47 2011
@@ -19,7 +19,6 @@
 package org.apache.webbeans.web.tests.interceptor;
 
 import junit.framework.Assert;
-import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.logger.WebBeansLogger;
 import org.apache.webbeans.newtests.AbstractUnitTest;
 import org.apache.webbeans.newtests.interceptors.beans.ApplicationScopedBean;


Reply via email to