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);
}
Show replies by date