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/26 13:26:51 UTC

[2/2] tomee git commit: basic support of session/request http listeners in openejb-http

basic support of session/request http listeners in openejb-http


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

Branch: refs/heads/develop
Commit: f09c41bd2a95f2b5083ebcd405c17caeba4fdc8d
Parents: 6f0b4ed
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Dec 26 13:25:29 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Dec 26 13:25:29 2014 +0100

----------------------------------------------------------------------
 .../openejb/web/LightweightWebAppBuilder.java   | 10 ++++++++
 .../openejb/server/httpd/HttpRequestImpl.java   | 18 +++++++++++++-
 .../openejb/server/httpd/HttpSessionImpl.java   | 26 ++++++++++++++++++--
 tck/cdi-embedded/src/test/resources/failing.xml |  2 +-
 4 files changed, 52 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/f09c41bd/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
index 7a9176b..3befe49 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
@@ -62,6 +62,7 @@ import javax.ws.rs.core.Application;
 import java.io.File;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
@@ -287,6 +288,15 @@ public class LightweightWebAppBuilder implements WebAppBuilder {
         }
     }
 
+    public Collection<Object> listenersFor(final String context) {
+        for (final Map.Entry<WebAppInfo, List<Object>> info : listeners.entrySet()) {
+            if (context != null && context.replace("/", "").equals(info.getKey().contextRoot.replace("/", ""))) {
+                return info.getValue();
+            }
+        }
+        return null;
+    }
+
     private static Class<?> loadFromUrls(final ClassLoader loader, final String url, final String path) throws ClassNotFoundException {
         final String classname;
         if (path.startsWith("archive:") && path.contains(".war/")) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/f09c41bd/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
index f923575..91eddc3 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
@@ -30,6 +30,7 @@ import javax.servlet.ServletException;
 import javax.servlet.ServletInputStream;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletRequestEvent;
+import javax.servlet.ServletRequestListener;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
@@ -151,6 +152,7 @@ public class HttpRequestImpl implements HttpRequest {
     private ServletContext context = null;
     private String contextPath = "";
     private String servletPath = null;
+    private Collection<ServletRequestListener> listeners;
 
     public HttpRequestImpl(URI socketURI) {
         this.socketURI = socketURI;
@@ -854,7 +856,7 @@ public class HttpRequestImpl implements HttpRequest {
 
     public HttpSession getSession(boolean create) {
         if (session == null && create) {
-            session = new HttpSessionImpl(SESSIONS);
+            session = new HttpSessionImpl(SESSIONS, contextPath);
             if (begin != null) {
                 begin.sessionCreated(new HttpSessionEvent(session));
                 session = new SessionInvalidateListener(session, end);
@@ -1139,9 +1141,23 @@ public class HttpRequestImpl implements HttpRequest {
         if (begin != null) {
             begin.requestInitialized(new ServletRequestEvent(getServletContext(), this));
         }
+
+        listeners = LightweightWebAppBuilderListenerExtractor.findByTypeForContext(contextPath, ServletRequestListener.class);
+        if (!listeners.isEmpty()) {
+            final ServletRequestEvent event = new ServletRequestEvent(getServletContext(), this);
+            for (final ServletRequestListener listener : listeners) {
+                listener.requestInitialized(event);
+            }
+        }
     }
 
     public void destroy() {
+        if (listeners != null && !listeners.isEmpty()) {
+            final ServletRequestEvent event = new ServletRequestEvent(getServletContext(), this);
+            for (final ServletRequestListener listener : listeners) {
+                listener.requestDestroyed(event);
+            }
+        }
         if (end != null) {
             end.requestDestroyed(new ServletRequestEvent(getServletContext(), this));
         }

http://git-wip-us.apache.org/repos/asf/tomee/blob/f09c41bd/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 940f9fa..b2e80c7 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
@@ -21,7 +21,10 @@ import org.apache.openejb.loader.SystemInstance;
 
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpSessionContext;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -30,16 +33,28 @@ import java.util.UUID;
 import java.util.concurrent.ConcurrentMap;
 
 public class HttpSessionImpl implements HttpSession {
+    private Collection<HttpSessionListener> listeners;
     private String sessionId = UUID.randomUUID().toString();
     private Map<String, Object> attributes = new HashMap<String, Object>();
     private final ConcurrentMap<String, HttpSession> mapToClean;
 
-    public HttpSessionImpl(final ConcurrentMap<String, HttpSession> sessions) {
+    public HttpSessionImpl(final ConcurrentMap<String, HttpSession> sessions, final String contextPath) {
         mapToClean = sessions;
+        if (contextPath == null) {
+            return;
+        }
+
+        listeners = LightweightWebAppBuilderListenerExtractor.findByTypeForContext(contextPath, HttpSessionListener.class);
+        if (!listeners.isEmpty()) {
+            final HttpSessionEvent event = new HttpSessionEvent(this);
+            for (final HttpSessionListener o : listeners) {
+                HttpSessionListener.class.cast(o).sessionCreated(event);
+            }
+        }
     }
 
     public HttpSessionImpl() {
-        this(null);
+        this(null, null);
     }
 
     public void newSessionId() {
@@ -64,6 +79,13 @@ public class HttpSessionImpl implements HttpSession {
 
     @Override
     public void invalidate() {
+        if (!listeners.isEmpty()) {
+            final HttpSessionEvent event = new HttpSessionEvent(this);
+            for (final HttpSessionListener o : listeners) {
+                HttpSessionListener.class.cast(o).sessionDestroyed(event);
+            }
+        }
+
         attributes.clear();
         if (mapToClean != null) {
             mapToClean.remove(sessionId);

http://git-wip-us.apache.org/repos/asf/tomee/blob/f09c41bd/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 9cf0646..ad1d852 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -25,7 +25,7 @@
     -Dopenejb.http.default-content-type=text/plain
     -->
     <classes>
-      <class name="org.jboss.cdi.tck.tests.context.application.async.ApplicationContextAsyncListenerTest" />
+      <class name="org.jboss.cdi.tck.tests.context.application.ApplicationContextTest" />
     </classes>
   </test>
 </suite>