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 2013/05/15 17:43:47 UTC

svn commit: r1482917 - in /tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb: AppContext.java assembler/classic/Assembler.java cdi/ThreadSingletonServiceImpl.java config/ConfigurationFactory.java

Author: rmannibucau
Date: Wed May 15 15:43:47 2013
New Revision: 1482917

URL: http://svn.apache.org/r1482917
Log:
TOMEE-938 deactivating cdi for internal openejb application to avoid the noise it brings to our singleton service

Modified:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java?rev=1482917&r1=1482916&r2=1482917&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/AppContext.java Wed May 15 15:43:47 2013
@@ -66,6 +66,9 @@ public class AppContext extends Deployme
     }
 
     public BeanManager getBeanManager() {
+        if (webBeansContext == null) {
+            return null;
+        }
         return webBeansContext.getBeanManagerImpl();
     }
 

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1482917&r1=1482916&r2=1482917&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Wed May 15 15:43:47 2013
@@ -794,12 +794,12 @@ public class Assembler extends Assembler
                 propagateApplicationExceptions(appInfo, classLoader, allDeployments);
             }
 
-            new CdiBuilder().build(appInfo, appContext, allDeployments);
-
-            ensureWebBeansContext(appContext);
-
-            appJndiContext.bind("app/BeanManager", appContext.getBeanManager());
-            appContext.getBindings().put("app/BeanManager", appContext.getBeanManager());
+            if ("true".equalsIgnoreCase(appInfo.properties.getProperty("openejb.cdi.activated", "true"))) {
+                new CdiBuilder().build(appInfo, appContext, allDeployments);
+                ensureWebBeansContext(appContext);
+                appJndiContext.bind("app/BeanManager", appContext.getBeanManager());
+                appContext.getBindings().put("app/BeanManager", appContext.getBeanManager());
+            }
 
             startEjbs(start, allDeployments);
 
@@ -1146,9 +1146,19 @@ public class Assembler extends Assembler
                 throw new OpenEJBRuntimeException(e);
             }
 
-            final BeanManager bm = wc.getBeanManagerImpl();
-            final Set<Bean<?>> beans = bm.getBeans(clazz);
-            final Bean bean = bm.resolve(beans);
+            // cdi can be off so init with null bean in this case
+            final Bean bean;
+            final BeanManager bm;
+            if (wc == null) {
+                bm = null;
+                bean = null;
+            } else {
+                bm = wc.getBeanManagerImpl();
+                final Set<Bean<?>> beans = bm.getBeans(clazz);
+                bean = bm.resolve(beans);
+            }
+
+            // create the MBean instance with cdi if possible or manually otherwise
             final Object instance;
             final CreationalContext creationalContext;
             if (bean == null) {

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java?rev=1482917&r1=1482916&r2=1482917&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java Wed May 15 15:43:47 2013
@@ -90,7 +90,7 @@ public class ThreadSingletonServiceImpl 
         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", (String) null));
+                SystemInstance.get().getProperty("org.apache.webbeans.spi.FailOverService", (String) null));
         if (failoverService != null) {
             properties.setProperty(OpenWebBeansConfiguration.IGNORED_INTERFACES, failoverService);
         }
@@ -291,16 +291,24 @@ public class ThreadSingletonServiceImpl 
         return context;
     }
 
-    private static WebBeansContext getWebBeansContext(List<AppContext> appContexts) {
+    private static WebBeansContext getWebBeansContext(final List<AppContext> appContexts) {
         Collections.sort(appContexts, new Comparator<AppContext>() {
             @Override
-            public int compare(AppContext appContext, AppContext appContext1) {
-                return appContext1.getWebBeansContext().getBeanManagerImpl().getBeans().size() - appContext.getWebBeansContext().getBeanManagerImpl().getBeans().size();
+            public int compare(final AppContext appContext, final AppContext appContext1) {
+                return cdiSize(appContext1) - cdiSize(appContext);
             }
         });
         return appContexts.get(0).getWebBeansContext();
     }
 
+    private static int cdiSize(final AppContext ctx) {
+        final WebBeansContext wbc = ctx.getWebBeansContext();
+        if (wbc == null) {
+            return 0;
+        }
+        return wbc.getBeanManagerImpl().getBeans().size();
+    }
+
     @Override
     public WebBeansContext get(Object key) {
         return getContext((ClassLoader) key);

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1482917&r1=1482916&r2=1482917&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Wed May 15 15:43:47 2013
@@ -516,6 +516,10 @@ public class ConfigurationFactory implem
         if (options.get("openejb.system.apps", false)) {
             try {
                 final AppInfo appInfo = configureApplication(new AppModule(SystemApps.getSystemModule()));
+                // they doesn't use CDI so no need to activate it
+                // 1) will be faster
+                // 2) will let embedded containers (tomee-embedded mainly) not be noised by it in our singleton service
+                appInfo.properties.put("openejb.cdi.activated", "false");
                 sys.containerSystem.applications.add(appInfo);
             } catch (OpenEJBException e) {
                 logger.error("Unable to load the system applications.", e);