You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by st...@apache.org on 2015/05/17 13:20:59 UTC
[13/37] tomee git commit: destroying session in a SessionManager in
embedded mode and not in cdi context
destroying session in a SessionManager in embedded mode and not in cdi context
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/bdd8644b
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/bdd8644b
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/bdd8644b
Branch: refs/heads/master
Commit: bdd8644b96f620ab0c642383d12ceefa9ec525bd
Parents: 12e1a44
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sun May 3 23:59:34 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:54:15 2015 +0200
----------------------------------------------------------------------
.../server/httpd/BeginWebBeansListener.java | 8 +--
.../openejb/server/httpd/HttpSessionImpl.java | 1 -
.../openejb/server/httpd/OpenEJBHttpServer.java | 17 ++++---
.../server/httpd/session/SessionManager.java | 52 ++++++++++++++------
tck/cdi-embedded/src/test/resources/failing.xml | 2 +-
5 files changed, 51 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/bdd8644b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
index 4a9b6e1..ad73556 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/BeginWebBeansListener.java
@@ -95,7 +95,7 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
elStore.destroyELContextStore();
}
- webBeansContext.getContextsService().endContext(RequestScoped.class, event);
+ contextsService.endContext(RequestScoped.class, event);
if (webBeansContext instanceof WebappWebBeansContext) { // end after child
((WebappWebBeansContext) webBeansContext).getParent().getContextsService().endContext(RequestScoped.class, event);
}
@@ -123,7 +123,7 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
if (webBeansContext instanceof WebappWebBeansContext) { // start before child
((WebappWebBeansContext) webBeansContext).getParent().getContextsService().startContext(RequestScoped.class, event);
}
- this.webBeansContext.getContextsService().startContext(RequestScoped.class, event);
+ contextsService.startContext(RequestScoped.class, event);
// we don't initialise the Session here but do it lazily if it gets requested
// the first time. See OWB-457
@@ -146,7 +146,7 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
if (webBeansContext instanceof WebappWebBeansContext) { // start before child
((WebappWebBeansContext) webBeansContext).getParent().getContextsService().startContext(SessionScoped.class, event.getSession());
}
- this.webBeansContext.getContextsService().startContext(SessionScoped.class, event.getSession());
+ contextsService.startContext(SessionScoped.class, event.getSession());
} catch (final Exception e) {
logger.error(OWBLogConst.ERROR_0020, event.getSession());
WebBeansUtil.throwRuntimeExceptions(e);
@@ -166,7 +166,7 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
logger.debug("Destroying a session with session id : [{0}]", event.getSession().getId());
}
- webBeansContext.getContextsService().endContext(SessionScoped.class, event.getSession());
+ contextsService.endContext(SessionScoped.class, event.getSession());
WebBeansListenerHelper.destroyFakedRequest(this);
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/bdd8644b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
index 657a394..f82b7bf 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpSessionImpl.java
@@ -102,7 +102,6 @@ public class HttpSessionImpl implements HttpSession {
}
}
- attributes.clear();
final SessionManager sessionManager = SystemInstance.get().getComponent(SessionManager.class);
if (sessionManager != null) {
sessionManager.removeSession(sessionId);
http://git-wip-us.apache.org/repos/asf/tomee/blob/bdd8644b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
index 65e8c66..16277fb 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
@@ -29,12 +29,6 @@ import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.OptionsLog;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -46,6 +40,12 @@ import java.net.URI;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
/**
* This is the main class for the web administration. It takes care of the
@@ -62,7 +62,7 @@ public class OpenEJBHttpServer implements HttpServer {
private boolean indent;
public OpenEJBHttpServer() {
- this(getHttpListenerRegistry());
+ this(null);
}
public static HttpListenerRegistry getHttpListenerRegistry() {
@@ -76,10 +76,11 @@ public class OpenEJBHttpServer implements HttpServer {
}
public OpenEJBHttpServer(final HttpListener listener) {
- this.listener = new OpenEJBHttpRegistry.ClassLoaderHttpListener(listener, ParentClassLoaderFinder.Helper.get());
if (SystemInstance.get().getComponent(SessionManager.class) == null) {
SystemInstance.get().setComponent(SessionManager.class, new SessionManager());
}
+ this.listener = new OpenEJBHttpRegistry.ClassLoaderHttpListener(
+ listener == null ? getHttpListenerRegistry() : listener, ParentClassLoaderFinder.Helper.get());
}
public static boolean isTextXml(final Map<String, String> headers) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/bdd8644b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/session/SessionManager.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/session/SessionManager.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/session/SessionManager.java
index ad455b1..2284421 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/session/SessionManager.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/session/SessionManager.java
@@ -19,10 +19,11 @@ package org.apache.openejb.server.httpd.session;
import org.apache.openejb.core.WebContext;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.server.httpd.BeginWebBeansListener;
-import org.apache.openejb.server.httpd.HttpRequestImpl;
+import org.apache.openejb.server.httpd.EndWebBeansListener;
import org.apache.openejb.server.httpd.HttpSession;
import org.apache.openejb.util.DaemonThreadFactory;
import org.apache.openejb.util.Duration;
+import org.apache.webbeans.config.WebBeansContext;
import java.util.ArrayList;
import java.util.Collection;
@@ -43,16 +44,37 @@ public class SessionManager {
private static volatile ScheduledExecutorService es;
public void destroy(final WebContext app) {
+ if (app == null) {
+ return;
+ }
+
+ final WebBeansContext wbc = app.getWebBeansContext();
final Iterator<SessionWrapper> iterator = sessions.values().iterator();
while (iterator.hasNext()) {
final SessionWrapper next = iterator.next();
if (next.app == app) {
- next.session.invalidate();
+ doDestroy(next);
iterator.remove();
}
}
}
+ private void doDestroy(final SessionWrapper next) {
+ HttpSessionEvent event = null;
+ if (next.end != null) {
+ event = new HttpSessionEvent(next.session);
+ next.end.sessionDestroyed(event);
+ next.begin.sessionCreated(event); // just set session thread local
+ }
+ try {
+ next.session.invalidate();
+ } finally {
+ if (next.begin != null) {
+ next.begin.sessionDestroyed(event);
+ }
+ }
+ }
+
public void destroy() {
if (es == null) {
return;
@@ -69,7 +91,7 @@ public class SessionManager {
return;
}
final Duration duration = new Duration(SystemInstance.get().getProperty("openejb.http.eviction.duration", "1 minute"));
- es = Executors.newScheduledThreadPool(1, new DaemonThreadFactory(HttpRequestImpl.class));
+ es = Executors.newScheduledThreadPool(1, new DaemonThreadFactory(SessionManager.class));
es.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
@@ -77,12 +99,8 @@ public class SessionManager {
final HttpSession session = data.session;
if (session.getMaxInactiveInterval() > 0
&& session.getLastAccessedTime() + TimeUnit.SECONDS.toMillis(session.getMaxInactiveInterval()) < System.currentTimeMillis()) {
- sessions.remove(session.getId());
- session.invalidate();
-
- if (data.listener != null) {
- data.listener.sessionDestroyed(new HttpSessionEvent(session));
- }
+ doDestroy(data);
+ sessions.remove(data.session.getId());
}
}
}
@@ -105,8 +123,10 @@ public class SessionManager {
return sessions.size();
}
- public SessionWrapper newSession(final BeginWebBeansListener listener, final HttpSession session, final WebContext app) {
- final SessionWrapper existing = sessions.putIfAbsent(session.getId(), new SessionWrapper(listener, session, app));
+ public SessionWrapper newSession(final BeginWebBeansListener begin, final EndWebBeansListener end,
+ final HttpSession session, final WebContext app) {
+ final SessionWrapper wrapper = new SessionWrapper(begin, end, session, app);
+ final SessionWrapper existing = sessions.putIfAbsent(session.getId(), wrapper);
if (existing == null && es == null) {
synchronized (this) {
if (es == null) {
@@ -114,17 +134,19 @@ public class SessionManager {
}
}
}
- return existing;
+ return existing == null ? wrapper : existing;
}
public static class SessionWrapper extends HttpSessionEvent {
- public final BeginWebBeansListener listener;
+ public final BeginWebBeansListener begin;
+ public final EndWebBeansListener end;
public final HttpSession session;
public final WebContext app;
- public SessionWrapper(final BeginWebBeansListener listener, final HttpSession session, final WebContext app) {
+ public SessionWrapper(final BeginWebBeansListener begin, final EndWebBeansListener end, final HttpSession session, final WebContext app) {
super(session);
- this.listener = listener;
+ this.begin = begin;
+ this.end = end;
this.session = session;
this.app = app;
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/bdd8644b/tck/cdi-embedded/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/src/test/resources/failing.xml b/tck/cdi-embedded/src/test/resources/failing.xml
index bf0d833..3a10892 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -32,7 +32,7 @@
-Dopenejb.cdi.conversation.http.use-get-parameter=true
-->
<classes>
- <class name="org.jboss.cdi.tck.tests.lookup.injection.non.contextual.InjectionIntoNonContextualComponentTest" />
+ <class name="org.jboss.cdi.tck.tests.context.session.listener.shutdown.SessionContextListenerShutdownTest" />
</classes>
</test>
</suite>