[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