Author: struberg
Date: Sun Aug 28 17:20:47 2011
New Revision: 1162561
URL: http://svn.apache.org/viewvc?rev=1162561&view=rev
Log:
OWB-595 terminate/un-use Conversations at latest at the end of each request
Modified:
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java
Modified:
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
---
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
(original)
+++
openwebbeans/trunk/samples/reservation/src/main/java/org/apache/webbeans/reservation/beans/LoginBean.java
Sun Aug 28 17:20:47 2011
@@ -107,6 +107,15 @@ public class LoginBean
}
/**
+ * This method got introduced to test OWB-595
+ * @return null and always throws a RuntimeException
+ */
+ public String createError()
+ {
+ throw new RuntimeException("Just to show OWB-595");
+ }
+
+ /**
* @param userName the userName to set
*/
public void setUserName(String userName)
Modified: openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
--- openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml
(original)
+++ openwebbeans/trunk/samples/reservation/src/main/webapp/login.xhtml Sun Aug
28 17:20:47 2011
@@ -62,6 +62,7 @@ under the License.
<h:panelGroup>
<h:commandButton action="#{loginBean.login}" value="Login" />
<h:commandButton action="false" value="Clear Form"
onclick="document.forms[0].reset();document.getElementById('form:userName').focus();return
false;" />
+ <h:commandButton action="#{loginBean.createError}"
value="Create an Error" />
</h:panelGroup>
<h:outputLink
value="#{facesContext.externalContext.requestContextPath}/register.xhtml">
@@ -73,4 +74,4 @@ under the License.
</h:form>
</div>
</body>
-</html>
\ No newline at end of file
+</html>
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/conversation/ConversationManager.java
Sun Aug 28 17:20:47 2011
@@ -151,7 +151,7 @@ public class ConversationManager
Asserts.assertNotNull(conversationId, "conversationId parameter can
not be null");
Asserts.assertNotNull(sessionId,"sessionId parameter can not be null");
- ConversationImpl conv = null;
+ ConversationImpl conv;
Set<Conversation> set = conversations.keySet();
Iterator<Conversation> it = set.iterator();
@@ -175,7 +175,7 @@ public class ConversationManager
{
Asserts.assertNotNull(sessionId, "sessionId parameter can not be
null");
- ConversationImpl conv = null;
+ ConversationImpl conv;
Set<Conversation> set = conversations.keySet();
Iterator<Conversation> it = set.iterator();
Modified:
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
(original)
+++
openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
Sun Aug 28 17:20:47 2011
@@ -143,7 +143,7 @@ public class NormalScopedBeanInterceptor
*/
protected Object getContextualInstance()
{
- Object webbeansInstance = null;
+ Object webbeansInstance;
//Context of the bean
Context webbeansContext =
getBeanManager().getContext(this.bean.getScope());
Modified:
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
(original)
+++
openwebbeans/trunk/webbeans-web/src/main/java/org/apache/webbeans/web/context/WebContextsService.java
Sun Aug 28 17:20:47 2011
@@ -22,11 +22,13 @@ import org.apache.webbeans.config.OWBLog
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.context.AbstractContextsService;
import org.apache.webbeans.context.ApplicationContext;
+import org.apache.webbeans.context.ContextFactory;
import org.apache.webbeans.context.ConversationContext;
import org.apache.webbeans.context.DependentContext;
import org.apache.webbeans.context.RequestContext;
import org.apache.webbeans.context.SessionContext;
import org.apache.webbeans.context.SingletonContext;
+import org.apache.webbeans.conversation.ConversationImpl;
import org.apache.webbeans.conversation.ConversationManager;
import org.apache.webbeans.el.ELContextStore;
import org.apache.webbeans.logger.WebBeansLogger;
@@ -35,6 +37,7 @@ import org.apache.webbeans.web.intercept
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.ContextException;
+import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.RequestScoped;
@@ -97,6 +100,8 @@ public class WebContextsService extends
protected FailOverService failoverService = null;
+ private WebBeansContext webBeansContext;
+
/**Initialize thread locals*/
static
{
@@ -129,6 +134,7 @@ public class WebContextsService extends
*/
public WebContextsService(WebBeansContext webBeansContext)
{
+ this.webBeansContext = webBeansContext;
supportsConversation =
webBeansContext.getOpenWebBeansConfiguration().supportsConversation();
failoverService = webBeansContext.getService(FailOverService.class);
conversationManager = webBeansContext.getConversationManager();
@@ -361,6 +367,13 @@ public class WebContextsService extends
*/
private void destroyRequestContext(ServletRequestEvent request)
{
+ // cleanup open conversations first
+ if (supportsConversation)
+ {
+ cleanupConversations();
+ }
+
+
//Get context
RequestContext context = getRequestContext();
@@ -376,7 +389,7 @@ public class WebContextsService extends
{
elStore.destroyELContextStore();
}
-
+
//Clear thread locals
requestContext.set(null);
requestContext.remove();
@@ -394,6 +407,42 @@ public class WebContextsService extends
conversationContext.remove();
}
+ private void cleanupConversations()
+ {
+ ConversationContext conversationContext = getConversationContext();
+
+ if (conversationContext == null)
+ {
+ return;
+ }
+
+ ConversationManager conversationManager =
webBeansContext.getConversationManager();
+ Conversation conversation =
conversationManager.getConversationBeanReference();
+
+ if (conversation == null)
+ {
+ return;
+ }
+
+ if (conversation.isTransient())
+ {
+ if (logger.wblWillLogDebug())
+ {
+ logger.debug("Destroying the conversation context with cid :
[{0}]", conversation.getId());
+ }
+ ContextFactory contextFactory =
webBeansContext.getContextFactory();
+ contextFactory.destroyConversationContext();
+ }
+ else
+ {
+ //Conversation must be used by one thread at a time
+ ConversationImpl owbConversation = (ConversationImpl)conversation;
+ owbConversation.updateTimeOut();
+ //Other threads can now access propogated conversation.
+ owbConversation.setInUsed(false);
+ }
+ }
+
/**
* Creates the session context at the session start.
* @param session http session object
Modified:
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java
URL:
http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java?rev=1162561&r1=1162560&r2=1162561&view=diff
==============================================================================
---
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java
(original)
+++
openwebbeans/trunk/webbeans-web/src/test/java/org/apache/webbeans/web/tests/interceptor/CachedInterceptorHandlerTest.java
Sun Aug 28 17:20:47 2011
@@ -19,7 +19,6 @@
package org.apache.webbeans.web.tests.interceptor;
import junit.framework.Assert;
-import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.logger.WebBeansLogger;
import org.apache.webbeans.newtests.AbstractUnitTest;
import org.apache.webbeans.newtests.interceptors.beans.ApplicationScopedBean;