[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