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:50 UTC
[1/2] tomee git commit: basic AsyncContext impl - mainly mock +
openejb.http.default-content-type to be able to switch default content type
response - against servlet spec but useless for very simple cases
Repository: tomee
Updated Branches:
refs/heads/develop 765bb1d0c -> f09c41bd2
basic AsyncContext impl - mainly mock + openejb.http.default-content-type to be able to switch default content type response - against servlet spec but useless for very simple cases
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/6f0b4ed5
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/6f0b4ed5
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/6f0b4ed5
Branch: refs/heads/develop
Commit: 6f0b4ed557bd280541c9d326af6d0a3af651f46b
Parents: 765bb1d
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Dec 26 12:54:56 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Dec 26 12:54:56 2014 +0100
----------------------------------------------------------------------
.../server/httpd/HttpListenerRegistry.java | 2 +-
.../openejb/server/httpd/HttpRequestImpl.java | 12 ++--
.../openejb/server/httpd/HttpResponseImpl.java | 4 +-
.../openejb/server/httpd/OpenEJBHttpServer.java | 60 +++++++++++---------
.../httpejbd | 5 ++
.../org/apache/openejb/server/ServicePool.java | 26 ++++++---
tck/cdi-embedded/pom.xml | 1 +
tck/cdi-embedded/src/test/resources/failing.xml | 6 +-
8 files changed, 75 insertions(+), 41 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/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 414c8e7..4b6ccac 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
@@ -64,7 +64,6 @@ public class HttpListenerRegistry implements HttpListener {
@Override
public void onMessage(final HttpRequest request, final HttpResponse response) throws Exception {
- final HttpRequest registered = this.request.get();
final String path;
if (!HttpRequestImpl.class.isInstance(request)) {
path = request.getRequestURI();
@@ -80,6 +79,7 @@ public class HttpListenerRegistry implements HttpListener {
filters = new HashMap<>(filterRegistry);
}
+ final HttpRequest registered = this.request.get();
final boolean reset = registered == null;
try {
if (reset) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/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 c04cb61..f923575 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
@@ -943,7 +943,8 @@ public class HttpRequestImpl implements HttpRequest {
@Override
public AsyncContext getAsyncContext() {
- return null;
+ setAttribute("openejb_async", "true");
+ return new OpenEJBAsyncContext(this /* TODO */, HttpResponse.class.cast(getAttribute("openejb_response")), contextPath);
}
public Object getAttribute(String name) {
@@ -971,12 +972,15 @@ public class HttpRequestImpl implements HttpRequest {
@Override
public AsyncContext startAsync() {
- return null;
+ return startAsync(this, HttpResponse.class.cast(getAttribute("openejb_response")));
}
@Override
- public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) {
- return null;
+ public AsyncContext startAsync(final ServletRequest servletRequest, final ServletResponse servletResponse) {
+ setAttribute("openejb_async", "true");
+ final OpenEJBAsyncContext asyncContext = new OpenEJBAsyncContext(this /* TODO */, servletResponse, contextPath);
+ asyncContext.internalStartAsync();
+ return asyncContext;
}
public String getParameter(String name) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
index 5212519..a30f020 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
@@ -16,6 +16,7 @@
*/
package org.apache.openejb.server.httpd;
+import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.openejb.util.OpenEjbVersion;
@@ -45,6 +46,7 @@ import java.util.StringTokenizer;
*/
public class HttpResponseImpl implements HttpResponse {
private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB_SERVER, HttpResponseImpl.class.getName());
+ private static final String DEFAULT_CONTENT_TYPE = SystemInstance.get().getProperty("openejb.http.default-content-type", "text/html");
/**
* Response string
@@ -375,7 +377,7 @@ public class HttpResponseImpl implements HttpResponse {
* creates a new instance of HttpResponseImpl with default values
*/
protected HttpResponseImpl() {
- this(200, "OK", "text/html");
+ this(200, "OK", DEFAULT_CONTENT_TYPE);
}
/**
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/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 c8ee822..1b9d8de 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
@@ -99,6 +99,7 @@ public class OpenEJBHttpServer implements HttpServer {
*/
OutputStream out = null;
+ boolean close = true;
try {
RequestInfos.initRequestInfo(socket);
@@ -107,37 +108,39 @@ public class OpenEJBHttpServer implements HttpServer {
//TODO: if ssl change to https
final URI socketURI = new URI("http://" + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort());
- processRequest(socketURI, in, out);
+ close = processRequest(socket, socketURI, in, out);
- } catch (Throwable e) {
+ } catch (final Throwable e) {
log.error("Unexpected error", e);
} finally {
- if (out != null) {
- try {
- out.flush();
- } catch (Throwable e) {
- //Ignore
+ if (close) {
+ if (out != null) {
+ try {
+ out.flush();
+ } catch (Throwable e) {
+ //Ignore
+ }
+ try {
+ out.close();
+ } catch (Throwable e) {
+ //Ignore
+ }
}
- try {
- out.close();
- } catch (Throwable e) {
- //Ignore
+
+ if (in != null) {
+ try {
+ in.close();
+ } catch (Throwable e) {
+ //Ignore
+ }
}
- }
- if (in != null) {
try {
- in.close();
+ socket.close();
} catch (Throwable e) {
- //Ignore
+ log.error("Encountered problem while closing connection with client: " + e.getMessage());
}
}
-
- try {
- socket.close();
- } catch (Throwable e) {
- log.error("Encountered problem while closing connection with client: " + e.getMessage());
- }
}
}
@@ -166,6 +169,7 @@ public class OpenEJBHttpServer implements HttpServer {
@Override
public void stop() throws ServiceException {
+ OpenEJBAsyncContext.destroy();
}
@Override
@@ -189,13 +193,14 @@ public class OpenEJBHttpServer implements HttpServer {
* @param in the input stream from the browser
* @param out the output stream to the browser
*/
- private void processRequest(final URI socketURI, final InputStream in, final OutputStream out) {
+ private boolean processRequest(final Socket socket, final URI socketURI, final InputStream in, final OutputStream out) {
HttpResponseImpl response = null;
try {
- response = process(socketURI, in);
-
+ response = process(socket, socketURI, in);
+ return response != null;
} catch (Throwable t) {
response = HttpResponseImpl.createError(t.getMessage(), t);
+ return true;
} finally {
try {
if (response != null) {
@@ -219,7 +224,7 @@ public class OpenEJBHttpServer implements HttpServer {
}
}
- private HttpResponseImpl process(final URI socketURI, final InputStream in) throws OpenEJBException {
+ private HttpResponseImpl process(final Socket socket, final URI socketURI, final InputStream in) throws OpenEJBException {
final HttpRequestImpl req = new HttpRequestImpl(socketURI);
final HttpResponseImpl res = new HttpResponseImpl();
@@ -258,12 +263,15 @@ public class OpenEJBHttpServer implements HttpServer {
}
try {
+ req.setAttribute("openejb_response", res);
+ req.setAttribute("openejb_socket", socket);
listener.onMessage(req, res);
} catch (Throwable t) {
throw new OpenEJBException("Error occurred while executing the module " + location + "\n" + t.getClass().getName() + ":\n" + t.getMessage(), t);
}
- return res;
+ final boolean async = "true".equals(req.getAttribute("openejb_async"));
+ return !async ? res : null;
}
public static String reformat(final String raw) {
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/httpejbd
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/httpejbd b/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/httpejbd
index 1a51b98..1fcdd29 100644
--- a/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/httpejbd
+++ b/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/httpejbd
@@ -3,4 +3,9 @@ bind = 127.0.0.1
port = 4204
disabled = ${openejb.profile.custom}
threads = 200
+
+# if possible use jetty
useJetty = true
+
+# ServicePool shouldn't force socket.close() for AsyncContext handling, HttpServer does it well already in any case
+forceSocketClose = false
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
----------------------------------------------------------------------
diff --git a/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java b/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
index 70d0467..3396858 100644
--- a/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
+++ b/server/openejb-server/src/main/java/org/apache/openejb/server/ServicePool.java
@@ -43,6 +43,7 @@ public class ServicePool extends ServerServiceFilter {
private final ThreadPoolExecutor threadPool;
private final AtomicBoolean stop = new AtomicBoolean();
+ private boolean forceSocketClose = true;
public ServicePool(final ServerService next, final Properties properties) {
/**Defaults.
@@ -52,20 +53,28 @@ public class ServicePool extends ServerServiceFilter {
* a slot for up to 10 seconds before rejecting the runnable.
* If a thread remains idle for more than 1 minute then it will be removed.
*/
- this(next, new Options(properties).get("threadsCore", 10), new Options(properties).get("threads", 150), new Options(properties).get("queue", 0), new Options(properties).get("block", true), new Options(properties).get("keepAliveTime", KEEP_ALIVE_TIME));
+ this(next, new Options(properties));
+ }
+ public ServicePool(final ServerService next, final Options properties) {
+ this(next, properties.get("threadsCore", 10), properties.get("threads", 150),
+ properties.get("queue", 0), properties.get("block", true),
+ properties.get("keepAliveTime", KEEP_ALIVE_TIME),
+ properties.get("forceSocketClose", true));
}
public ServicePool(final ServerService next, final int threads) {
- this(next, threads, threads, 0, true, KEEP_ALIVE_TIME);
+ this(next, threads, threads, 0, true, KEEP_ALIVE_TIME, true);
}
public ServicePool(final ServerService next, final int threads, final int queue, final boolean block) {
- this(next, threads, threads, queue, block, KEEP_ALIVE_TIME);
+ this(next, threads, threads, queue, block, KEEP_ALIVE_TIME, true);
}
- public ServicePool(final ServerService next, int threadCore, int threads, int queue, final boolean block, long keepAliveTime) {
+ public ServicePool(final ServerService next, int threadCore, int threads, int queue, final boolean block, long keepAliveTime, boolean forceClose) {
super(next);
+ this.forceSocketClose = forceClose;
+
if (keepAliveTime <= 0) {
keepAliveTime = KEEP_ALIVE_TIME;
}
@@ -187,9 +196,10 @@ public class ServicePool extends ServerServiceFilter {
ClassLoader cl = null;
+ final Thread thread = Thread.currentThread();
try {
- cl = Thread.currentThread().getContextClassLoader();
- Thread.currentThread().setContextClassLoader(tccl);
+ cl = thread.getContextClassLoader();
+ thread.setContextClassLoader(tccl);
if (stop.get()) {
return;
@@ -224,7 +234,7 @@ public class ServicePool extends ServerServiceFilter {
//Ensure delegated socket is closed here
try {
- if (socket != null) {
+ if (forceSocketClose && socket != null) {
socket.close();
}
} catch (Throwable t) {
@@ -234,7 +244,7 @@ public class ServicePool extends ServerServiceFilter {
}
}
- Thread.currentThread().setContextClassLoader(cl);
+ thread.setContextClassLoader(cl);
}
}
};
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/tck/cdi-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml
index a276d3e..d2e230a 100644
--- a/tck/cdi-embedded/pom.xml
+++ b/tck/cdi-embedded/pom.xml
@@ -189,6 +189,7 @@
<openejb.cdi.filter.classloader>false</openejb.cdi.filter.classloader>
<openejb.http.mock-request>true</openejb.http.mock-request>
+ <openejb.http.default-content-type>text/plain</openejb.http.default-content-type>
<openejb.deploymentId.format>{appId}/{ejbJarId}/{ejbName}</openejb.deploymentId.format>
<org.apache.openejb.assembler.classic.WebAppBuilder>org.apache.openejb.web.LightweightWebAppBuilder</org.apache.openejb.assembler.classic.WebAppBuilder>
</systemPropertyVariables>
http://git-wip-us.apache.org/repos/asf/tomee/blob/6f0b4ed5/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 956b46e..9cf0646 100644
--- a/tck/cdi-embedded/src/test/resources/failing.xml
+++ b/tck/cdi-embedded/src/test/resources/failing.xml
@@ -18,7 +18,11 @@
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<!-- runner helping properties
- -Dopenejb.cdi.filter.classloader=false -Dorg.apache.openejb.assembler.classic.WebAppBuilder=org.apache.openejb.web.LightweightWebAppBuilder -Dopenejb.cdi.debug=true -Dopenejb.http.mock-request=true
+ -Dorg.apache.openejb.assembler.classic.WebAppBuilder=org.apache.openejb.web.LightweightWebAppBuilder
+ -Dopenejb.cdi.debug=true
+ -Dopenejb.cdi.filter.classloader=false
+ -Dopenejb.http.mock-request=true
+ -Dopenejb.http.default-content-type=text/plain
-->
<classes>
<class name="org.jboss.cdi.tck.tests.context.application.async.ApplicationContextAsyncListenerTest" />
[2/2] tomee git commit: basic support of session/request http
listeners in openejb-http
Posted by rm...@apache.org.
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>