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();
}
}