[webbeans-commits] Webbeans SVN: r2253 - in ri/trunk/impl/src/main/java/org/jboss/webbeans: jsf and 1 other directories.

webbeans-commits at lists.jboss.org webbeans-commits at lists.jboss.org
Sun Mar 29 14:34:16 EDT 2009


Author: nickarls
Date: 2009-03-29 14:34:14 -0400 (Sun, 29 Mar 2009)
New Revision: 2253

Modified:
   ri/trunk/impl/src/main/java/org/jboss/webbeans/conversation/ServletConversationManager.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java
   ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java
Log:
Points raised by Takeshi Kondo, thanks.

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/conversation/ServletConversationManager.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/conversation/ServletConversationManager.java	2009-03-29 14:01:23 UTC (rev 2252)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/conversation/ServletConversationManager.java	2009-03-29 18:34:14 UTC (rev 2253)
@@ -47,6 +47,8 @@
 @WebBean
 public class ServletConversationManager implements ConversationManager, Serializable
 {
+   private static final long serialVersionUID = 889078932817674680L;
+
    private static LogProvider log = Logging.getLogProvider(ServletConversationManager.class);
 
    private static final long CONVERSATION_TIMEOUT_IN_MS = 10 * 60 * 1000;
@@ -169,10 +171,11 @@
          // canceled in the
          // beginConversation) or the case where we have a completely new
          // long-running conversation.
-         if (longRunningConversations.containsKey(cid))
+         ConversationEntry longRunningConversation = longRunningConversations.get(cid);
+         if (longRunningConversation != null)
          {
-            longRunningConversations.get(cid).unlock();
-            longRunningConversations.get(cid).reScheduleTermination(terminationHandle);
+            longRunningConversation.unlock();
+            longRunningConversation.reScheduleTermination(terminationHandle);
          }
          else
          {
@@ -187,29 +190,25 @@
          // conversation that has been so from the start or it can be a
          // long-running conversation that has been demoted during the request
          log.trace("Destroying transient conversation " + currentConversation);
-         if (longRunningConversations.containsKey(cid))
+         ConversationEntry longRunningConversation = longRunningConversations.remove(cid);
+         if (longRunningConversation != null)
          {
-            ConversationEntry removedConversationEntry = longRunningConversations.remove(cid);
-            if (removedConversationEntry != null)
-            {
-               removedConversationEntry.cancelTermination();
-               removedConversationEntry.unlock();
-            }
-            else
-            {
-               log.debug("Failed to remove long-running conversation " + cid + " from list");
-            }
+            longRunningConversation.cancelTermination();
+            longRunningConversation.unlock();
          }
          ConversationContext.INSTANCE.destroy();
       }
-      // If the conversation has been switched from one long running-conversation to another with 
-      // Conversation.begin(String), we need to unlock the original conversation and re-schedule 
+      // If the conversation has been switched from one long
+      // running-conversation to another with
+      // Conversation.begin(String), we need to unlock the original conversation
+      // and re-schedule
       // it for termination
       String originalCid = currentConversation.getOriginalCid();
-      if (originalCid != null && longRunningConversations.containsKey(originalCid))
+      ConversationEntry longRunningConversation = originalCid == null ? null : longRunningConversations.get(originalCid);
+      if (longRunningConversation != null)
       {
-         longRunningConversations.get(originalCid).unlock();
-         longRunningConversations.get(originalCid).reScheduleTermination(scheduleForTermination(originalCid, currentConversation.getTimeout()));
+         longRunningConversation.unlock();
+         longRunningConversation.reScheduleTermination(scheduleForTermination(originalCid, currentConversation.getTimeout()));
       }
    }
 

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java	2009-03-29 14:01:23 UTC (rev 2252)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/jsf/WebBeansPhaseListener.java	2009-03-29 18:34:14 UTC (rev 2253)
@@ -87,9 +87,23 @@
       {
          afterRenderResponse();
       }
+      
+      if(phaseEvent.getFacesContext().getResponseComplete())
+      {
+         afterResponseComplete();
+      }      
    }
 
    /**
+    * Run after the response is complete
+    */
+   private void afterResponseComplete()
+   {
+      log.trace("Post-response complete");
+      CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
+   }
+
+   /**
     * Run after the view is restored
     */
    private void afterRestoreView()

Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java	2009-03-29 14:01:23 UTC (rev 2252)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/servlet/ConversationPropagationFilter.java	2009-03-29 18:34:14 UTC (rev 2253)
@@ -32,6 +32,7 @@
 
 import org.jboss.webbeans.CurrentManager;
 import org.jboss.webbeans.conversation.ConversationIdName;
+import org.jboss.webbeans.conversation.ConversationManager;
 
 /**
  * Filter for handling conversation propagation over redirects
@@ -123,6 +124,7 @@
             if (conversation.isLongRunning())
             {
                path = new UrlTransformer(path).getRedirectView().getActionUrl().appendConversation(conversation.getId()).encode();
+               CurrentManager.rootManager().getInstanceByType(ConversationManager.class).cleanupConversation();
             }
             super.sendRedirect(path);
          }




More information about the weld-commits mailing list