[seam-commits] Seam SVN: r8880 - in trunk/src/main/org/jboss/seam: core and 1 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Tue Sep 2 17:17:32 EDT 2008


Author: pete.muir at jboss.org
Date: 2008-09-02 17:17:31 -0400 (Tue, 02 Sep 2008)
New Revision: 8880

Added:
   trunk/src/main/org/jboss/seam/ConcurrentRequestTimeoutException.java
Modified:
   trunk/src/main/org/jboss/seam/core/Manager.java
   trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java
Log:
Throw an exception when a concurrent request timeout occurs (JBSEAM-1832, docs and examples to follow)

Added: trunk/src/main/org/jboss/seam/ConcurrentRequestTimeoutException.java
===================================================================
--- trunk/src/main/org/jboss/seam/ConcurrentRequestTimeoutException.java	                        (rev 0)
+++ trunk/src/main/org/jboss/seam/ConcurrentRequestTimeoutException.java	2008-09-02 21:17:31 UTC (rev 8880)
@@ -0,0 +1,29 @@
+/**
+ * 
+ */
+package org.jboss.seam;
+
+public class ConcurrentRequestTimeoutException extends RuntimeException
+{
+
+   public ConcurrentRequestTimeoutException()
+   {
+      super();
+   }
+
+   public ConcurrentRequestTimeoutException(String message, Throwable cause)
+   {
+      super(message, cause);
+   }
+
+   public ConcurrentRequestTimeoutException(String message)
+   {
+      super(message);
+   }
+
+   public ConcurrentRequestTimeoutException(Throwable cause)
+   {
+      super(cause);
+   }
+   
+}
\ No newline at end of file


Property changes on: trunk/src/main/org/jboss/seam/ConcurrentRequestTimeoutException.java
___________________________________________________________________
Name: svn:mime-type
   + text/plain

Modified: trunk/src/main/org/jboss/seam/core/Manager.java
===================================================================
--- trunk/src/main/org/jboss/seam/core/Manager.java	2008-09-02 16:32:56 UTC (rev 8879)
+++ trunk/src/main/org/jboss/seam/core/Manager.java	2008-09-02 21:17:31 UTC (rev 8880)
@@ -16,6 +16,7 @@
 import java.util.Map;
 
 import org.jboss.seam.Component;
+import org.jboss.seam.ConcurrentRequestTimeoutException;
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.FlushModeType;
 import org.jboss.seam.annotations.Install;
@@ -44,6 +45,7 @@
 @BypassInterceptors
 public class Manager
 {
+   
    private static final LogProvider log = Logging.getLogProvider(Manager.class);
    
    public static final String REDIRECT_FROM_MANAGER = "org.jboss.seam.core.Manager";
@@ -502,8 +504,16 @@
 
    private boolean restoreAndLockConversation(ConversationEntry ce)
    {
-      if ( ce!=null && ce.lock() )
+      if (ce == null)
       {
+         //there was no id in either place, so there is no
+         //long-running conversation to restore
+         log.debug("No stored conversation");
+         initializeTemporaryConversation();
+         return false;
+      }
+      else if ( ce.lock() )
+      {
          // do this ASAP, since there is a window where conversationTimeout() might  
          // try to destroy the conversation, even if he cannot obtain the lock!
          touchConversationStack( ce.getConversationIdStack() );
@@ -523,14 +533,11 @@
          
          return true;
 
-      }
+      } 
       else
       {
-         //there was no id in either place, so there is no
-         //long-running conversation to restore
-         log.debug("No stored conversation, or concurrent call to the stored conversation");
-         initializeTemporaryConversation();
-         return false;
+         log.debug("Concurrent call to conversation");
+         throw new ConcurrentRequestTimeoutException("Concurrent call to conversation");
       }
    }
 

Modified: trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java
===================================================================
--- trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java	2008-09-02 16:32:56 UTC (rev 8879)
+++ trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java	2008-09-02 21:17:31 UTC (rev 8880)
@@ -34,6 +34,7 @@
 import org.jboss.seam.faces.FacesManager;
 import org.jboss.seam.faces.FacesMessages;
 import org.jboss.seam.faces.FacesPage;
+import org.jboss.seam.faces.HttpError;
 import org.jboss.seam.faces.Switcher;
 import org.jboss.seam.faces.Validation;
 import org.jboss.seam.international.StatusMessage;
@@ -389,7 +390,7 @@
       ConversationPropagation.instance().restoreConversationId(parameters);
       boolean conversationFound = Manager.instance().restoreConversation();
       FacesLifecycle.resumeConversation( facesContext.getExternalContext() );
-      postRestorePage(facesContext, parameters, conversationFound);            
+      postRestorePage(facesContext, parameters, conversationFound);
    }
 
    public void raiseEventsBeforePhase(PhaseEvent event)




More information about the seam-commits mailing list