You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/08/24 12:39:58 UTC

tomee git commit: few more contextual CDI fixes

Repository: tomee
Updated Branches:
  refs/heads/master ae9700646 -> 196acf3e4


few more contextual CDI fixes


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

Branch: refs/heads/master
Commit: 196acf3e44c4fe60e64ebc9ca6144908f056768c
Parents: ae97006
Author: Romain manni-Bucau <rm...@gmail.com>
Authored: Wed Aug 24 14:39:36 2016 +0200
Committer: Romain manni-Bucau <rm...@gmail.com>
Committed: Wed Aug 24 14:39:36 2016 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/openejb/OpenEJB.java     |  2 +-
 .../main/java/org/apache/openejb/cdi/CdiBuilder.java  |  4 ++--
 .../apache/openejb/testing/ApplicationComposers.java  |  5 +++++
 .../main/java/org/apache/openejb/util/AppFinder.java  | 10 +++++++++-
 .../apache/openejb/web/LightweightWebAppBuilder.java  | 14 ++++++++++++--
 .../org/apache/openejb/config/EarEjbButNoCdiTest.java |  9 +++++++--
 .../apache/catalina/startup/OpenEJBContextConfig.java |  1 -
 .../apache/tomee/catalina/TomEEWebappClassLoader.java |  1 -
 8 files changed, 36 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java b/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
index bb6b682..ccc1d7f 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/OpenEJB.java
@@ -116,7 +116,7 @@ public final class OpenEJB {
             logger.info("openejb.base = " + system.getBase().getDirectory().getAbsolutePath());
 
             //OWB support.  The classloader has to be able to load all OWB components including the ones supplied by OpenEjb.
-            CdiBuilder.initializeOWB(getClass().getClassLoader());
+            CdiBuilder.initializeOWB();
 
             final String className = system.getOptions().get("openejb.assembler", (String) null);
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
index 8b32211..73818b5 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiBuilder.java
@@ -48,7 +48,7 @@ public class CdiBuilder {
         //TODO hack for tests.  Currently initialized in OpenEJB line 90.  cf alternative in AccessTimeoutTest which would
         //presumably have to be replicated in about 70 other tests.
         if (singletonService == null) {
-            singletonService = initializeOWB(getClass().getClassLoader());
+            singletonService = initializeOWB();
         } else {
             logger.info("Existing thread singleton service in SystemInstance(): " + singletonService);
         }
@@ -60,7 +60,7 @@ public class CdiBuilder {
         singletonService.initialize(new StartupObject(appContext, appInfo, allDeployments, webContext));
     }
 
-    public static synchronized ThreadSingletonService initializeOWB(final ClassLoader classLoader) {
+    public static synchronized ThreadSingletonService initializeOWB() {
         logger.info("Created new singletonService " + SINGLETON_SERVICE);
         SystemInstance.get().setComponent(ThreadSingletonService.class, SINGLETON_SERVICE);
         try {

http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/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 4c33372..c698a8e 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
@@ -28,9 +28,11 @@ import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
 import org.apache.openejb.assembler.classic.WebAppBuilder;
+import org.apache.openejb.cdi.CdiBuilder;
 import org.apache.openejb.cdi.CdiScanner;
 import org.apache.openejb.cdi.OptimizedLoaderService;
 import org.apache.openejb.cdi.ScopeHelper;
+import org.apache.openejb.cdi.ThreadSingletonService;
 import org.apache.openejb.config.AppModule;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.ConnectorModule;
@@ -1376,6 +1378,9 @@ public class ApplicationComposers {
         }
 
         SystemInstance.init(configuration);
+        if (SystemInstance.get().getComponent(ThreadSingletonService.class) == null) {
+            CdiBuilder.initializeOWB();
+        }
         for (final Map.Entry<Object, ClassFinder> finder : testClassFinders.entrySet()) {
             for (final Field field : finder.getValue().findAnnotatedFields(RandomPort.class)) {
                 if (!field.isAccessible()) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/container/openejb-core/src/main/java/org/apache/openejb/util/AppFinder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/AppFinder.java b/container/openejb-core/src/main/java/org/apache/openejb/util/AppFinder.java
index b07657d..cd8cf81 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/AppFinder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/AppFinder.java
@@ -27,8 +27,13 @@ public final class AppFinder {
         final ContainerSystem containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
         for (final AppContext appContext : containerSystem.getAppContexts()) {
             final ClassLoader appContextClassLoader = appContext.getClassLoader();
+            boolean found = false;
             if (appContextClassLoader.equals(cl) || (cl != null && cl.equals(appContextClassLoader))) { // CxfContainerLoader is not symmetric
-                return transformer.from(appContext);
+                final T from = transformer.from(appContext);
+                found = true;
+                if (from != null) {
+                    return from;
+                }
             }
             for (final WebContext web : appContext.getWebContexts()) {
                 final ClassLoader webClassLoader = web.getClassLoader();
@@ -36,6 +41,9 @@ public final class AppFinder {
                     return transformer.from(web);
                 }
             }
+            if (found) { // for cases where app and webapp share the same classloader
+                break;
+            }
         }
         return null;
     }

http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java b/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
index 504090f..00267f7 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/web/LightweightWebAppBuilder.java
@@ -24,6 +24,7 @@ import org.apache.openejb.OpenEJBRuntimeException;
 import org.apache.openejb.assembler.classic.AppInfo;
 import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.ClassListInfo;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
 import org.apache.openejb.assembler.classic.FilterInfo;
 import org.apache.openejb.assembler.classic.InjectionBuilder;
 import org.apache.openejb.assembler.classic.JndiEncBuilder;
@@ -173,7 +174,7 @@ public class LightweightWebAppBuilder implements WebAppBuilder {
             appContext.getWebContexts().add(webContext);
             cs.addWebContext(webContext);
 
-            if (!appInfo.webAppAlone) {
+            if (!appInfo.webAppAlone && hasCdi(appInfo)) {
                 final Assembler assembler = SystemInstance.get().getComponent(Assembler.class);
                 new CdiBuilder().build(appInfo, appContext, beanContexts, webContext);
                 assembler.startEjbs(true, beanContexts);
@@ -229,7 +230,7 @@ public class LightweightWebAppBuilder implements WebAppBuilder {
             deployedWebObjects.webContext = webContext;
             servletDeploymentInfo.put(webAppInfo, deployedWebObjects);
 
-            if (webContext.getWebBeansContext() != null) {
+            if (webContext.getWebBeansContext() != null && webContext.getWebBeansContext().getBeanManagerImpl().isInUse()) {
                 final Thread thread = Thread.currentThread();
                 final ClassLoader old = thread.getContextClassLoader();
                 thread.setContextClassLoader(webContext.getClassLoader());
@@ -376,6 +377,15 @@ public class LightweightWebAppBuilder implements WebAppBuilder {
         }
     }
 
+    private boolean hasCdi(final AppInfo appInfo) {
+        for (final EjbJarInfo jar : appInfo.ejbJars) {
+            if (jar.beans != null) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     // not thread safe but fine in embedded mode which is the only mode of this builder
     private void switchServletContextIfNeeded(final ServletContext sc, final Runnable runnable) {
         if (sc == null) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/container/openejb-core/src/test/java/org/apache/openejb/config/EarEjbButNoCdiTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/config/EarEjbButNoCdiTest.java b/container/openejb-core/src/test/java/org/apache/openejb/config/EarEjbButNoCdiTest.java
index efd7e7d..8ecd5b1 100644
--- a/container/openejb-core/src/test/java/org/apache/openejb/config/EarEjbButNoCdiTest.java
+++ b/container/openejb-core/src/test/java/org/apache/openejb/config/EarEjbButNoCdiTest.java
@@ -29,7 +29,7 @@ import javax.ejb.EJB;
 import javax.ejb.Stateless;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
 
 // not fully spec compliant but save a bunch of mem for legacy apps
 // + avoid to breaks existing ones so better than the opposite
@@ -53,7 +53,12 @@ public class EarEjbButNoCdiTest {
     @Test
     public void check() {
         assertEquals("1", b1.val());
-        assertNull(WebBeansContext.currentInstance());
+        try {
+            WebBeansContext.currentInstance();
+            fail();
+        } catch (final IllegalStateException ise) {
+            // ok
+        }
     }
 
     @Stateless

http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/tomee/tomee-catalina/src/main/java/org/apache/catalina/startup/OpenEJBContextConfig.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/catalina/startup/OpenEJBContextConfig.java b/tomee/tomee-catalina/src/main/java/org/apache/catalina/startup/OpenEJBContextConfig.java
index 2dee1ed..1dcbbd2 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/catalina/startup/OpenEJBContextConfig.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/catalina/startup/OpenEJBContextConfig.java
@@ -62,7 +62,6 @@ 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.webbeans.web.context.WebConversationFilter;
 import org.apache.xbean.finder.IAnnotationFinder;
 

http://git-wip-us.apache.org/repos/asf/tomee/blob/196acf3e/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
index c778fac..fd00a77 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
@@ -40,7 +40,6 @@ import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.URLs;
 import org.apache.openejb.util.classloader.URLClassLoaderFirst;
 import org.apache.openejb.util.reflection.Reflections;
-import org.apache.webbeans.config.WebBeansContext;
 
 import java.io.File;
 import java.io.IOException;