You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/12/29 08:27:24 UTC

tomee git commit: busy state for conversation

Repository: tomee
Updated Branches:
  refs/heads/develop 7c4486804 -> 9c894b2af


busy state for conversation


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/9c894b2a
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/9c894b2a
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/9c894b2a

Branch: refs/heads/develop
Commit: 9c894b2afa3c8965470c2bf0ce409dd92cd54c40
Parents: 7c44868
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon Dec 29 08:26:47 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Mon Dec 29 08:26:47 2014 +0100

----------------------------------------------------------------------
 .../openejb/OpenEJBDeployableContainer.java      |  1 -
 .../openejb/cdi/CdiAppContextsService.java       | 19 ++++++++++++++++++-
 .../server/httpd/EndWebBeansListener.java        |  4 +++-
 .../server/httpd/HttpListenerRegistry.java       |  7 +++++++
 .../server/httpd/OpenEJBHttpRegistry.java        | 11 +++++++----
 5 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/9c894b2a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
index b4d2637..bc699ac 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
@@ -35,7 +35,6 @@ import org.apache.openejb.config.DeploymentFilterable;
 import org.apache.openejb.config.WebModule;
 import org.apache.openejb.core.LocalInitialContext;
 import org.apache.openejb.core.LocalInitialContextFactory;
-import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.web.LightweightWebAppBuilder;

http://git-wip-us.apache.org/repos/asf/tomee/blob/9c894b2a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
index 8adc167..45d350f 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiAppContextsService.java
@@ -40,6 +40,7 @@ import org.apache.webbeans.web.context.ServletRequestContext;
 import org.apache.webbeans.web.intercept.RequestScopedBeanInterceptorHandler;
 
 import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.BusyConversationException;
 import javax.enterprise.context.ContextException;
 import javax.enterprise.context.Conversation;
 import javax.enterprise.context.ConversationScoped;
@@ -337,6 +338,22 @@ public class CdiAppContextsService extends AbstractContextsService implements Co
         }
     }
 
+    public void checkConversationState() {
+        final ServletRequestContext rc  = getRequestContext(false);
+        if (rc != null && rc.getServletRequest() != null && conversationService != null) {
+            final HttpSession session = rc.getServletRequest().getSession(false);
+            if (session != null) {
+                final String cid = rc.getServletRequest().getParameter("cid");
+                if (cid != null) {
+                    final ConversationImpl c = webBeansContext.getConversationManager().getPropogatedConversation(cid, session.getId());
+                    if (c != null && c.iUseIt() > 1) {
+                        throw new BusyConversationException("busy conversation " + c.getId() + '(' + c.getSessionId() + ')');
+                    }
+                }
+            }
+        }
+    }
+
     private void destroyRequestContext() {
         // execute request tasks
         endRequest();
@@ -390,7 +407,7 @@ public class CdiAppContextsService extends AbstractContextsService implements Co
         } else {
             final ConversationImpl conversationImpl = (ConversationImpl) conversation;
             conversationImpl.updateTimeOut();
-            conversationImpl.setInUsed(false);
+            conversationImpl.iDontUseItAnymore();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/9c894b2a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
index b17ae58..e1a7968 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
@@ -137,7 +137,9 @@ public class EndWebBeansListener implements ServletContextListener, ServletReque
      */
     @Override
     public void requestInitialized(ServletRequestEvent event) {
-        // no-op
+        if (contextsService != null) {
+            contextsService.checkConversationState();
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tomee/blob/9c894b2a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
index 4b6ccac..819a43a 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpListenerRegistry.java
@@ -16,8 +16,11 @@
  */
 package org.apache.openejb.server.httpd;
 
+import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.openejb.cdi.Proxys;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
@@ -107,6 +110,10 @@ public class HttpListenerRegistry implements HttpListener {
             for (final Map.Entry<String, HttpListener> entry : listeners.entrySet()) {
                 final String pattern = entry.getKey();
                 if (path.matches(pattern) || path.equals(pattern)) {
+                    final WebBeansContext wbc = WebBeansContext.class.cast(request.getAttribute("openejb_owb_context"));
+                    if (wbc != null) {
+                        CdiAppContextsService.class.cast(wbc.getService(ContextsService.class)).checkConversationState();
+                    }
                     entry.getValue().onMessage(request, response);
                     break;
                 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/9c894b2a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
index 34ac621..140be2e 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpRegistry.java
@@ -136,13 +136,16 @@ public class OpenEJBHttpRegistry {
                     } else {
                         thread.setContextClassLoader(classLoader);
 
-                        try { // surely an issue or something just tolerated for fake webapps
-                            wbc = WebBeansContext.currentInstance();
-                        } catch (final IllegalStateException ise) {
-                            // no-op
+                        if (SystemInstance.isInitialized()) { // avoid to rely on default if we didnt init it and then create lazily a context
+                            try { // surely an issue or something just tolerated for fake webapps
+                                wbc = WebBeansContext.currentInstance();
+                            } catch (final IllegalStateException ise) {
+                                // no-op
+                            }
                         }
                     }
                     if (wbc != null) {
+                        httpRequest.setAttribute("openejb_owb_context", wbc);
                         initCdi(wbc, httpRequest).init();
                     }
                 }