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/05 07:50:21 UTC

[01/16] tomee git commit: TOMEE-1572 upgrade to latest OWB snapshot

Repository: tomee
Updated Branches:
  refs/heads/fb_tomee2_owb16 [created] 58b9bc093


TOMEE-1572 upgrade to latest OWB snapshot


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

Branch: refs/heads/fb_tomee2_owb16
Commit: d376ef5a37b489edfb7579895b3b2b031c85b8d2
Parents: 1f9fdc9
Author: Mark Struberg <st...@apache.org>
Authored: Sat May 2 11:38:02 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Sat May 2 11:43:44 2015 +0200

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/d376ef5a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 967955f..e2d717f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,7 +95,7 @@
     <tomee.version>2.0.0-SNAPSHOT</tomee.version>
 
     <openjpa.version>2.4.0</openjpa.version>
-    <org.apache.openwebbeans.version>1.5.0</org.apache.openwebbeans.version>
+    <org.apache.openwebbeans.version>1.5.1-SNAPSHOT</org.apache.openwebbeans.version>
     <jcs.version>2.0-SNAPSHOT</jcs.version>
 
     <!-- Maven module versions -->


[07/16] tomee git commit: TOMEE-1569 forcing container loader for LoggerCreator

Posted by st...@apache.org.
TOMEE-1569 forcing container loader for LoggerCreator


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 0421a028293a09037b5d5074bda39a3f366bdaa3
Parents: b7eb5b0
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Thu Apr 30 09:53:40 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:00:19 2015 +0200

----------------------------------------------------------------------
 .../openejb/core/ParentClassLoaderFinder.java   |  3 +-
 .../org/apache/openejb/log/LoggerCreator.java   | 29 ++++++++++++--------
 2 files changed, 20 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/0421a028/container/openejb-core/src/main/java/org/apache/openejb/core/ParentClassLoaderFinder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ParentClassLoaderFinder.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ParentClassLoaderFinder.java
index dca0d39..c6497a1 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/core/ParentClassLoaderFinder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ParentClassLoaderFinder.java
@@ -27,7 +27,8 @@ public interface ParentClassLoaderFinder {
 
     class Helper {
         public static ClassLoader get() {
-            final ParentClassLoaderFinder parentFinder = SystemInstance.get().getComponent(ParentClassLoaderFinder.class);
+            final ParentClassLoaderFinder parentFinder = SystemInstance.isInitialized() ?
+                SystemInstance.get().getComponent(ParentClassLoaderFinder.class) : null;
             if (parentFinder != null) {
                 return parentFinder.getParentClassLoader(FALLBACK);
             }

http://git-wip-us.apache.org/repos/asf/tomee/blob/0421a028/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java b/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
index 47d2935..c1fb803 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
@@ -52,20 +52,27 @@ public class LoggerCreator implements Callable<Logger> {
         if (logger == null) {
             synchronized (this) { // no need of lock for this part
                 if (logger == null) {
+                    final Thread thread = Thread.currentThread();
+                    final ClassLoader originalLoader = thread.getContextClassLoader();
+                    thread.setContextClassLoader(ParentClassLoaderFinder.Helper.get());
                     try {
-                        logger = Logger.getLogger(name);
-                    } catch (final Exception e) {
-                        logger = Logger.getLogger(name); // try again
-                    }
+                        try {
+                            logger = Logger.getLogger(name);
+                        } catch (final Exception e) {
+                            logger = Logger.getLogger(name); // try again
+                        }
 
-                    // if level set through properties force it
-                    final Properties p = SystemInstance.get().getProperties();
-                    final String levelName = p.getProperty("logging.level." + logger.getName());
-                    if (levelName != null) {
-                        final Level level = Level.parse(levelName);
-                        for (final Handler handler : logger.getHandlers()) {
-                            handler.setLevel(level);
+                        // if level set through properties force it
+                        final Properties p = SystemInstance.get().getProperties();
+                        final String levelName = p.getProperty("logging.level." + logger.getName());
+                        if (levelName != null) {
+                            final Level level = Level.parse(levelName);
+                            for (final Handler handler : logger.getHandlers()) {
+                                handler.setLevel(level);
+                            }
                         }
+                    } finally {
+                        thread.setContextClassLoader(originalLoader);
                     }
                 }
             }


[10/16] tomee git commit: TOMEE-1571 destroying http session of openejb-http layer when undeploying applications with openejb embedded arquillian adapter

Posted by st...@apache.org.
TOMEE-1571 destroying http session of openejb-http layer when undeploying applications with openejb embedded arquillian adapter


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 95ea7d5be3a8da495a71003ba9bd61bf5bcad27b
Parents: 065fc36
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sun May 3 22:20:13 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:32:04 2015 +0200

----------------------------------------------------------------------
 .../openejb/OpenEJBDeployableContainer.java     |  30 ++++-
 .../http/WebArchiveResourceProvider.java        |  16 +++
 .../arquillian/openejb/SessionDestroyTest.java  | 113 ++++++++++++++++
 .../openejb/server/httpd/HttpRequestImpl.java   | 126 +++++-------------
 .../openejb/server/httpd/HttpResponseImpl.java  |   3 +-
 .../openejb/server/httpd/HttpSessionImpl.java   |  26 ++--
 .../server/httpd/OpenEJBHttpRegistry.java       |   2 +
 .../openejb/server/httpd/OpenEJBHttpServer.java |   9 +-
 .../server/httpd/session/SessionManager.java    | 132 +++++++++++++++++++
 .../httpd/HttpResponseImplSessionTest.java      |  16 +--
 10 files changed, 346 insertions(+), 127 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/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 90d86b1..44915b8 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
@@ -37,8 +37,10 @@ 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.core.WebContext;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.httpd.session.SessionManager;
 import org.apache.openejb.web.LightweightWebAppBuilder;
 import org.apache.webbeans.web.lifecycle.test.MockHttpSession;
 import org.apache.webbeans.web.lifecycle.test.MockServletContext;
@@ -58,11 +60,6 @@ import org.jboss.arquillian.test.spi.annotation.SuiteScoped;
 import org.jboss.shrinkwrap.api.Archive;
 import org.jboss.shrinkwrap.descriptor.api.Descriptor;
 
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpSession;
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
 import java.io.IOException;
@@ -75,6 +72,11 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpSession;
 
 import static org.apache.openejb.cdi.ScopeHelper.startContexts;
 import static org.apache.openejb.cdi.ScopeHelper.stopContexts;
@@ -295,7 +297,8 @@ public class OpenEJBDeployableContainer implements DeployableContainer<OpenEJBCo
                 final AppInfo appInfo = configurationFactory.configureApplication(module);
 
                 final WebAppBuilder webAppBuilder = SystemInstance.get().getComponent(WebAppBuilder.class);
-                if (webAppBuilder != null && LightweightWebAppBuilder.class.isInstance(webAppBuilder)) {
+                final boolean isEmbeddedWebAppBuilder = webAppBuilder != null && LightweightWebAppBuilder.class.isInstance(webAppBuilder);
+                if (isEmbeddedWebAppBuilder) {
                     // for now we keep the same classloader, open to discussion if we should recreate it, not sure it does worth it
                     final LightweightWebAppBuilder lightweightWebAppBuilder = LightweightWebAppBuilder.class.cast(webAppBuilder);
                     for (final WebModule w : module.getWebModules()) {
@@ -310,6 +313,21 @@ public class OpenEJBDeployableContainer implements DeployableContainer<OpenEJBCo
                     }
                 }
                 final AppContext appCtx = assembler.createApplication(appInfo, module.getClassLoader());
+                if (isEmbeddedWebAppBuilder && PROPERTIES.containsKey(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE) && !appCtx.getWebContexts().isEmpty()) {
+                    cls.add(new Closeable() {
+                        @Override
+                        public void close() throws IOException {
+                            try {
+                                final SessionManager sessionManager = SystemInstance.get().getComponent(SessionManager.class);
+                                for (final WebContext web : appCtx.getWebContexts()) {
+                                    sessionManager.destroy(web);
+                                }
+                            } catch (final Throwable e) {
+                                // no-op
+                            }
+                        }
+                    });
+                }
 
                 final ServletContext appServletContext = new MockServletContext();
                 final HttpSession appSession = new MockHttpSession();

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/http/WebArchiveResourceProvider.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/http/WebArchiveResourceProvider.java b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/http/WebArchiveResourceProvider.java
index 2f1f731..5fd0b04 100644
--- a/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/http/WebArchiveResourceProvider.java
+++ b/arquillian/arquillian-openejb-embedded-5/src/main/java/org/apache/openejb/arquillian/openejb/http/WebArchiveResourceProvider.java
@@ -1,3 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.apache.openejb.arquillian.openejb.http;
 
 import org.apache.openejb.arquillian.openejb.SWClassLoader;

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/SessionDestroyTest.java
----------------------------------------------------------------------
diff --git a/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/SessionDestroyTest.java b/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/SessionDestroyTest.java
new file mode 100644
index 0000000..fbae01e
--- /dev/null
+++ b/arquillian/arquillian-openejb-embedded-5/src/test/java/org/apache/openejb/arquillian/openejb/SessionDestroyTest.java
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.arquillian.openejb;
+
+import org.apache.openejb.loader.IO;
+import org.jboss.arquillian.container.test.api.Deployer;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OperateOnDeployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+import java.net.URL;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebListener;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+@RunWith(Arquillian.class)
+public class SessionDestroyTest {
+    @Deployment(name = "app", managed = false, testable = false)
+    public static Archive<?> app() {
+        return ShrinkWrap.create(WebArchive.class).addClasses(SessionTestManager.class, SessionListener.class);
+    }
+
+    @ArquillianResource
+    private Deployer deployer;
+
+    private static String id;
+
+    @Test
+    @InSequence(1)
+    public void deploy() {
+        reset();
+        deployer.deploy("app");
+    }
+
+    @Test
+    @InSequence(2)
+    @OperateOnDeployment("app")
+    public void doTest(@ArquillianResource final URL url) throws IOException {
+        id = IO.slurp(new URL(url.toExternalForm() + "create"));
+        assertNotNull(SessionListener.created);
+        assertEquals(id, SessionListener.created);
+    }
+
+    @Test
+    @InSequence(3)
+    public void undeployAndAsserts() {
+        deployer.undeploy("app");
+        assertNotNull(SessionListener.destroyed);
+        assertEquals(id, SessionListener.destroyed);
+        reset();
+    }
+
+    private void reset() {
+        SessionListener.destroyed = null;
+        SessionListener.created = null;
+        id = null;
+    }
+
+    @WebServlet("/create")
+    public static class SessionTestManager extends HttpServlet {
+        @Override
+        protected void service(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+            req.getSession().setAttribute("test", "ok");
+            resp.getWriter().write(req.getSession().getId());
+        }
+    }
+
+    @WebListener
+    public static class SessionListener implements HttpSessionListener {
+        private static String created;
+        private static String destroyed;
+
+        @Override
+        public void sessionCreated(final HttpSessionEvent httpSessionEvent) {
+            created = httpSessionEvent.getSession().getId();
+        }
+
+        @Override
+        public void sessionDestroyed(final HttpSessionEvent httpSessionEvent) {
+            destroyed = httpSessionEvent.getSession().getId();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/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 6006178..eaf420f 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
@@ -19,30 +19,13 @@ package org.apache.openejb.server.httpd;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.WebAppInfo;
+import org.apache.openejb.core.WebContext;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.httpd.session.SessionManager;
 import org.apache.openejb.spi.SecurityService;
 import org.apache.openejb.util.ArrayEnumeration;
-import org.apache.openejb.util.DaemonThreadFactory;
-import org.apache.openejb.util.Duration;
 import org.apache.openejb.util.Logger;
 
-import javax.security.auth.login.LoginException;
-import javax.servlet.AsyncContext;
-import javax.servlet.DispatcherType;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletContext;
-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.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpUpgradeHandler;
-import javax.servlet.http.Part;
 import java.io.BufferedReader;
 import java.io.ByteArrayOutputStream;
 import java.io.DataInput;
@@ -67,11 +50,23 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.StringTokenizer;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
+import javax.security.auth.login.LoginException;
+import javax.servlet.AsyncContext;
+import javax.servlet.DispatcherType;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
+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.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpUpgradeHandler;
+import javax.servlet.http.Part;
 
 import static java.util.Collections.singletonList;
 
@@ -83,11 +78,6 @@ public class HttpRequestImpl implements HttpRequest {
     private static final String FORM_URL_ENCODED = "application/x-www-form-urlencoded";
     private static final String TRANSFER_ENCODING = "Transfer-Encoding";
     private static final String CHUNKED = "chunked";
-    protected static final String EJBSESSIONID = "EJBSESSIONID";
-    protected static final String JSESSIONID = "JSESSIONID";
-
-    // note: no eviction so invalidate has to be called properly
-    private static final ConcurrentMap<String, RequestSession> SESSIONS = new ConcurrentHashMap<>();
 
     public static final Class<?>[] SERVLET_CONTEXT_INTERFACES = new Class<?>[]{ServletContext.class};
     public static final InvocationHandler SERVLET_CONTEXT_HANDLER = new InvocationHandler() {
@@ -97,46 +87,9 @@ public class HttpRequestImpl implements HttpRequest {
         }
     };
 
-    private static volatile ScheduledExecutorService es;
-
-    public static void destroyEviction() {
-        if (es == null) {
-            return;
-        }
-        es.shutdownNow();
-        for (RequestSession requestSession : SESSIONS.values()) {
-            requestSession.session.invalidate();
-        }
-        SESSIONS.clear();
-    }
-
-    public static void initEviction() {
-        if (!"true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.http.eviction", "true"))) {
-            return;
-        }
-        final Duration duration = new Duration(SystemInstance.get().getProperty("openejb.http.eviction.duration", "1 minute"));
-        es = Executors.newScheduledThreadPool(1, new DaemonThreadFactory(HttpRequestImpl.class));
-        es.scheduleWithFixedDelay(new Runnable() {
-            @Override
-            public void run() {
-                for (final RequestSession data : new ArrayList<>(SESSIONS.values())) {
-                    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.request != null && data.request.begin != null) {
-                            data.request.begin.sessionDestroyed(new HttpSessionEvent(session));
-                        }
-                    }
-                }
-            }
-        }, duration.getTime(), duration.getTime(), duration.getUnit());
-    }
-
     private EndWebBeansListener end;
     private BeginWebBeansListener begin;
+    private WebContext application;
 
     /**
      * 5.1.1    Method
@@ -441,11 +394,13 @@ public class HttpRequestImpl implements HttpRequest {
                 for (String c : cookies) {
                     final String current = c.trim();
                     if (current.startsWith("EJBSESSIONID=")) {
-                        final RequestSession requestSession = SESSIONS.get(current.substring("EJBSESSIONID=".length()));
-                        session = requestSession == null ? null : requestSession.session;
+                        final SessionManager.SessionWrapper sessionWrapper =
+                                SystemInstance.get().getComponent(SessionManager.class).findSession(current.substring("EJBSESSIONID=".length()));
+                        session = sessionWrapper == null ? null : sessionWrapper.session;
                     } else if (current.startsWith("JSESSIONID=")) {
-                        final RequestSession requestSession = SESSIONS.get(current.substring("JSESSIONID=".length()));
-                        session = requestSession == null ? null : requestSession.session;
+                        final SessionManager.SessionWrapper sessionWrapper =
+                                SystemInstance.get().getComponent(SessionManager.class).findSession(current.substring("JSESSIONID=".length()));
+                        session = sessionWrapper == null ? null : sessionWrapper.session;
                     }
                 }
             }
@@ -932,7 +887,7 @@ public class HttpRequestImpl implements HttpRequest {
                 }
             }
 
-            final HttpSessionImpl impl = new HttpSessionImpl(SESSIONS, contextPath, timeout);
+            final HttpSessionImpl impl = new HttpSessionImpl(contextPath, timeout);
             session = impl;
             if (begin != null) {
                 begin.sessionCreated(new HttpSessionEvent(session));
@@ -940,17 +895,10 @@ public class HttpRequestImpl implements HttpRequest {
             }
             impl.callListeners(); // can call req.getSession() so do it after affectation + do it after cdi init
 
-            final RequestSession previous = SESSIONS.putIfAbsent(session.getId(), new RequestSession(this, session));
+            final SessionManager sessionManager = SystemInstance.get().getComponent(SessionManager.class);
+            final SessionManager.SessionWrapper previous = sessionManager.newSession(begin, end, session, application);
             if (previous != null) {
                 session = previous.session;
-            } else {
-                if (es == null) {
-                    synchronized (HttpRequestImpl.class) {
-                        if (es == null) {
-                            initEviction();
-                        }
-                    }
-                }
             }
         }
         return session;
@@ -1222,6 +1170,10 @@ public class HttpRequestImpl implements HttpRequest {
         }
     }
 
+    public void setApplication(final WebContext app) {
+        this.application = app;
+    }
+
     public void setBeginListener(final BeginWebBeansListener begin) {
         if (this.begin == null) {
             this.begin = begin;
@@ -1270,7 +1222,6 @@ public class HttpRequestImpl implements HttpRequest {
 
         @Override
         public void invalidate() {
-            SESSIONS.remove(session.getId());
             try {
                 super.invalidate();
             } finally {
@@ -1317,15 +1268,4 @@ public class HttpRequestImpl implements HttpRequest {
             // not yet supported: TODO: fake response write in ByteArrayOutputStream and then call HttpListenerRegistry and write it back
         }
     }
-
-    private static class RequestSession extends HttpSessionEvent {
-        private final HttpRequestImpl request;
-        private final HttpSession session;
-
-        public RequestSession(final HttpRequestImpl request, final HttpSession session) {
-            super(session);
-            this.request = request;
-            this.session = session;
-        }
-    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/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 9692e28..180e3e2 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
@@ -17,6 +17,7 @@
 package org.apache.openejb.server.httpd;
 
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.httpd.session.SessionManager;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.OpenEjbVersion;
@@ -483,7 +484,7 @@ public class HttpResponseImpl implements HttpResponse {
             return;
         }
 
-        headers.put(HttpRequest.HEADER_SET_COOKIE, HttpRequestImpl.EJBSESSIONID + '=' + session.getId() + "; Path=/");
+        headers.put(HttpRequest.HEADER_SET_COOKIE, SessionManager.EJBSESSIONID + '=' + session.getId() + "; Path=/");
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/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 cd0a394..657a394 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
@@ -18,11 +18,8 @@ package org.apache.openejb.server.httpd;
 
 import org.apache.openejb.client.ArrayEnumeration;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.httpd.session.SessionManager;
 
-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.Collections;
@@ -31,19 +28,20 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.UUID;
-import java.util.concurrent.ConcurrentMap;
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpSessionContext;
+import javax.servlet.http.HttpSessionEvent;
+import javax.servlet.http.HttpSessionListener;
 
 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, ? extends HttpSessionEvent> mapToClean;
     private final long created = System.currentTimeMillis();
     private volatile long timeout;
     private volatile long lastAccessed = created;
 
-    public HttpSessionImpl(final ConcurrentMap<String, ? extends HttpSessionEvent> sessions, final String contextPath, final long timeout) {
-        this.mapToClean = sessions;
+    public HttpSessionImpl(final String contextPath, final long timeout) {
         this.timeout = timeout;
         if (contextPath == null) {
             return;
@@ -62,7 +60,7 @@ public class HttpSessionImpl implements HttpSession {
     }
 
     public HttpSessionImpl() {
-        this(null, null, 30000);
+        this(null, 30000);
     }
 
     public void newSessionId() {
@@ -105,8 +103,9 @@ public class HttpSessionImpl implements HttpSession {
         }
 
         attributes.clear();
-        if (mapToClean != null) {
-            mapToClean.remove(sessionId);
+        final SessionManager sessionManager = SystemInstance.get().getComponent(SessionManager.class);
+        if (sessionManager != null) {
+            sessionManager.removeSession(sessionId);
         }
     }
 
@@ -186,16 +185,17 @@ public class HttpSessionImpl implements HttpSession {
     @Override
     public HttpSessionContext getSessionContext() {
         touch();
+        final SessionManager component = SystemInstance.get().getComponent(SessionManager.class);
         return new HttpSessionContext() {
             @Override
             public javax.servlet.http.HttpSession getSession(final String sessionId) {
-                final HttpSessionEvent event = mapToClean.get(sessionId);
+                final HttpSessionEvent event = component.findSession(sessionId);
                 return event == null ? null : event.getSession();
             }
 
             @Override
             public Enumeration<String> getIds() {
-                return Collections.enumeration(mapToClean.keySet());
+                return Collections.enumeration(component.findSessionIds());
             }
         };
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/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 3a61442..6dd8d9e 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
@@ -113,6 +113,8 @@ public class OpenEJBHttpRegistry {
                     final HttpRequestImpl httpRequest = HttpRequestImpl.class.cast(request);
                     final WebContext web = findWebContext(request.getURI() == null ? request.getContextPath() : request.getURI().getPath());
                     if (web != null) {
+                        httpRequest.setApplication(web);
+
                         if (web.getClassLoader() != null) {
                             thread.setContextClassLoader(web.getClassLoader());
                         } else if (web.getAppContext().getClassLoader() != null) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/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 33f358c..65e8c66 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
@@ -22,6 +22,7 @@ import org.apache.openejb.loader.Options;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.server.ServiceException;
 import org.apache.openejb.server.context.RequestInfos;
+import org.apache.openejb.server.httpd.session.SessionManager;
 import org.apache.openejb.server.stream.CountingInputStream;
 import org.apache.openejb.server.stream.CountingOutputStream;
 import org.apache.openejb.util.LogCategory;
@@ -76,6 +77,9 @@ 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());
+        }
     }
 
     public static boolean isTextXml(final Map<String, String> headers) {
@@ -170,7 +174,10 @@ public class OpenEJBHttpServer implements HttpServer {
     @Override
     public void stop() throws ServiceException {
         OpenEJBAsyncContext.destroy();
-        HttpRequestImpl.destroyEviction();
+        final SessionManager component = SystemInstance.get().getComponent(SessionManager.class);
+        if (component != null) {
+            component.destroy();
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/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
new file mode 100644
index 0000000..ad455b1
--- /dev/null
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/session/SessionManager.java
@@ -0,0 +1,132 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+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.HttpSession;
+import org.apache.openejb.util.DaemonThreadFactory;
+import org.apache.openejb.util.Duration;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import javax.servlet.http.HttpSessionEvent;
+
+public class SessionManager {
+    public static final String EJBSESSIONID = "EJBSESSIONID";
+    public static final String JSESSIONID = "JSESSIONID";
+
+    private final ConcurrentMap<String, SessionWrapper> sessions = new ConcurrentHashMap<>();
+
+    private static volatile ScheduledExecutorService es;
+
+    public void destroy(final WebContext app) {
+        final Iterator<SessionWrapper> iterator = sessions.values().iterator();
+        while (iterator.hasNext()) {
+            final SessionWrapper next = iterator.next();
+            if (next.app == app) {
+                next.session.invalidate();
+                iterator.remove();
+            }
+        }
+    }
+
+    public void destroy() {
+        if (es == null) {
+            return;
+        }
+        es.shutdownNow();
+        for (final SessionWrapper rs : sessions.values()) {
+            rs.session.invalidate();
+        }
+        sessions.clear();
+    }
+
+    public void initEviction() {
+        if (!"true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.http.eviction", "true"))) {
+            return;
+        }
+        final Duration duration = new Duration(SystemInstance.get().getProperty("openejb.http.eviction.duration", "1 minute"));
+        es = Executors.newScheduledThreadPool(1, new DaemonThreadFactory(HttpRequestImpl.class));
+        es.scheduleWithFixedDelay(new Runnable() {
+            @Override
+            public void run() {
+                for (final SessionWrapper data : new ArrayList<>(sessions.values())) {
+                    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));
+                        }
+                    }
+                }
+            }
+        }, duration.getTime(), duration.getTime(), duration.getUnit());
+    }
+
+    public SessionWrapper findSession(final String id) {
+        return sessions.get(id);
+    }
+
+    public void removeSession(final String sessionId) {
+        sessions.remove(sessionId);
+    }
+
+    public Collection<String> findSessionIds() {
+        return sessions.keySet();
+    }
+
+    public int size() {
+        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));
+        if (existing == null && es == null) {
+            synchronized (this) {
+                if (es == null) {
+                    initEviction();
+                }
+            }
+        }
+        return existing;
+    }
+
+    public static class SessionWrapper extends HttpSessionEvent {
+        public final BeginWebBeansListener listener;
+        public final HttpSession session;
+        public final WebContext app;
+
+        public SessionWrapper(final BeginWebBeansListener listener, final HttpSession session, final WebContext app) {
+            super(session);
+            this.listener = listener;
+            this.session = session;
+            this.app = app;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/95ea7d5b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/HttpResponseImplSessionTest.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/HttpResponseImplSessionTest.java b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/HttpResponseImplSessionTest.java
index 595c9be..b43d130 100644
--- a/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/HttpResponseImplSessionTest.java
+++ b/server/openejb-http/src/test/java/org/apache/openejb/server/httpd/HttpResponseImplSessionTest.java
@@ -21,41 +21,31 @@ import org.apache.openejb.core.CoreContainerSystem;
 import org.apache.openejb.core.ivm.naming.IvmJndiFactory;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.server.ServiceException;
+import org.apache.openejb.server.httpd.session.SessionManager;
 import org.apache.openejb.spi.ContainerSystem;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 
-import javax.servlet.http.HttpSession;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.lang.reflect.Field;
 import java.net.Socket;
-import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicReference;
+import javax.servlet.http.HttpSession;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class HttpResponseImplSessionTest {
-    private static Field sessions;
-
     private OpenEJBHttpEjbServer server;
 
-    @BeforeClass
-    public static void findSessionsField() throws NoSuchFieldException {
-        sessions = HttpRequestImpl.class.getDeclaredField("SESSIONS");
-        sessions.setAccessible(true);
-    }
-
     private static int numberOfSessions() throws IllegalAccessException {
-        return Map.class.cast(sessions.get(null)).size();
+        return SystemInstance.get().getComponent(SessionManager.class).size();
     }
 
     @Before


[15/16] tomee git commit: TOMEE-1572 upgrade to OWB-1.6.0-SNAPSHOT

Posted by st...@apache.org.
TOMEE-1572 upgrade to OWB-1.6.0-SNAPSHOT


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

Branch: refs/heads/fb_tomee2_owb16
Commit: b0f479fd2463a94a861e3a2fb97b94268490d544
Parents: 94df0ba
Author: Mark Struberg <st...@apache.org>
Authored: Mon May 4 21:11:44 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 21:11:44 2015 +0200

----------------------------------------------------------------------
 pom.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/b0f479fd/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e2d717f..0ab6965 100644
--- a/pom.xml
+++ b/pom.xml
@@ -95,7 +95,7 @@
     <tomee.version>2.0.0-SNAPSHOT</tomee.version>
 
     <openjpa.version>2.4.0</openjpa.version>
-    <org.apache.openwebbeans.version>1.5.1-SNAPSHOT</org.apache.openwebbeans.version>
+    <org.apache.openwebbeans.version>1.6.0-SNAPSHOT</org.apache.openwebbeans.version>
     <jcs.version>2.0-SNAPSHOT</jcs.version>
 
     <!-- Maven module versions -->


[02/16] tomee git commit: TOMEE-1572 adopt OWB-1.5 changes

Posted by st...@apache.org.
TOMEE-1572 adopt OWB-1.5 changes

* improved ConversationHandling
* improved SessionHandling


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

Branch: refs/heads/fb_tomee2_owb16
Commit: e41c460fb6410f54f153f54272c8bce7dfea39f2
Parents: d376ef5
Author: Mark Struberg <st...@apache.org>
Authored: Sat May 2 11:44:53 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Sat May 2 11:44:53 2015 +0200

----------------------------------------------------------------------
 .../openejb/cdi/CdiAppContextsService.java      | 760 +------------------
 .../java/org/apache/openejb/cdi/CdiPlugin.java  |  14 +-
 .../apache/openejb/cdi/OpenEJBLifecycle.java    |  68 +-
 .../openejb/cdi/ThreadSingletonServiceImpl.java |   4 -
 .../cdi/UpdatableSessionContextManager.java     |  66 --
 .../openejb/testing/ApplicationComposers.java   |   2 +-
 .../openejb/cdi/CdiAppContextsServiceTest.java  |   4 +-
 ...StatefulConversationScopedTOMEE1138Test.java |   4 +-
 .../server/httpd/BeginWebBeansListener.java     |  35 -
 .../server/httpd/EndWebBeansListener.java       |  10 -
 .../server/httpd/HttpListenerRegistry.java      |   8 +-
 .../openejb/server/httpd/HttpRequestImpl.java   |   3 +
 .../server/httpd/WebBeansListenerHelper.java    |   3 +
 .../tomee/catalina/OpenEJBContextConfig.java    |  45 --
 .../tomee/catalina/TomEEContainerListener.java  |  13 +-
 .../tomee/catalina/TomcatWebAppBuilder.java     |   8 +-
 .../cdi/SessionContextBackedByHttpSession.java  | 289 -------
 .../cdi/SessionNormalScopeBeanHandler.java      | 117 ---
 18 files changed, 74 insertions(+), 1379 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/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 655af39..780728e 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
@@ -18,82 +18,26 @@
 
 package org.apache.openejb.cdi;
 
-import org.apache.openejb.core.Operation;
-import org.apache.openejb.core.ThreadContext;
-import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
-import org.apache.webbeans.annotation.DestroyedLiteral;
-import org.apache.webbeans.annotation.InitializedLiteral;
-import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.AbstractContextsService;
-import org.apache.webbeans.context.ApplicationContext;
-import org.apache.webbeans.context.ConversationContext;
-import org.apache.webbeans.context.DependentContext;
+import org.apache.webbeans.context.RequestContext;
 import org.apache.webbeans.context.SessionContext;
-import org.apache.webbeans.context.SingletonContext;
-import org.apache.webbeans.conversation.ConversationImpl;
-import org.apache.webbeans.conversation.ConversationManager;
-import org.apache.webbeans.el.ELContextStore;
-import org.apache.webbeans.event.EventMetadataImpl;
 import org.apache.webbeans.spi.ContextsService;
-import org.apache.webbeans.spi.ConversationService;
-import org.apache.webbeans.web.context.ServletRequestContext;
-import org.apache.webbeans.web.intercept.RequestScopedBeanInterceptorHandler;
+import org.apache.webbeans.web.context.WebContextsService;
 
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Constructor;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Map;
 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;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.context.SessionScoped;
-import javax.enterprise.context.spi.Context;
 import javax.inject.Singleton;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletRequestEvent;
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
-public class CdiAppContextsService extends AbstractContextsService implements ContextsService, ConversationService {
+
+public class CdiAppContextsService extends WebContextsService implements ContextsService {
     public static final Object EJB_REQUEST_EVENT = new Object();
 
     private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB.createChild("cdi"), CdiAppContextsService.class);
 
-    private static final String CID = "cid";
-
-    private final ThreadLocal<ServletRequestContext> requestContext = new ThreadLocal<>();
-
-    private final ThreadLocal<SessionContext> sessionContext = new ThreadLocal<>();
-    private final UpdatableSessionContextManager sessionCtxManager = new UpdatableSessionContextManager();
-
-    /**
-     * Conversation context manager
-     */
-    private final ThreadLocal<ConversationContext> conversationContext;
-
-    private final DependentContext dependentContext = new DependentContext();
-
-    private final ApplicationContext applicationContext = new ApplicationContext();
-
-    private final SingletonContext singletonContext = new SingletonContext();
-
-    private final WebBeansContext webBeansContext;
-
-    private final ConversationService conversationService;
-
-    private volatile Object appEvent;
-
-    private final boolean useGetParameter;
-
     private static final ThreadLocal<Collection<Runnable>> endRequestRunnables = new ThreadLocal<Collection<Runnable>>() {
         @Override
         protected Collection<Runnable> initialValue() {
@@ -101,37 +45,13 @@ public class CdiAppContextsService extends AbstractContextsService implements Co
         }
     };
 
-    private volatile boolean autoConversationCheck = true;
 
     public CdiAppContextsService(final WebBeansContext wbc) {
-        this(wbc, wbc.getOpenWebBeansConfiguration().supportsConversation());
+        super(wbc);
     }
 
-    public CdiAppContextsService(final WebBeansContext wbc, final boolean supportsConversation) {
-        if (wbc != null) {
-            webBeansContext = wbc;
-        } else {
-            webBeansContext = WebBeansContext.currentInstance();
-        }
-
-        dependentContext.setActive(true);
-        if (supportsConversation) {
-            conversationService = webBeansContext.getService(ConversationService.class);
-            if (conversationService == null) {
-                conversationContext = null;
-            } else {
-                conversationContext = new ThreadLocal<>();
-            }
-        } else {
-            conversationService = null;
-            conversationContext = null;
-        }
-        applicationContext.setActive(true);
-        singletonContext.setActive(true);
-        useGetParameter = "true".equalsIgnoreCase(SystemInstance.get().getProperty("openejb.cdi.conversation.http.use-get-parameter", "false"));
-    }
 
-    private void endRequest() {
+    private void runEndRequestTasks() {
         for (final Runnable r : endRequestRunnables.get()) {
             try {
                 r.run();
@@ -146,30 +66,6 @@ public class CdiAppContextsService extends AbstractContextsService implements Co
         endRequestRunnables.get().add(runnable);
     }
 
-    @Override
-    public String getConversationId() {
-        return getHttpParameter(CID);
-    }
-
-    @Override
-    public String getConversationSessionId() {
-        return currentSessionId(false);
-    }
-
-    public String currentSessionId(final boolean force) {
-        final ServletRequestContext rc = requestContext.get();
-        if (rc != null) {
-            final HttpServletRequest req = rc.getServletRequest();
-            if (req != null) {
-                final HttpSession session = req.getSession(force);
-                if (session != null) {
-                    return session.getId();
-                }
-            }
-        }
-        return null;
-    }
-
     @Override // this method is called after the deployment (BeansDeployer) but need beans to be here to get events
     public void init(final Object initializeObject) {
         //Start application context
@@ -179,651 +75,17 @@ public class CdiAppContextsService extends AbstractContextsService implements Co
         startContext(Singleton.class, initializeObject);
     }
 
-    public void beforeStop(final Object ignored) {
-        {   // trigger @PreDestroy mainly but keep it active until destroy(xxx)
-            applicationContext.destroy();
-            webBeansContext.getBeanManagerImpl().fireEvent(
-                    appEvent,
-                    new EventMetadataImpl(null, ServletContext.class.isInstance(appEvent) ? ServletContext.class : Object.class,null, new Annotation[] { DestroyedLiteral.INSTANCE_APPLICATION_SCOPED }, webBeansContext),
-                    false);
-            applicationContext.setActive(true);
-
-            singletonContext.destroy();
-            singletonContext.setActive(true);
-        }
-
-        for (final Map.Entry<Conversation, ConversationContext> conversation : webBeansContext.getConversationManager().getAllConversationContexts().entrySet()) {
-            conversation.getValue().destroy();
-            final String id = conversation.getKey().getId();
-            if (id != null) {
-                webBeansContext.getBeanManagerImpl().fireEvent(id, DestroyedLiteral.INSTANCE_CONVERSATION_SCOPED);
-            }
-        }
-        for (final SessionContext sc : sessionCtxManager.getContextById().values()) {
-            final Object event = HttpSessionContextSessionAware.class.isInstance(sc) ? HttpSessionContextSessionAware.class.cast(sc).getSession() : sc;
-            if (HttpSession.class.isInstance(event)) {
-                final HttpSession httpSession = HttpSession.class.cast(event);
-                if (httpSession.getId() == null) {
-                    continue;
-                }
-                initSessionContext(httpSession);
-                try {
-                    httpSession.invalidate();
-                } catch (final IllegalStateException ise) {
-                    // no-op
-                } finally {
-                    destroySessionContext(httpSession);
-                }
-            } else {
-                sc.destroy();
-            }
-            webBeansContext.getBeanManagerImpl().fireEvent(event, DestroyedLiteral.INSTANCE_SESSION_SCOPED);
-        }
-        sessionCtxManager.getContextById().clear();
-    }
-
     public void destroy(final Object destroyObject) {
-        //Destroy application context
-        endContext(ApplicationScoped.class, destroyObject);
-
-        //Destroy singleton context
-        endContext(Singleton.class, destroyObject);
-
+        super.destroy(destroyObject);
         removeThreadLocals();
     }
 
-    public void removeThreadLocals() {
-        //Remove thread locals
-        //for preventing memory leaks
-        requestContext.set(null);
-        requestContext.remove();
-        sessionContext.set(null);
-        sessionContext.remove();
-
-        if (null != conversationContext) {
-            conversationContext.set(null);
-            conversationContext.remove();
-        }
-    }
-
-    @Override
-    public void endContext(final Class<? extends Annotation> scopeType, final Object endParameters) {
-        if (supportsContext(scopeType)) {
-            if (scopeType.equals(RequestScoped.class)) {
-                destroyRequestContext(endParameters);
-            } else if (scopeType.equals(SessionScoped.class)) {
-                destroySessionContext((HttpSession) endParameters);
-            } else if (scopeType.equals(ApplicationScoped.class)) {
-                destroyApplicationContext();
-            } else if (scopeType.equals(Dependent.class)) { //NOPMD
-                // Do nothing
-            } else if (scopeType.equals(Singleton.class)) {
-                destroySingletonContext();
-            } else if (supportsConversation() && scopeType.equals(ConversationScoped.class)) {
-                destroyConversationContext(endParameters);
-            } else {
-                if (logger.isWarningEnabled()) {
-                    logger.warning("CDI-OpenWebBeans container in OpenEJB does not support context scope "
-                        + scopeType.getSimpleName()
-                        + ". Scopes @Dependent, @RequestScoped, @ApplicationScoped and @Singleton are supported scope types");
-                }
-            }
-        }
-
-    }
-
-    @Override
-    public Context getCurrentContext(final Class<? extends Annotation> scopeType) {
-        if (scopeType.equals(RequestScoped.class)) {
-            return getRequestContext(true);
-        } else if (scopeType.equals(SessionScoped.class)) {
-            return getSessionContext(true);
-        } else if (scopeType.equals(ApplicationScoped.class)) {
-            return getApplicationContext();
-        } else if (supportsConversation() && scopeType.equals(ConversationScoped.class)) {
-            return getConversationContext();
-        } else if (scopeType.equals(Dependent.class)) {
-            return dependentContext;
-        } else if (scopeType.equals(Singleton.class)) {
-            return getSingletonContext();
-        }
-
-        return null;
-    }
 
     @Override
-    public void startContext(final Class<? extends Annotation> scopeType, final Object startParameter) throws ContextException {
-        if (supportsContext(scopeType)) {
-            if (scopeType.equals(RequestScoped.class)) {
-                initRequestContext(startParameter);
-            } else if (scopeType.equals(SessionScoped.class)) {
-                initSessionContext((HttpSession) startParameter);
-            } else if (scopeType.equals(ApplicationScoped.class)) {
-                initApplicationContext(startParameter);
-            } else if (scopeType.equals(Dependent.class)) {
-                initSingletonContext();
-            } else if (scopeType.equals(Singleton.class)) { //NOPMD
-                // Do nothing
-            } else if (supportsConversation() && scopeType.equals(ConversationScoped.class) && !isTimeout()) {
-                initConversationContext(startParameter);
-            } else {
-                if (logger.isWarningEnabled()) {
-                    logger.warning("CDI-OpenWebBeans container in OpenEJB does not support context scope "
-                        + scopeType.getSimpleName()
-                        + ". Scopes @Dependent, @RequestScoped, @ApplicationScoped and @Singleton are supported scope types");
-                }
-            }
-        }
-    }
-
-    private void initSingletonContext() {
-        singletonContext.setActive(true);
-    }
-
-    private void initApplicationContext(final Object init) { // in case contexts are stop/start
-        if (appEvent == null) { // no need of sync cause of the lifecycle
-            Object event = init;
-            if (StartupObject.class.isInstance(init)) {
-                final StartupObject so = StartupObject.class.cast(init);
-                if (so.isFromWebApp()) { // ear webapps
-                    event = so.getWebContext().getServletContext();
-                } else if (so.getAppInfo().webAppAlone) {
-                    event = SystemInstance.get().getComponent(ServletContext.class);
-                }
-            } else if (ServletContextEvent.class.isInstance(init)) {
-                event = ServletContextEvent.class.cast(init).getServletContext();
-            }
-            appEvent = event != null ? event : applicationContext;
-            webBeansContext.getBeanManagerImpl().fireEvent(
-                    appEvent,
-                    new EventMetadataImpl(null,
-                            ServletContext.class.isInstance(appEvent) ? ServletContext.class : Object.class, null, new Annotation[] { InitializedLiteral.INSTANCE_APPLICATION_SCOPED },
-                            webBeansContext),
-                    false);
-        }
-    }
-
-    @Override
-    public boolean supportsContext(final Class<? extends Annotation> scopeType) {
-        return scopeType.equals(RequestScoped.class)
-            || scopeType.equals(SessionScoped.class)
-            || scopeType.equals(ApplicationScoped.class)
-            || scopeType.equals(Dependent.class)
-            || scopeType.equals(Singleton.class)
-            || scopeType.equals(ConversationScoped.class) && supportsConversation();
-
-    }
-
-    private void initRequestContext(final Object event) {
-        final ServletRequestContext rq = new ServletRequestContext();
-        rq.setActive(true);
-
-        requestContext.set(rq);// set thread local
-        if (event != null && ServletRequestEvent.class.isInstance(event)) {
-            final HttpServletRequest request = (HttpServletRequest) ServletRequestEvent.class.cast(event).getServletRequest();
-            rq.setServletRequest(request);
-
-            if (request != null) {
-                webBeansContext.getBeanManagerImpl().fireEvent(request, InitializedLiteral.INSTANCE_REQUEST_SCOPED);
-            }
-
-            if (request != null) {
-                //Re-initialize thread local for session
-                final HttpSession session = request.getSession(false);
-
-                final String cid = conversationService != null ? (!useGetParameter ? getCid(request) : request.getParameter(CID)) : null;
-                if (session != null) {
-                    initSessionContext(session);
-                    if (autoConversationCheck && conversationService != null && !isConversationSkipped(request)) {
-                        if (cid != null) {
-                            final ConversationManager conversationManager = webBeansContext.getConversationManager();
-                            final ConversationImpl c = conversationManager.getPropogatedConversation(cid, session.getId());
-                            if (c != null) {
-                                final ConversationContext context = conversationManager.getConversationContext(c);
-                                context.setActive(true);
-                                conversationContext.set(context);
-                                return;
-                            }
-                        }
-                    }
-                }
-
-                if (cid == null && !isTimeout() && autoConversationCheck) {
-                    // transient but active
-                    initConversationContext(request);
-                }
-            }
-        } else if (event == EJB_REQUEST_EVENT) {
-            webBeansContext.getBeanManagerImpl().fireEvent(event, InitializedLiteral.INSTANCE_REQUEST_SCOPED);
-        }
-    }
-
-    public static String getCid(final HttpServletRequest req) {
-        return getFromQuery(CID, req.getQueryString());
-    }
-
-    public static String getFromQuery(final String name, final String q) {
-        final int cid = q == null ? -1 : q.indexOf(name + "=");
-        if (cid < 0) {
-            return null;
-        }
-        int end = q.indexOf("&", cid);
-        final int end2 = q.indexOf("#", cid);
-        if (end2 > 0 && end2 < end) {
-            end = end2;
-        }
-        if (end < 0) {
-            end = q.length();
-        }
-        return q.substring(cid + name.length() + 1, end);
-    }
-
-    public boolean isAutoConversationCheck() {
-        return autoConversationCheck;
-    }
-
-    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 = useGetParameter ? rc.getServletRequest().getParameter(CID) : getFromQuery(CID, rc.getServletRequest().getQueryString());
-                if (cid != null) {
-                    final ConversationManager conversationManager = webBeansContext.getConversationManager();
-                    final ConversationImpl c = conversationManager.getPropogatedConversation(cid, session.getId());
-                    if (!autoConversationCheck) { // lazy association
-                        initConversationContext(rc.getServletRequest());
-                    }
-                    if (c != null) {
-                        if (c.isTransient()) {
-                            throw new IllegalStateException("Conversation " + cid + " missing");
-                        }
-                        if (c.iUseIt() > 1) {
-                            throw new BusyConversationException("busy conversation " + c.getId() + '(' + c.getSessionId() + ')');
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    private void destroyRequestContext(final Object end) {
-        // execute request tasks
-        endRequest();
-
-        //Get context
-        final ServletRequestContext context = getRequestContext(false);
-
-        //Destroy context
-        if (context != null) {
-            if (supportsConversation()) { // OWB-595
-                cleanupConversation();
-            }
-
-            final HttpServletRequest servletRequest = context.getServletRequest();
-            if (servletRequest != null) {
-                webBeansContext.getBeanManagerImpl().fireEvent(servletRequest, DestroyedLiteral.INSTANCE_REQUEST_SCOPED);
-            } else if (end == EJB_REQUEST_EVENT) {
-                webBeansContext.getBeanManagerImpl().fireEvent(end, DestroyedLiteral.INSTANCE_REQUEST_SCOPED);
-            }
-            context.destroy();
-        }
-
-        // clean up the EL caches after each request
-        final ELContextStore elStore = ELContextStore.getInstance(false);
-        if (elStore != null) {
-            elStore.destroyELContextStore();
-        }
-
-        //Clear thread locals - only for request to let user do with deltaspike start(session, request)restart(request)...stop()
-        requestContext.remove();
-
-        RequestScopedBeanInterceptorHandler.removeThreadLocals();
-    }
-
-    private void cleanupConversation() {
-        if (conversationService == null) {
-            return;
-        }
-
-        final ConversationContext cc = getConversationContext();
-        if (cc == null) {
-            return;
-        }
-        cc.setActive(false);
-
-        final ConversationManager conversationManager = webBeansContext.getConversationManager();
-        final Conversation conversation = conversationManager.getConversationBeanReference();
-        if (conversation == null) {
-            return;
-        }
-
-        final ConversationImpl conversationImpl = ConversationImpl.class.cast(conversation);
-        conversationImpl.iDontUseItAnymore(); // do it before next call to avoid busy exception if possible
-        try {
-            if (conversation.isTransient()) {
-                endContext(ConversationScoped.class, null);
-                conversationManager.removeConversation(conversation); // in case end() was called
-            } else {
-                conversationImpl.updateTimeOut();
-            }
-        } catch (final BusyConversationException bce) {
-            // no-op, TODO: do something, maybe add internalIsTransient() to avoid to fail here
-        }
-    }
-
-    /**
-     * Creates the session context at the session start.
-     *
-     * @param session http session object
-     */
-    private void initSessionContext(final HttpSession session) {
-        if (session == null) {
-            // no session -> no SessionContext
-            return;
-        }
-
-        final String sessionId = session.getId();
-        //Current context
-        SessionContext currentSessionContext = sessionId == null ? null : sessionCtxManager.getSessionContextWithSessionId(sessionId);
-
-        //No current context
-        boolean fire = false;
-        if (currentSessionContext == null) {
-            currentSessionContext = newSessionContext(session);
-            sessionCtxManager.addNewSessionContext(sessionId, currentSessionContext);
-            fire = true;
-        }
-        //Activate
-        currentSessionContext.setActive(true);
-
-        //Set thread local
-        sessionContext.set(currentSessionContext);
-
-        if (fire) {
-            webBeansContext.getBeanManagerImpl().fireEvent(session, InitializedLiteral.INSTANCE_SESSION_SCOPED);
-        }
-    }
-
-    private SessionContext newSessionContext(final HttpSession session) {
-        final String classname = SystemInstance.get().getComponent(ThreadSingletonService.class).sessionContextClass();
-        if (classname != null) {
-            try {
-                final Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(classname);
-                try {
-                    final Constructor<?> constr = clazz.getConstructor(HttpSession.class);
-                    return (SessionContext) constr.newInstance(session);
-                } catch (final Exception e) {
-                    return (SessionContext) clazz.newInstance();
-                }
-
-            } catch (final Exception e) {
-                logger.error("Can't instantiate " + classname + ", using default session context", e);
-            }
-        }
-        return new HttpSessionContextSessionAware(session);
-    }
-
-    /**
-     * Destroys the session context and all of its components at the end of the
-     * session.
-     *
-     * @param session http session object
-     */
-    private void destroySessionContext(final HttpSession session) {
-        if (session != null) {
-            final SessionContext context = sessionContext.get();
-
-            if (context != null && context.isActive()) {
-                final ServletRequestContext servletRequestContext = getRequestContext(false);
-                if (servletRequestContext == null || servletRequestContext.getServletRequest() == null) {
-                    doDestroySession(context, session);
-                } else {
-                    pushRequestReleasable(new Runnable() { // call it at the end of the request
-                        @Override
-                        public void run() {
-                            doDestroySession(context, session);
-                        }
-                    });
-                }
-            }
-
-            //Clear thread locals
-            sessionContext.set(null);
-            sessionContext.remove();
-
-            //Remove session from manager
-            sessionCtxManager.removeSessionContextWithSessionId(session.getId());
-        }
-    }
-
-    private void doDestroySession(SessionContext context, HttpSession session) {
-        context.destroy();
-        webBeansContext.getBeanManagerImpl().fireEvent(session, DestroyedLiteral.INSTANCE_SESSION_SCOPED);
-    }
-
-    //we don't have initApplicationContext
-
-    private void destroyApplicationContext() {
-        applicationContext.destroy();
-    }
-
-    private void destroySingletonContext() {
-        singletonContext.destroy();
-    }
-
-    private ConversationContext initConversationContext(final Object request) {
-        if (conversationService == null) {
-            return null;
-        }
-
-        final HttpServletRequest req = HttpServletRequest.class.isInstance(request) ? HttpServletRequest.class.cast(request) : null;
-        ConversationContext context = ConversationContext.class.isInstance(request) ? ConversationContext.class.cast(request) : null;
-        Object event = null;
-        if (context == null) {
-            final ConversationContext existingContext = conversationContext.get();
-            if (existingContext == null) {
-                context = new ConversationContext();
-                context.setActive(true);
-
-                if (req != null) {
-                    event = req;
-                } else {
-                    final ServletRequestContext servletRequestContext = getRequestContext(true);
-                    event = servletRequestContext != null && servletRequestContext.getServletRequest() != null ? servletRequestContext.getServletRequest() : context;
-                }
-            } else {
-                context = existingContext;
-            }
-        }
-        conversationContext.set(context);
-        context.setActive(true);
-        if (event != null) {
-            webBeansContext.getBeanManagerImpl().fireEvent(event, InitializedLiteral.INSTANCE_CONVERSATION_SCOPED);
-        }
-        return context;
-    }
-
-    /**
-     * Destroy conversation context.
-     */
-    private void destroyConversationContext(final Object destroy) {
-        if (conversationService == null) {
-            return;
-        }
-
-        final ConversationContext context = getConversationContext();
-        if (context != null) {
-            context.destroy();
-            final ServletRequestContext servletRequestContext = getRequestContext(false);
-            final Object destroyObject = servletRequestContext != null && servletRequestContext.getServletRequest() != null ?
-                    servletRequestContext.getServletRequest() : destroy;
-            webBeansContext.getBeanManagerImpl().fireEvent(
-                    destroyObject == null ? context : destroyObject, DestroyedLiteral.INSTANCE_CONVERSATION_SCOPED);
-        }
-
-        if (null != context) {
-            conversationContext.remove();
-        }
-    }
+    protected void destroyRequestContext(Object requestEvent) {
+        // execute endrequest tasks
+        runEndRequestTasks();
 
-
-    public ServletRequestContext getRequestContext(final boolean create) {
-        ServletRequestContext context = requestContext.get();
-        if (context == null && create) {
-            initRequestContext(null);
-            return requestContext.get();
-        }
-        return context;
-    }
-
-    private Context getSessionContext(final boolean create) {
-        SessionContext context = sessionContext.get();
-        if ((context == null || !context.isActive()) && create) {
-            lazyStartSessionContext();
-            context = sessionContext.get();
-            if (context == null) {
-                context = new SessionContext();
-                context.setActive(true);
-                sessionContext.set(context);
-            }
-        }
-        return context;
-    }
-
-    /**
-     * Gets application context.
-     *
-     * @return application context
-     */
-    private ApplicationContext getApplicationContext() {
-        return applicationContext;
-    }
-
-    /**
-     * Gets singleton context.
-     *
-     * @return singleton context
-     */
-    private SingletonContext getSingletonContext() {
-        return singletonContext;
-    }
-
-    /**
-     * Get current conversation ctx.
-     *
-     * @return conversation context
-     */
-    private ConversationContext getConversationContext() {
-        return conversationContext.get();
-    }
-
-    private boolean isConversationSkipped(final HttpServletRequest servletRequest) {
-        final String queryString = servletRequest.getQueryString();
-        return "none".equals(getFromQuery("conversationPropagation", queryString)) || "true".equals(getFromQuery("nocid", queryString));
-    }
-
-    private boolean isTimeout() {
-        final ThreadContext tc = ThreadContext.getThreadContext();
-        return tc != null && tc.getCurrentOperation() == Operation.TIMEOUT;
-    }
-
-    private Context lazyStartSessionContext() {
-
-        if (logger.isDebugEnabled()) {
-            logger.debug(">lazyStartSessionContext");
-        }
-
-        final Context webContext = null;
-        final Context context = getCurrentContext(RequestScoped.class);
-        if (context instanceof ServletRequestContext) {
-            final ServletRequestContext requestContext = (ServletRequestContext) context;
-            final HttpServletRequest servletRequest = requestContext.getServletRequest();
-            if (null != servletRequest) { // this could be null if there is no active request context
-                try {
-                    final HttpSession currentSession = servletRequest.getSession();
-                    initSessionContext(currentSession);
-
-                    /*
-                    final FailOverService failoverService = webBeansContext.getService(FailOverService.class);
-                    if (failoverService != null && failoverService.isSupportFailOver()) {
-                        failoverService.sessionIsInUse(currentSession);
-                    }
-                    */
-
-                    if (logger.isDebugEnabled()) {
-                        logger.debug("Lazy SESSION context initialization SUCCESS");
-                    }
-                } catch (final Exception e) {
-                    logger.error(OWBLogConst.ERROR_0013, e);
-                }
-
-            } else {
-                logger.warning("Could NOT lazily initialize session context because NO active request context");
-            }
-        } else {
-            logger.warning("Could NOT lazily initialize session context because of " + context + " RequestContext");
-        }
-
-        if (logger.isDebugEnabled()) {
-            logger.debug("<lazyStartSessionContext " + webContext);
-        }
-        return webContext;
-    }
-
-    public void setAutoConversationCheck(final boolean autoConversationCheck) {
-        this.autoConversationCheck = autoConversationCheck;
-    }
-
-    private boolean supportsConversation() {
-        return conversationContext != null;
-    }
-
-    public void updateSessionIdMapping(final String oldId, final String newId) {
-        sessionCtxManager.updateSessionIdMapping(oldId, newId);
-    }
-
-    public State saveState() {
-        return new State(requestContext.get(), sessionContext.get(), conversationContext.get());
-    }
-
-    public State restoreState(final State state) {
-        final State old = saveState();
-        requestContext.set(state.request);
-        sessionContext.set(state.session);
-        conversationContext.set(state.conversation);
-        return old;
-    }
-
-    public String getHttpParameter(final String name) {
-        final ServletRequestContext req = getRequestContext(false);
-        if (req != null && req.getServletRequest() != null) {
-            return useGetParameter ? req.getServletRequest().getParameter(name) : getFromQuery(name, req.getServletRequest().getQueryString());
-        }
-        return null;
-    }
-
-    public static class State {
-        private final ServletRequestContext request;
-        private final SessionContext session;
-        private final ConversationContext conversation;
-
-        public State(final ServletRequestContext request, final SessionContext session, final ConversationContext conversation) {
-            this.request = request;
-            this.session = session;
-            this.conversation = conversation;
-        }
-    }
-
-    public static class HttpSessionContextSessionAware extends SessionContext {
-        private final HttpSession session;
-
-        public HttpSessionContextSessionAware(final HttpSession session) {
-            this.session = session;
-        }
-
-        public HttpSession getSession() {
-            return session;
-        }
+        super.destroyRequestContext(requestEvent);
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
index 8dab787..429f7ac 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiPlugin.java
@@ -41,14 +41,12 @@ import org.apache.webbeans.exception.WebBeansConfigurationException;
 import org.apache.webbeans.portable.events.discovery.BeforeShutdownImpl;
 import org.apache.webbeans.portable.events.generics.GProcessSessionBean;
 import org.apache.webbeans.proxy.NormalScopeProxyFactory;
-import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.spi.ResourceInjectionService;
 import org.apache.webbeans.spi.SecurityService;
 import org.apache.webbeans.spi.TransactionService;
 import org.apache.webbeans.spi.plugins.AbstractOwbPlugin;
 import org.apache.webbeans.spi.plugins.OpenWebBeansEjbPlugin;
 import org.apache.webbeans.spi.plugins.OpenWebBeansJavaEEPlugin;
-import org.apache.webbeans.spi.plugins.OpenWebBeansWebPlugin;
 import org.apache.webbeans.util.GenericsUtil;
 import org.apache.webbeans.util.WebBeansUtil;
 
@@ -94,12 +92,11 @@ import java.util.WeakHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 
 
-public class CdiPlugin extends AbstractOwbPlugin implements OpenWebBeansJavaEEPlugin, OpenWebBeansEjbPlugin, OpenWebBeansWebPlugin {
+public class CdiPlugin extends AbstractOwbPlugin implements OpenWebBeansJavaEEPlugin, OpenWebBeansEjbPlugin {
 
     private Map<Class<?>, BeanContext> beans;
 
     private WebBeansContext webBeansContext;
-    private CdiAppContextsService contexsServices;
     private ClassLoader classLoader;
 
     private Map<Contextual<?>, Object> cacheProxies;
@@ -113,10 +110,6 @@ public class CdiPlugin extends AbstractOwbPlugin implements OpenWebBeansJavaEEPl
         }
     }
 
-    @Override
-    public String currentSessionId() {
-        return CdiAppContextsService.class.cast(webBeansContext.getService(ContextsService.class)).currentSessionId(true);
-    }
 
     @Override
     public boolean isEEComponent(final Class<?> impl) {
@@ -157,9 +150,6 @@ public class CdiPlugin extends AbstractOwbPlugin implements OpenWebBeansJavaEEPl
         }
     }
 
-    public CdiAppContextsService getContexsServices() {
-        return contexsServices;
-    }
 
     public void stop() throws OpenEJBException {
         final ClassLoader oldCl = Thread.currentThread().getContextClassLoader();
@@ -171,7 +161,7 @@ public class CdiPlugin extends AbstractOwbPlugin implements OpenWebBeansJavaEEPl
             webBeansContext.getBeanManagerImpl().fireEvent(new BeforeShutdownImpl());
 
             // Destroys context
-            this.contexsServices.destroy(null);
+            webBeansContext.getContextsService().destroy(null);
 
             // Free all plugin resources
             webBeansContext.getPluginLoader().shutDown();

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
index 5747c50..4a05de7 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
@@ -29,10 +29,10 @@ import org.apache.webbeans.component.BuiltInOwbBean;
 import org.apache.webbeans.component.SimpleProducerFactory;
 import org.apache.webbeans.component.WebBeansType;
 import org.apache.webbeans.config.BeansDeployer;
-import org.apache.webbeans.config.OpenWebBeansConfiguration;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.config.WebBeansFinder;
 import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.intercept.InterceptorResolutionService;
 import org.apache.webbeans.portable.AbstractProducer;
 import org.apache.webbeans.portable.InjectionTargetImpl;
@@ -48,10 +48,15 @@ import org.apache.webbeans.util.WebBeansConstants;
 import org.apache.webbeans.util.WebBeansUtil;
 
 import javax.el.ELResolver;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.ConversationScoped;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.inject.Provider;
+import javax.inject.Singleton;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletRequest;
@@ -71,7 +76,6 @@ import java.util.Set;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
 
 /**
  * @version $Rev:$ $Date:$
@@ -288,12 +292,22 @@ public class OpenEJBLifecycle implements ContainerLifecycle {
                 WebappBeanManager.class.cast(beanManager).beforeStop();
             }
 
-            if (CdiAppContextsService.class.isInstance(contextsService)) {
-                CdiAppContextsService.class.cast(contextsService).beforeStop(endObject);
+            webBeansContext.getContextsService().endContext(RequestScoped.class, endObject);
+            webBeansContext.getContextsService().endContext(ConversationScoped.class, endObject);
+            webBeansContext.getContextsService().endContext(SessionScoped.class, endObject);
+            webBeansContext.getContextsService().endContext(ApplicationScoped.class, endObject);
+            webBeansContext.getContextsService().endContext(Singleton.class, endObject);
+
+            // clean up the EL caches after each request
+            ELContextStore elStore = ELContextStore.getInstance(false);
+            if (elStore != null)
+            {
+                elStore.destroyELContextStore();
             }
+
             this.beanManager.fireEvent(new BeforeShutdownImpl(), true);
 
-            // Destroys context before BeforeShutdown event
+            // this will now even destroy the ExtensionBeans and other internal stuff
             this.contextsService.destroy(endObject);
 
             //Unbind BeanManager
@@ -374,8 +388,6 @@ public class OpenEJBLifecycle implements ContainerLifecycle {
     }
 
     public static ScheduledExecutorService initializeServletContext(final ServletContext servletContext, final WebBeansContext context) {
-        final String strDelay = context.getOpenWebBeansConfiguration().getProperty(OpenWebBeansConfiguration.CONVERSATION_PERIODIC_DELAY, "150000");
-        final long delay = Long.parseLong(strDelay);
 
         final ScheduledExecutorService executorService = Executors.newScheduledThreadPool(1, new ThreadFactory() {
             @Override
@@ -385,7 +397,6 @@ public class OpenEJBLifecycle implements ContainerLifecycle {
                 return t;
             }
         });
-        executorService.scheduleWithFixedDelay(new ConversationCleaner(context), delay, delay, TimeUnit.MILLISECONDS);
 
         final ELAdaptor elAdaptor = context.getService(ELAdaptor.class);
         final ELResolver resolver = elAdaptor.getOwbELResolver();
@@ -393,13 +404,7 @@ public class OpenEJBLifecycle implements ContainerLifecycle {
         if (context.getOpenWebBeansConfiguration().isJspApplication()) {
             logger.debug("Application is configured as JSP. Adding EL Resolver.");
 
-            final JspFactory factory = JspFactory.getDefaultFactory();
-            if (factory != null) {
-                final JspApplicationContext applicationCtx = factory.getJspApplicationContext(servletContext);
-                applicationCtx.addELResolver(resolver);
-            } else {
-                logger.debug("Default JspFactory instance was not found");
-            }
+            setJspELFactory(servletContext, resolver);
         }
 
         // Add BeanManager to the 'javax.enterprise.inject.spi.BeanManager' servlet context attribute
@@ -409,22 +414,37 @@ public class OpenEJBLifecycle implements ContainerLifecycle {
     }
 
     /**
-     * Conversation cleaner thread, that
-     * clears unused conversations.
+     * On Tomcat we need to sometimes force a class load to get our hands on the JspFactory
      */
-    private static final class ConversationCleaner implements Runnable {
-        private final WebBeansContext webBeansContext;
+    private static void setJspELFactory(ServletContext startupObject, ELResolver resolver)
+    {
+        JspFactory factory = JspFactory.getDefaultFactory();
+        if (factory == null)
+        {
+            try
+            {
+                Class.forName("org.apache.jasper.compiler.JspRuntimeContext");
+                factory = JspFactory.getDefaultFactory();
+            }
+            catch (Exception e)
+            {
+                // ignore
+            }
 
-        private ConversationCleaner(final WebBeansContext webBeansContext) {
-            this.webBeansContext = webBeansContext;
         }
 
-        public void run() {
-            webBeansContext.getConversationManager().destroyWithRespectToTimout();
-
+        if (factory != null)
+        {
+            JspApplicationContext applicationCtx = factory.getJspApplicationContext(startupObject);
+            applicationCtx.addELResolver(resolver);
+        }
+        else
+        {
+            logger.warning("Default JSPFactroy instance has not found. Skipping OWB JSP handling");
         }
     }
 
+
     /**
      * Returns servlet context otherwise throws exception.
      *

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
index ed48b9e..fef83b3 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
@@ -121,10 +121,6 @@ public class ThreadSingletonServiceImpl implements ThreadSingletonService {
             properties.setProperty("org.apache.webbeans.proxy.mapping.javax.enterprise.context.RequestScoped", defaultNormalScopeHandlerClass);
         }
 
-        if (sessionContextClass() != null && tomee) {
-            properties.setProperty("org.apache.webbeans.proxy.mapping.javax.enterprise.context.SessionScoped", "org.apache.tomee.catalina.cdi.SessionNormalScopeBeanHandler");
-        }
-
         if (SystemInstance.get().getOptions().get(WEBBEANS_FAILOVER_ISSUPPORTFAILOVER, false)) {
             properties.setProperty(WEBBEANS_FAILOVER_ISSUPPORTFAILOVER, "true");
         }

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/container/openejb-core/src/main/java/org/apache/openejb/cdi/UpdatableSessionContextManager.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/UpdatableSessionContextManager.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/UpdatableSessionContextManager.java
deleted file mode 100644
index fe97ef1..0000000
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/UpdatableSessionContextManager.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.openejb.cdi;
-
-import org.apache.openejb.OpenEJBRuntimeException;
-import org.apache.webbeans.context.SessionContext;
-import org.apache.webbeans.web.context.SessionContextManager;
-
-import java.lang.reflect.Field;
-import java.util.Map;
-
-public class UpdatableSessionContextManager extends SessionContextManager {
-    private static final Field scField;
-
-    static {
-        try {
-            scField = SessionContextManager.class.getDeclaredField("sessionContexts");
-            scField.setAccessible(true);
-        } catch (final NoSuchFieldException e) {
-            throw new OpenEJBRuntimeException("sessionContexts attribute of SessionContextManager not found, you probably use a not compatible version of OWB");
-        }
-    }
-
-    private final Map<String, SessionContext> contextById;
-
-    public UpdatableSessionContextManager() {
-        try {
-            contextById = (Map<String, SessionContext>) scField.get(this);
-        } catch (final IllegalAccessException e) {
-            throw new OpenEJBRuntimeException("can't get session contexts", e);
-        }
-    }
-
-    public Map<String, SessionContext> getContextById() {
-        return contextById;
-    }
-
-    public void updateSessionIdMapping(final String oldId, final String newId) {
-        if (oldId == null) {
-            return;
-        }
-
-        final SessionContext sc = getSessionContextWithSessionId(oldId);
-        if (sc == null) {
-            return;
-        }
-
-        addNewSessionContext(newId, sc);
-        contextById.remove(oldId);
-    }
-}

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
index 9616622..49d4468 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
@@ -1027,9 +1027,9 @@ public class ApplicationComposers {
     public void stopApplication() throws NamingException {
         if (appContext != null) {
             final ContextsService contextsService = appContext.getWebBeansContext().getContextsService();
+            // No need to stop the ConversationContext manually as it gets stored inside the SessionContext as Bean
             contextsService.endContext(SessionScoped.class, session);
             contextsService.endContext(RequestScoped.class, null);
-            contextsService.endContext(ConversationScoped.class, null);
         }
 
         if (appInfo != null) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiAppContextsServiceTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiAppContextsServiceTest.java b/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiAppContextsServiceTest.java
index 41ba092..08f6b05 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiAppContextsServiceTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiAppContextsServiceTest.java
@@ -18,12 +18,11 @@ package org.apache.openejb.cdi;
 
 import org.junit.Test;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 
 public class CdiAppContextsServiceTest {
     @Test
     public void cid() {
+/*X TODO refactor this over to any cId test in OWB
         assertNull(CdiAppContextsService.getFromQuery("cid", null));
         assertNull(CdiAppContextsService.getFromQuery("cid", ""));
         assertNull(CdiAppContextsService.getFromQuery("cid", "superparam=cejdzl&cfdlcjlzdbc=czlbcjb&cdlzcs&cdlcjkd"));
@@ -32,5 +31,6 @@ public class CdiAppContextsServiceTest {
         assertEquals("10", CdiAppContextsService.getFromQuery("cid", "cecfzd=cefczerf&cfdzcd=&é&cdzc&cid=10"));
         assertEquals("10", CdiAppContextsService.getFromQuery("cid", "cecfzd=cefczerf&cfdzcd=&é&cdzc&cid=10&cdsjlcbdjc=djlbcsjlb=ldjbs=cdsln"));
         assertEquals("10", CdiAppContextsService.getFromQuery("cid", "cid=10&cdsjlcbdjc=djlbcsjlb=ldjbs=cdsln"));
+*/
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulConversationScopedTOMEE1138Test.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulConversationScopedTOMEE1138Test.java b/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulConversationScopedTOMEE1138Test.java
index c9a4476..c005681 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulConversationScopedTOMEE1138Test.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulConversationScopedTOMEE1138Test.java
@@ -75,8 +75,8 @@ public class StatefulConversationScopedTOMEE1138Test {
             }
 
             @Override
-            public String getConversationSessionId() {
-                return "session-test";
+            public String generateConversationId() {
+                return "cid_1";
             }
         });
         webBeansContext.getService(ContextsService.class).startContext(ConversationScoped.class, null);

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/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 36e83aa..acd4208 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
@@ -22,18 +22,13 @@ import org.apache.openejb.cdi.ThreadSingletonServiceImpl;
 import org.apache.openejb.cdi.WebappWebBeansContext;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
-import org.apache.webbeans.annotation.DestroyedLiteral;
 import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.ConversationContext;
-import org.apache.webbeans.conversation.ConversationManager;
 import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.spi.FailOverService;
 import org.apache.webbeans.util.WebBeansUtil;
 
-import java.util.Map;
-import javax.enterprise.context.Conversation;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.SessionScoped;
 import javax.servlet.ServletContextEvent;
@@ -188,26 +183,6 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
             logger.debug("Destroying a session with session id : [{0}]", event.getSession().getId());
         }
 
-        // ensure session ThreadLocal is set
-        webBeansContext.getContextsService().startContext(SessionScoped.class, event.getSession());
-
-        if (WebappWebBeansContext.class.isInstance(webBeansContext)) { // end after child
-            WebappWebBeansContext.class.cast(webBeansContext).getParent().getContextsService().endContext(SessionScoped.class, event.getSession());
-        }
-
-        final CdiAppContextsService appContextsService = CdiAppContextsService.class.cast(webBeansContext.getContextsService());
-        if (appContextsService.getRequestContext(false) != null) {
-            final String id = event.getSession().getId(); // capture it eagerly!
-            appContextsService.pushRequestReleasable(new Runnable() {
-                @Override
-                public void run() {
-                    doDestroyConversations(id);
-                }
-            });
-        } else {
-            doDestroyConversations(event.getSession().getId());
-        }
-
         webBeansContext.getContextsService().endContext(SessionScoped.class, event.getSession());
 
         WebBeansListenerHelper.destroyFakedRequest(this);
@@ -240,14 +215,4 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
         WebBeansListenerHelper.destroyFakedRequest(this);
     }
 
-    private void doDestroyConversations(final String id) {
-        final ConversationManager conversationManager = webBeansContext.getConversationManager();
-        final Map<Conversation, ConversationContext> cc = conversationManager.getAndRemoveConversationMapWithSessionId(id);
-        for (final Map.Entry<Conversation, ConversationContext> c : cc.entrySet()) {
-            if (c != null) {
-                c.getValue().destroy();
-                webBeansContext.getBeanManagerImpl().fireEvent(c.getKey().getId(), DestroyedLiteral.INSTANCE_CONVERSATION_SCOPED);
-            }
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/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 65d15e1..de5841f 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
@@ -19,7 +19,6 @@ package org.apache.openejb.server.httpd;
 import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.spi.ContextsService;
-import org.apache.webbeans.spi.FailOverService;
 
 import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
@@ -36,8 +35,6 @@ import javax.servlet.http.HttpSessionListener;
  */
 public class EndWebBeansListener implements ServletContextListener, ServletRequestListener, HttpSessionListener, HttpSessionActivationListener {
 
-    protected FailOverService failoverService;
-
     /**
      * Manages the container lifecycle
      */
@@ -52,7 +49,6 @@ public class EndWebBeansListener implements ServletContextListener, ServletReque
     public EndWebBeansListener(WebBeansContext webBeansContext) {
         this.webBeansContext = webBeansContext;
         if (webBeansContext != null) {
-            this.failoverService = this.webBeansContext.getService(FailOverService.class);
             this.contextsService = CdiAppContextsService.class.cast(webBeansContext.getService(ContextsService.class));
         } else {
             this.contextsService = null;
@@ -72,9 +68,6 @@ public class EndWebBeansListener implements ServletContextListener, ServletReque
      */
     @Override
     public void requestInitialized(ServletRequestEvent event) {
-        if (contextsService != null && contextsService.isAutoConversationCheck()) {
-            contextsService.checkConversationState();
-        }
     }
 
     /**
@@ -99,9 +92,6 @@ public class EndWebBeansListener implements ServletContextListener, ServletReque
             return;
         }
 
-        if (failoverService != null && failoverService.isSupportPassivation()) {
-            failoverService.sessionWillPassivate(event.getSession());
-        }
         WebBeansListenerHelper.destroyFakedRequest(this);
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/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 7cbaa0b..ae80d63 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
@@ -35,7 +35,6 @@ import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
-import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.openejb.cdi.Proxys;
 import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.core.WebContext;
@@ -43,8 +42,7 @@ import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.util.AppFinder;
 import org.apache.openejb.web.LightweightWebAppBuilder;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.spi.ContextsService;
+
 
 /**
  * @version $Revision$ $Date$
@@ -184,10 +182,6 @@ 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();
-                    }
                     if (pattern.contains("/.*\\.") && HttpRequestImpl.class.isInstance(request)) { // TODO: enhance it, basically servlet *.xxx
                         HttpRequestImpl.class.cast(request).noPathInfo();
                     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/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 3751ef0..6006178 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
@@ -104,6 +104,9 @@ public class HttpRequestImpl implements HttpRequest {
             return;
         }
         es.shutdownNow();
+        for (RequestSession requestSession : SESSIONS.values()) {
+            requestSession.session.invalidate();
+        }
         SESSIONS.clear();
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansListenerHelper.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansListenerHelper.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansListenerHelper.java
index db0578c..979e676 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansListenerHelper.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/WebBeansListenerHelper.java
@@ -22,6 +22,9 @@ import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.spi.Context;
 import javax.servlet.ServletRequestListener;
 
+/**
+ * @deprecated this features is imo highly questionable. We should rather fix the root of the issue
+ */
 public final class WebBeansListenerHelper {
     private static final ThreadLocal<Boolean> FAKE_REQUEST = new ThreadLocal<Boolean>();
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
index d7bdbe6..753b021 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/OpenEJBContextConfig.java
@@ -35,7 +35,6 @@ import org.apache.openejb.assembler.classic.ResourceInfo;
 import org.apache.openejb.assembler.classic.ServletInfo;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.assembler.classic.WebAppInfo;
-import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.NewLoaderLogic;
 import org.apache.openejb.config.ServiceUtils;
@@ -60,16 +59,9 @@ import org.apache.tomee.common.NamingUtil;
 import org.apache.tomee.common.ResourceFactory;
 import org.apache.tomee.jasper.TomEEJasperInitializer;
 import org.apache.tomee.loader.TomcatHelper;
-import org.apache.webbeans.config.WebBeansContext;
 import org.apache.xbean.finder.IAnnotationFinder;
 
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
 import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServlet;
 import javax.ws.rs.core.Application;
 import java.io.ByteArrayInputStream;
@@ -373,16 +365,6 @@ public class OpenEJBContextConfig extends ContextConfig {
             webXml.addFilterMapping(mapping);
         }
 
-        {
-            final FilterDef filter = new FilterDef();
-            filter.setAsyncSupported("true");
-            filter.setDescription("CDI Conversation Filter");
-            filter.setDisplayName("CDI Conversation Filter");
-            filter.setFilterName("CDI Conversation Filter");
-            filter.setFilterClass(ConversationFilter.class.getName());
-            webXml.addFilter(filter);
-        }
-
         return webXml;
     }
 
@@ -717,31 +699,4 @@ public class OpenEJBContextConfig extends ContextConfig {
         return false;
     }
 
-    public static class ConversationFilter implements Filter {
-        private WebBeansContext wbc;
-        private CdiAppContextsService contextsService;
-
-        @Override
-        public void init(final FilterConfig filterConfig) throws ServletException {
-            try {
-                wbc = WebBeansContext.currentInstance();
-                contextsService = CdiAppContextsService.class.cast(wbc.getContextsService());
-            } catch (final Exception e) {
-                // no-op
-            }
-        }
-
-        @Override
-        public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
-            if (contextsService != null) {
-                contextsService.checkConversationState();
-            }
-            chain.doFilter(request, response);
-        }
-
-        @Override
-        public void destroy() {
-            // no-op
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
index 048efa1..f842923 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
@@ -18,11 +18,8 @@ package org.apache.tomee.catalina;
 
 import org.apache.catalina.ContainerEvent;
 import org.apache.catalina.ContainerListener;
-import org.apache.catalina.Context;
 import org.apache.catalina.core.StandardContext;
-import org.apache.openejb.cdi.CdiAppContextsService;
-import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.spi.ContextsService;
+
 
 public class TomEEContainerListener implements ContainerListener {
     private static final ThreadLocal<StandardContext> context = new ThreadLocal<StandardContext>();
@@ -33,14 +30,6 @@ public class TomEEContainerListener implements ContainerListener {
             context.set((StandardContext) event.getContainer());
         } else if ("afterContextInitialized".equals(event.getType())) {
             context.remove();
-        } else if (Context.CHANGE_SESSION_ID_EVENT.endsWith(event.getType())) {
-            final String[] ids = (String[]) event.getData();
-
-            final WebBeansContext wbc = WebBeansContext.currentInstance();
-            final ContextsService cs = wbc.getContextsService();
-            if (CdiAppContextsService.class.isInstance(cs) && ids.length > 0) {
-                ((CdiAppContextsService) cs).updateSessionIdMapping(ids[0], ids[1]);
-            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index 1f9c81a..24a31e0 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -78,7 +78,6 @@ import org.apache.openejb.assembler.classic.ServletInfo;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
 import org.apache.openejb.assembler.classic.WebAppInfo;
 import org.apache.openejb.assembler.classic.event.NewEjbAvailableAfterApplicationCreated;
-import org.apache.openejb.cdi.CdiAppContextsService;
 import org.apache.openejb.cdi.CdiBuilder;
 import org.apache.openejb.cdi.OpenEJBLifecycle;
 import org.apache.openejb.cdi.Proxys;
@@ -128,6 +127,7 @@ import org.apache.tomee.common.NamingUtil;
 import org.apache.tomee.common.UserTransactionFactory;
 import org.apache.tomee.loader.TomcatHelper;
 import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.spi.adaptor.ELAdaptor;
 import org.omg.CORBA.ORB;
 
@@ -1071,9 +1071,9 @@ public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener, Pare
         }
         for (final FilterMap map : standardContext.findFilterMaps()) {
             if ("CDI Conversation Filter".equals(map.getFilterName()) && webContext.getWebBeansContext() != null) {
-                final CdiAppContextsService cdiAppContextsService = CdiAppContextsService.class.cast(webContext.getWebBeansContext().getContextsService());
-                if (cdiAppContextsService != null) {
-                    cdiAppContextsService.setAutoConversationCheck(false);
+                ContextsService contextsService = webContext.getWebBeansContext().getContextsService();
+                if (contextsService != null) {
+                    contextsService.setSupportConversations(false);
                 }
                 break;
             }

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionContextBackedByHttpSession.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionContextBackedByHttpSession.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionContextBackedByHttpSession.java
deleted file mode 100644
index 585a011..0000000
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionContextBackedByHttpSession.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.tomee.catalina.cdi;
-
-import org.apache.catalina.session.StandardSession;
-import org.apache.catalina.session.StandardSessionFacade;
-import org.apache.openejb.cdi.CdiAppContextsService;
-import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.util.reflection.Reflections;
-import org.apache.webbeans.context.creational.BeanInstanceBag;
-import org.apache.webbeans.util.WebBeansUtil;
-
-import javax.enterprise.context.spi.Contextual;
-import javax.servlet.http.HttpSession;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-public class SessionContextBackedByHttpSession extends CdiAppContextsService.HttpSessionContextSessionAware {
-    private static final String WRAPPER = SystemInstance.get().getProperty("tomee.session-context.wrapper", "direct");
-
-    public SessionContextBackedByHttpSession(final HttpSession session) {
-        super(session);
-        setComponentSessionInstanceMap(); // override default map (set in super())
-    }
-
-    @SuppressWarnings("unchecked")
-    public void setComponentSessionInstanceMap() {
-        HttpSession session = getSession();
-        if (session == null) {
-            super.setComponentInstanceMap();
-            return;
-        }
-
-        if (session instanceof StandardSessionFacade) {
-            try {
-                session = (HttpSession) Reflections.get(session, "session");
-            } catch (final Exception e) {
-                // no-op
-            }
-        }
-
-        if (StandardSession.class.equals(session.getClass())) { // local session, use fastest wrapper
-            try {
-                final ConcurrentHashMap<String, Object> map = (ConcurrentHashMap<String, Object>) Reflections.get(session, "attributes");
-                if (WRAPPER.equals("direct")) {
-                    componentInstanceMap = new DirectSessionMap(map);
-                } else  {
-                    componentInstanceMap = new HttpSessionMap(session);
-                }
-            } catch (final Exception e) {
-                componentInstanceMap = new HttpSessionMap(session);
-            }
-        } else {
-            componentInstanceMap = new HttpSessionMap(session);
-        }
-    }
-
-    public static String key(final Object key) {
-        if (key instanceof String) { // avoid nested calls
-            return (String) key;
-        }
-
-        final String id = WebBeansUtil.getPassivationId((Contextual<?>) key);
-        if (id != null) {
-            return id;
-        }
-        return key.toString(); // shouldn't occur
-    }
-
-    private static class DirectSessionMap implements ConcurrentMap<Contextual<?>, BeanInstanceBag<?>> {
-        private final ConcurrentHashMap<String, Object> delegate;
-
-        public DirectSessionMap(final ConcurrentHashMap<String, Object> map) {
-            delegate = map;
-        }
-
-        @Override
-        public int size() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean isEmpty() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean containsValue(final Object value) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public Set<Contextual<?>> keySet() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public Collection<BeanInstanceBag<?>> values() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public Set<Entry<Contextual<?>, BeanInstanceBag<?>>> entrySet() {
-            return Collections.emptySet();
-        }
-
-        @Override
-        public boolean containsKey(final Object key) {
-            return delegate.containsKey(key(key));
-        }
-
-        @Override
-        public BeanInstanceBag<?> get(final Object key) {
-            return (BeanInstanceBag<?>) delegate.get(key(key));
-        }
-
-        @Override
-        public BeanInstanceBag<?> put(final Contextual<?> key, final BeanInstanceBag<?> value) {
-            return (BeanInstanceBag<?>) delegate.put(key(key), value);
-        }
-
-        @Override
-        public BeanInstanceBag<?> remove(final Object key) {
-            return (BeanInstanceBag<?>) delegate.remove(key(key));
-        }
-
-        @Override
-        public void putAll(final Map<? extends Contextual<?>, ? extends BeanInstanceBag<?>> m) {
-            for (final Map.Entry<? extends Contextual<?>, ? extends BeanInstanceBag<?>> e : m.entrySet()) {
-                put(e.getKey(), e.getValue());
-            }
-        }
-
-        @Override
-        public void clear() {
-            final Iterator<String> it = delegate.keySet().iterator();
-            while (it.hasNext()) {
-                if (delegate.get(it.next()) instanceof BeanInstanceBag) {
-                    it.remove();
-                }
-            }
-        }
-
-        @Override
-        public BeanInstanceBag<?> putIfAbsent(final Contextual<?> key, final BeanInstanceBag<?> value) {
-            return (BeanInstanceBag<?>) delegate.putIfAbsent(key(key), value);
-        }
-
-        @Override
-        public boolean remove(final Object key, final Object value) {
-            return delegate.remove(key(key), value);
-        }
-
-        @Override
-        public boolean replace(final Contextual<?> key, final BeanInstanceBag<?> oldValue, final BeanInstanceBag<?> newValue) {
-            return delegate.replace(key(key), oldValue, newValue);
-        }
-
-        @Override
-        public BeanInstanceBag<?> replace(final Contextual<?> key, final BeanInstanceBag<?> value) {
-            return (BeanInstanceBag<?>) delegate.replace(key(key), value);
-        }
-    }
-
-    private static class HttpSessionMap implements ConcurrentMap<Contextual<?>,BeanInstanceBag<?>> { // not sure it can really work
-        private final HttpSession session;
-
-        public HttpSessionMap(final HttpSession session) {
-            this.session = session;
-        }
-
-        @Override
-        public int size() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean isEmpty() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean containsKey(final Object key) {
-            return session.getAttribute(key(key)) != null;
-        }
-
-        @Override
-        public boolean containsValue(final Object value) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public Set<Contextual<?>> keySet() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public Collection<BeanInstanceBag<?>> values() {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean replace(final Contextual<?> key, final BeanInstanceBag<?> oldValue, final BeanInstanceBag<?> newValue) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public BeanInstanceBag<?> replace(final Contextual<?> key, final BeanInstanceBag<?> value) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public void clear() {
-            // no-op
-        }
-
-        @Override
-        public Set<Entry<Contextual<?>, BeanInstanceBag<?>>> entrySet() {
-            return Collections.emptySet();
-        }
-
-        @Override
-        public BeanInstanceBag<?> get(final Object key) {
-            return (BeanInstanceBag<?>) session.getAttribute(key(key));
-        }
-
-        @Override
-        public BeanInstanceBag<?> put(final Contextual<?> key, final BeanInstanceBag<?> value) {
-            final BeanInstanceBag<?> bag = get(key);
-            session.setAttribute(key(key), value);
-            return bag;
-        }
-
-        @Override
-        public BeanInstanceBag<?> remove(final Object key) {
-            final BeanInstanceBag<?> bag = get(key);
-            session.removeAttribute(key(key));
-            return bag;
-        }
-
-        @Override
-        public void putAll(final Map<? extends Contextual<?>, ? extends BeanInstanceBag<?>> m) {
-            for (final Map.Entry<? extends Contextual<?>, ? extends BeanInstanceBag<?>> e : m.entrySet()) {
-                put(e.getKey(), e.getValue());
-            }
-        }
-
-        @Override
-        public BeanInstanceBag<?> putIfAbsent(final Contextual<?> key, final BeanInstanceBag<?> value) {
-            final String k = key(key);
-            final BeanInstanceBag<?> beanInstanceBag = get(k);
-            if (beanInstanceBag == null) {
-                return put(key, value);
-            }
-            return beanInstanceBag;
-        }
-
-        @Override
-        public boolean remove(final Object key, final Object value) {
-            remove(key(key));
-            return true;
-        }
-
-        @Override
-        public String toString() {
-            return "HttpSessionMap{session=" + session + '}';
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/tomee/blob/e41c460f/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java
deleted file mode 100644
index 71b2c2a..0000000
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/cdi/SessionNormalScopeBeanHandler.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.tomee.catalina.cdi;
-
-import org.apache.openejb.cdi.CdiAppContextsService;
-import org.apache.tomee.catalina.TomEERuntimeException;
-import org.apache.webbeans.context.creational.BeanInstanceBag;
-import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler;
-
-import javax.enterprise.context.SessionScoped;
-import javax.enterprise.context.spi.Context;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.servlet.http.HttpSession;
-import java.lang.reflect.Field;
-import java.util.HashMap;
-import java.util.Map;
-
-public class SessionNormalScopeBeanHandler extends NormalScopedBeanInterceptorHandler {
-    private static final Field BAG_INSTANCE;
-    static {
-        try {
-            BAG_INSTANCE = BeanInstanceBag.class.getDeclaredField("beanInstance");
-            BAG_INSTANCE.setAccessible(true);
-        } catch (final NoSuchFieldException e) {
-            throw new TomEERuntimeException(e);
-        }
-    }
-
-    private static final ThreadLocal<Map<Bean<?>, UpdateInfo>> OBJECTS = new ThreadLocal<Map<Bean<?>, UpdateInfo>>() {
-        @Override
-        protected Map<Bean<?>, UpdateInfo> initialValue() {
-            CdiAppContextsService.pushRequestReleasable(new Runnable() { // update in batch
-                @Override
-                public void run() {
-                    final Map<Bean<?>, UpdateInfo> values = OBJECTS.get();
-                    for (final UpdateInfo o : values.values()) {
-                        o.updateBean();
-                    }
-                    values.clear();
-                    OBJECTS.remove();
-                }
-            });
-            return new HashMap<Bean<?>, UpdateInfo>();
-        }
-    };
-
-    public SessionNormalScopeBeanHandler(final BeanManager beanManager, final Bean<?> bean) {
-        super(beanManager, bean);
-    }
-
-    @Override
-    public Object get() {
-        final Object webbeansInstance = getContextualInstance();
-        final Map<Bean<?>, UpdateInfo> beanUpdateInfoMap = OBJECTS.get();
-
-        if (!beanUpdateInfoMap.containsKey(bean)) {
-            beanUpdateInfoMap.put(bean, new UpdateInfo(bean, getBeanManager(), webbeansInstance));
-        }
-
-        return webbeansInstance;
-    }
-
-    protected static class UpdateInfo {
-        private Bean<?> bean;
-        private BeanManager bm;
-        private Object value;
-
-        protected UpdateInfo(final Bean<?> bean, final BeanManager bm, final Object value) {
-            this.bean = bean;
-            this.bm = bm;
-            this.value = value;
-        }
-
-        @SuppressWarnings("unchecked")
-        protected void updateBean() {
-            final HttpSession session = session();
-            if (session == null) {
-                return;
-            }
-
-            // go through all listeners to be able to be replicated or do any processing which can be done
-            final String key = SessionContextBackedByHttpSession.key(bean);
-            final BeanInstanceBag<Object> bag = BeanInstanceBag.class.cast(session.getAttribute(key));
-            if (bag != null) {
-                try {
-                    BAG_INSTANCE.set(bag, value);
-                } catch (final IllegalAccessException e) {
-                    throw new TomEERuntimeException(e);
-                }
-                session.setAttribute(key, bag);
-            }
-        }
-
-        private HttpSession session() {
-            final Context context = bm.getContext(SessionScoped.class);
-            if (!SessionContextBackedByHttpSession.class.isInstance(context)) {
-                return null;
-            }
-            return SessionContextBackedByHttpSession.class.cast(context).getSession();
-        }
-    }
-}


[14/16] tomee git commit: destroying session scope before session in some tomee lifecycles

Posted by st...@apache.org.
destroying session scope before session in some tomee lifecycles


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 94df0ba7b81d6330055de819e125dcb629601339
Parents: bdd8644
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon May 4 18:25:48 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:57:36 2015 +0200

----------------------------------------------------------------------
 tck/cdi-tomee/src/test/resources/failing.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/94df0ba7/tck/cdi-tomee/src/test/resources/failing.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/src/test/resources/failing.xml b/tck/cdi-tomee/src/test/resources/failing.xml
index 6ec10c3..23ceda0 100644
--- a/tck/cdi-tomee/src/test/resources/failing.xml
+++ b/tck/cdi-tomee/src/test/resources/failing.xml
@@ -23,7 +23,7 @@
   -->
   <test name="CDI TCK for developers (debugging)">
     <classes>
-      <class name="org.jboss.cdi.tck.tests.context.request.ws.RequestContextTest" />
+      <class name="org.jboss.cdi.tck.tests.deployment.shutdown.ApplicationShutdownLifecycleTest" />
     </classes>
   </test>
 </suite>


[09/16] tomee git commit: fixing test

Posted by st...@apache.org.
fixing test


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

Branch: refs/heads/fb_tomee2_owb16
Commit: a629b804aa0493f9fab8729d1d2d65144dcc9132
Parents: 0421a02
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Thu Apr 30 10:27:58 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:00:19 2015 +0200

----------------------------------------------------------------------
 .../openejb/util/classloader/URLClassLoaderFirstTest.java    | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/a629b804/container/openejb-core/src/test/java/org/apache/openejb/util/classloader/URLClassLoaderFirstTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/util/classloader/URLClassLoaderFirstTest.java b/container/openejb-core/src/test/java/org/apache/openejb/util/classloader/URLClassLoaderFirstTest.java
index f77d7e2..e7646dd 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/util/classloader/URLClassLoaderFirstTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/util/classloader/URLClassLoaderFirstTest.java
@@ -21,17 +21,17 @@ import org.apache.openejb.loader.JarLocation;
 import org.apache.openejb.loader.SystemInstance;
 import org.junit.Test;
 
-import javax.wsdl.WSDLException;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.util.Properties;
+import javax.wsdl.WSDLException;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 public class URLClassLoaderFirstTest {
     @Test
-    public void loadFromAppIfNotInContainer() throws MalformedURLException {
+    public void loadFromAppIfNotInContainer() throws Exception {
         assertTrue(URLClassLoaderFirst.shouldSkip("javax.wsdl.WSDLException"));
 
         final URLClassLoader parent = new URLClassLoader(new URL[0]) {
@@ -45,6 +45,7 @@ public class URLClassLoaderFirstTest {
         };
         final URLClassLoader tmpLoader = new URLClassLoaderFirst(new URL[]{JarLocation.jarLocation(WSDLException.class).toURI().toURL()}, parent);
 
+        SystemInstance.init(new Properties());
         SystemInstance.get().setComponent(ParentClassLoaderFinder.class, new ParentClassLoaderFinder() {
             @Override
             public ClassLoader getParentClassLoader(final ClassLoader fallback) {
@@ -62,5 +63,6 @@ public class URLClassLoaderFirstTest {
         }
 
         assertTrue(URLClassLoaderFirst.shouldSkip("javax.wsdl.WSDLException"));
+        SystemInstance.reset();
     }
 }


[12/16] tomee git commit: OWB-1049 removing failoverservice references

Posted by st...@apache.org.
OWB-1049 removing failoverservice references


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 12e1a440a44de3817e8faea60804f752491d8266
Parents: 7840b09
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sun May 3 22:26:11 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:49:52 2015 +0200

----------------------------------------------------------------------
 .../org/apache/openejb/cdi/ThreadSingletonServiceImpl.java   | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/12e1a440/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
index 5564b8f..e5c36d0 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
@@ -47,8 +47,6 @@ import org.apache.webbeans.spi.TransactionService;
 import org.apache.webbeans.spi.adaptor.ELAdaptor;
 import org.apache.webbeans.web.intercept.RequestScopedBeanInterceptorHandler;
 
-import javax.enterprise.inject.spi.DeploymentException;
-import javax.transaction.Transactional;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
@@ -56,6 +54,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.ConcurrentHashMap;
+import javax.enterprise.inject.spi.DeploymentException;
+import javax.transaction.Transactional;
 
 /**
  * @version $Rev:$ $Date:$
@@ -71,7 +71,6 @@ public class ThreadSingletonServiceImpl implements ThreadSingletonService {
     //this needs to be static because OWB won't tell us what the existing SingletonService is and you can't set it twice.
     private static final ThreadLocal<WebBeansContext> contexts = new ThreadLocal<WebBeansContext>();
     private static final Map<ClassLoader, WebBeansContext> contextByClassLoader = new ConcurrentHashMap<ClassLoader, WebBeansContext>();
-    private static final String WEBBEANS_FAILOVER_ISSUPPORTFAILOVER = "org.apache.webbeans.web.failover.issupportfailover";
 
     @Override
     public void initialize(final StartupObject startupObject) {
@@ -114,9 +113,6 @@ public class ThreadSingletonServiceImpl implements ThreadSingletonService {
             properties.setProperty("org.apache.webbeans.proxy.mapping.javax.enterprise.context.RequestScoped", defaultNormalScopeHandlerClass);
         }
 
-        if (SystemInstance.get().getOptions().get(WEBBEANS_FAILOVER_ISSUPPORTFAILOVER, false)) {
-            properties.setProperty(WEBBEANS_FAILOVER_ISSUPPORTFAILOVER, "true");
-        }
 
         properties.put(OpenWebBeansConfiguration.PRODUCER_INTERCEPTION_SUPPORT, SystemInstance.get().getProperty("openejb.cdi.producer.interception", "true"));
 


[11/16] tomee git commit: destroying sessions in application composer as well

Posted by st...@apache.org.
destroying sessions in application composer as well


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 7840b09f4957b494ef76d8be8842d631d1ba6acc
Parents: 95ea7d5
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sun May 3 22:23:57 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:32:05 2015 +0200

----------------------------------------------------------------------
 .../openejb/OpenEJBDeployableContainer.java     |  6 ++++--
 .../openejb/testing/ApplicationComposers.java   | 22 ++++++++++++++++++++
 2 files changed, 26 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/7840b09f/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 44915b8..f999c20 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
@@ -319,8 +319,10 @@ public class OpenEJBDeployableContainer implements DeployableContainer<OpenEJBCo
                         public void close() throws IOException {
                             try {
                                 final SessionManager sessionManager = SystemInstance.get().getComponent(SessionManager.class);
-                                for (final WebContext web : appCtx.getWebContexts()) {
-                                    sessionManager.destroy(web);
+                                if (sessionManager != null) {
+                                    for (final WebContext web : appCtx.getWebContexts()) {
+                                        sessionManager.destroy(web);
+                                    }
                                 }
                             } catch (final Throwable e) {
                                 // no-op

http://git-wip-us.apache.org/repos/asf/tomee/blob/7840b09f/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
index 49d4468..e94bed3 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
@@ -46,6 +46,7 @@ import org.apache.openejb.config.sys.JaxbOpenejb;
 import org.apache.openejb.config.sys.Openejb;
 import org.apache.openejb.core.LocalInitialContextFactory;
 import org.apache.openejb.core.Operation;
+import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.core.ThreadContext;
 import org.apache.openejb.core.WebContext;
 import org.apache.openejb.core.ivm.naming.InitContextFactory;
@@ -75,6 +76,7 @@ import org.apache.openejb.util.NetworkUtil;
 import org.apache.openejb.util.PropertyPlaceHolderHelper;
 import org.apache.openejb.util.ServiceManagerProxy;
 import org.apache.openejb.util.URLs;
+import org.apache.openejb.util.reflection.Reflections;
 import org.apache.openejb.web.LightweightWebAppBuilder;
 import org.apache.webbeans.inject.OWBInjector;
 import org.apache.webbeans.spi.ContextsService;
@@ -1447,6 +1449,26 @@ public class ApplicationComposers {
                     }
                 }
             });
+            if (!composer.appContext.getWebContexts().isEmpty()) {
+                composer.beforeDestroyAfterRunnables.add(new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            final Object sessionManager = SystemInstance.get().getComponent(
+                                    ParentClassLoaderFinder.Helper.get().loadClass("org.apache.openejb.server.httpd.session.SessionManager")
+                            );
+                            if (sessionManager != null) {
+                                final Class<?>[] paramTypes = {WebContext.class};
+                                for (final WebContext web : composer.appContext.getWebContexts()) {
+                                    Reflections.invokeByReflection(sessionManager, "destroy", paramTypes, new Object[] { web });
+                                }
+                            }
+                        } catch (final Throwable e) {
+                            // no-op
+                        }
+                    }
+                });
+            }
             composer.afterRunnables.add(new Runnable() {
                 @Override
                 public void run() {


[03/16] tomee git commit: TOMEE-1572 remove FailOverService

Posted by st...@apache.org.
TOMEE-1572 remove FailOverService

FailOverService is not needed by OWB any longer
TOMEE-


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

Branch: refs/heads/fb_tomee2_owb16
Commit: c5632ef80b01e900daaf5a1c651577f79a67479b
Parents: e41c460
Author: Mark Struberg <st...@apache.org>
Authored: Sat May 2 14:48:51 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Sat May 2 14:48:51 2015 +0200

----------------------------------------------------------------------
 .../openejb/cdi/ThreadSingletonServiceImpl.java |  7 -------
 .../server/httpd/BeginWebBeansListener.java     | 20 --------------------
 2 files changed, 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/c5632ef8/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
index fef83b3..5564b8f 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
@@ -102,13 +102,6 @@ public class ThreadSingletonServiceImpl implements ThreadSingletonService {
         properties.setProperty(OpenWebBeansConfiguration.APPLICATION_SUPPORTS_CONVERSATION, "true");
         properties.setProperty(OpenWebBeansConfiguration.IGNORED_INTERFACES, "org.apache.aries.proxy.weaving.WovenProxy");
 
-        final String failoverService = startupObject.getAppInfo().properties.getProperty("org.apache.webbeans.spi.FailOverService",
-            SystemInstance.get().getProperty("org.apache.webbeans.spi.FailOverService",
-                null));
-        if (failoverService != null) {
-            properties.setProperty(OpenWebBeansConfiguration.IGNORED_INTERFACES, failoverService);
-        }
-
         final boolean tomee = SystemInstance.get().getProperty("openejb.loader", "foo").startsWith("tomcat");
 
         final String defaultNormalScopeHandlerClass = NormalScopedBeanInterceptorHandler.class.getName();

http://git-wip-us.apache.org/repos/asf/tomee/blob/c5632ef8/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 acd4208..4a9b6e1 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
@@ -26,7 +26,6 @@ import org.apache.webbeans.config.OWBLogConst;
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.el.ELContextStore;
 import org.apache.webbeans.spi.ContextsService;
-import org.apache.webbeans.spi.FailOverService;
 import org.apache.webbeans.util.WebBeansUtil;
 
 import javax.enterprise.context.RequestScoped;
@@ -35,7 +34,6 @@ import javax.servlet.ServletContextEvent;
 import javax.servlet.ServletContextListener;
 import javax.servlet.ServletRequestEvent;
 import javax.servlet.ServletRequestListener;
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSessionActivationListener;
 import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
@@ -52,7 +50,6 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
      */
     private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_CDI, BeginWebBeansListener.class);
 
-    protected FailOverService failoverService;
     private final CdiAppContextsService contextsService;
 
     /**
@@ -67,7 +64,6 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
      */
     public BeginWebBeansListener(final WebBeansContext webBeansContext) {
         this.webBeansContext = webBeansContext;
-        this.failoverService = webBeansContext != null ? this.webBeansContext.getService(FailOverService.class) : null;
         this.contextsService = webBeansContext != null ? CdiAppContextsService.class.cast(webBeansContext.getService(ContextsService.class)) : null;
         this.contextKey = "org.apache.tomee.catalina.WebBeansListener@" + webBeansContext.hashCode();
     }
@@ -93,19 +89,6 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
         }
 
         try {
-            if (event != null
-                    && failoverService != null
-                    && failoverService.isSupportFailOver()) {
-                Object request = event.getServletRequest();
-                if (request instanceof HttpServletRequest) {
-                    HttpServletRequest httpRequest = (HttpServletRequest) request;
-                    javax.servlet.http.HttpSession session = httpRequest.getSession(false);
-                    if (session != null) {
-                        failoverService.sessionIsIdle(session);
-                    }
-                }
-            }
-
             // clean up the EL caches after each request
             final ELContextStore elStore = ELContextStore.getInstance(false);
             if (elStore != null) {
@@ -195,9 +178,6 @@ public class BeginWebBeansListener implements ServletContextListener, ServletReq
 
     @Override
     public void sessionDidActivate(final HttpSessionEvent event) {
-        if (failoverService.isSupportFailOver() || failoverService.isSupportPassivation()) {
-            failoverService.sessionDidActivate(event.getSession());
-        }
     }
 
     @Override


[04/16] tomee git commit: TOMEE-1572 remove unused import

Posted by st...@apache.org.
TOMEE-1572 remove unused import


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

Branch: refs/heads/fb_tomee2_owb16
Commit: dec1a0ff83a7ab47555cc3d4030206cd11780f64
Parents: c5632ef
Author: Mark Struberg <st...@apache.org>
Authored: Mon May 4 18:50:30 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 18:50:30 2015 +0200

----------------------------------------------------------------------
 .../main/java/org/apache/openejb/cdi/CdiAppContextsService.java   | 3 ---
 1 file changed, 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/dec1a0ff/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 780728e..6ca395e 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
@@ -21,8 +21,6 @@ package org.apache.openejb.cdi;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
 import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.context.RequestContext;
-import org.apache.webbeans.context.SessionContext;
 import org.apache.webbeans.spi.ContextsService;
 import org.apache.webbeans.web.context.WebContextsService;
 
@@ -30,7 +28,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Singleton;
-import javax.servlet.http.HttpSession;
 
 
 public class CdiAppContextsService extends WebContextsService implements ContextsService {


[13/16] tomee git commit: destroying session in a SessionManager in embedded mode and not in cdi context

Posted by st...@apache.org.
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/fb_tomee2_owb16
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>


[16/16] tomee git commit: TOMEE-1572 remove exclusions which are not needed anymore

Posted by st...@apache.org.
TOMEE-1572 remove exclusions which are not needed anymore


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 58b9bc0930a0ac36a40c5a9fcf72fd7d69a9646d
Parents: b0f479f
Author: Mark Struberg <st...@apache.org>
Authored: Tue May 5 07:48:57 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Tue May 5 07:48:57 2015 +0200

----------------------------------------------------------------------
 pom.xml | 12 ------------
 1 file changed, 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/58b9bc09/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 0ab6965..5806c3d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1726,18 +1726,6 @@
         <version>${org.apache.openwebbeans.version}</version>
         <exclusions>
           <exclusion>
-            <groupId>javassist</groupId>
-            <artifactId>javassist</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>net.sf.scannotation</groupId>
-            <artifactId>scannotation</artifactId>
-          </exclusion>
-          <exclusion>
-            <groupId>asm</groupId>
-            <artifactId>asm</artifactId>
-          </exclusion>
-          <exclusion>
             <groupId>org.apache.xbean</groupId>
             <artifactId>xbean-finder-shaded</artifactId>
           </exclusion>


[05/16] tomee git commit: TOMEE-1572 add docs to the cdi poms

Posted by st...@apache.org.
TOMEE-1572 add docs to the cdi poms


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 195995419c087d1fb15552ce5af993abd697335a
Parents: dec1a0f
Author: Mark Struberg <st...@apache.org>
Authored: Mon May 4 18:52:33 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 18:52:33 2015 +0200

----------------------------------------------------------------------
 tck/cdi-embedded/pom.xml       | 2 +-
 tck/cdi-tomee-embedded/pom.xml | 2 +-
 tck/cdi-tomee/pom.xml          | 4 ++++
 3 files changed, 6 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/19599541/tck/cdi-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-embedded/pom.xml b/tck/cdi-embedded/pom.xml
index 95f0b3e..20de463 100644
--- a/tck/cdi-embedded/pom.xml
+++ b/tck/cdi-embedded/pom.xml
@@ -208,7 +208,7 @@
             <openejb.strict.interface.declaration>true</openejb.strict.interface.declaration>
             <openejb.http.mock-request>true</openejb.http.mock-request>
             <openejb.http.default-content-type>text/plain</openejb.http.default-content-type> <!-- TODO: remove it -->
-            <openejb.http.eviction.duration>1 second</openejb.http.eviction.duration>
+            <openejb.http.eviction.duration>2 second</openejb.http.eviction.duration>
             <openejb.embedded.try-jsp>true</openejb.embedded.try-jsp>
             <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>

http://git-wip-us.apache.org/repos/asf/tomee/blob/19599541/tck/cdi-tomee-embedded/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee-embedded/pom.xml b/tck/cdi-tomee-embedded/pom.xml
index d8319a5..b45864c 100644
--- a/tck/cdi-tomee-embedded/pom.xml
+++ b/tck/cdi-tomee-embedded/pom.xml
@@ -25,7 +25,7 @@
   <modelVersion>4.0.0</modelVersion>
   <artifactId>cdi-tomee-embedded</artifactId>
   <packaging>jar</packaging>
-  <name>OpenEJB :: TCK :: CDI TomEE Embedded</name>
+  <name>OpenEJB :: TCK :: CDI-1.2 TomEE Embedded</name>
   <dependencies>
     <dependency>
       <groupId>org.apache.openejb</groupId>

http://git-wip-us.apache.org/repos/asf/tomee/blob/19599541/tck/cdi-tomee/pom.xml
----------------------------------------------------------------------
diff --git a/tck/cdi-tomee/pom.xml b/tck/cdi-tomee/pom.xml
index ba4345a..fae8ce7 100644
--- a/tck/cdi-tomee/pom.xml
+++ b/tck/cdi-tomee/pom.xml
@@ -27,6 +27,10 @@
   <artifactId>cdi-tomee</artifactId>
   <name>OpenEJB :: TCK :: CDI TomEE</name>
 
+  <!--
+   * debug the server side by adding -Dopenejb.server.debug=true
+   -->
+
   <properties>
     <suite.name>passing</suite.name>
     <cdi-tck.version>1.2.4.Final</cdi-tck.version>


[06/16] tomee git commit: TOMEE-1570 adding logger name to openejb log record

Posted by st...@apache.org.
TOMEE-1570 adding logger name to openejb log record


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

Branch: refs/heads/fb_tomee2_owb16
Commit: 065fc36e6ac49c5e712f4991c24745e95a088fb5
Parents: a629b80
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Thu Apr 30 10:59:00 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:00:19 2015 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/openejb/util/JuliLogStream.java        | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/065fc36e/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java b/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
index 75639a2..b99af1d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
@@ -102,6 +102,7 @@ public class JuliLogStream implements LogStream {
             if (t != null) {
                 logRecord.setThrown(t);
             }
+            logRecord.setLoggerName(log.getName());
             log.log(logRecord);
         }
     }


[08/16] tomee git commit: TOMEE-1568 support overriding of a failed deployment in tomcat webappdeployer

Posted by st...@apache.org.
TOMEE-1568 support overriding of a failed deployment in tomcat webappdeployer


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

Branch: refs/heads/fb_tomee2_owb16
Commit: b7eb5b01b07c16efc79c076006b20a7e214eb39e
Parents: 1959954
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Wed Apr 29 22:59:17 2015 +0200
Committer: Mark Struberg <st...@apache.org>
Committed: Mon May 4 19:00:19 2015 +0200

----------------------------------------------------------------------
 .../org/apache/openejb/assembler/DeployerEjb.java  |  7 +++++--
 .../apache/tomee/catalina/TomcatWebAppBuilder.java | 17 ++++++++++++++---
 2 files changed, 19 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/b7eb5b01/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
index 908d14b..bc4d354 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
@@ -176,8 +176,11 @@ public class DeployerEjb implements Deployer {
             try {
                 final AppInfo appInfo = SystemInstance.get().getComponent(WebAppDeployer.class)
                         .deploy(host, contextRoot(properties, file.getAbsolutePath()), file);
-                saveIfNeeded(properties, file, appInfo);
-                return appInfo;
+                if (appInfo != null) {
+                    saveIfNeeded(properties, file, appInfo);
+                    return appInfo;
+                }
+                throw new OpenEJBException("can't deploy " + file.getAbsolutePath());
             } finally {
                 AUTO_DEPLOY.remove();
             }

http://git-wip-us.apache.org/repos/asf/tomee/blob/b7eb5b01/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index 24a31e0..2ef7d8c 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -466,7 +466,7 @@ public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener, Pare
                 }
             }
 
-            if (getContextInfo(webApp.host, webApp.contextRoot) != null) {
+            if (isAlreadyDeployed(webApp)) {
                 continue;
             }
 
@@ -515,7 +515,7 @@ public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener, Pare
             appParam.setValue(webApp.moduleId);
             standardContext.addApplicationParameter(appParam);
 
-            if (getContextInfo(webApp.host, webApp.contextRoot) == null) {
+            if (!isAlreadyDeployed(webApp)) {
                 if (standardContext.getPath() == null) {
                     if (webApp.contextRoot != null && webApp.contextRoot.startsWith("/")) {
                         standardContext.setPath(webApp.contextRoot);
@@ -542,7 +542,7 @@ public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener, Pare
                     webApp.contextRoot = "";
                 }
 
-                if (getContextInfo(webApp.host, webApp.contextRoot) != null) { // possible because of the previous renaming
+                if (isAlreadyDeployed(webApp)) { // possible because of the previous renaming
                     continue;
                 }
 
@@ -580,6 +580,17 @@ public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener, Pare
         }
     }
 
+    private boolean isAlreadyDeployed(final WebAppInfo webApp) {
+        final ContextInfo contextInfo = getContextInfo(webApp.host, webApp.contextRoot);
+        if (contextInfo != null && contextInfo.standardContext != null && contextInfo.standardContext.getState() == LifecycleState.FAILED) {
+            synchronized (this) {
+                infos.remove(getId(webApp.host, webApp.contextRoot));
+            }
+            return false;
+        }
+        return contextInfo != null;
+    }
+
     private static boolean isParent(final ClassLoader parent, final ClassLoader child) {
         ClassLoader current = child;
         while (current != null) {