Repository: tomee
Updated Branches:
  refs/heads/master 439352c43 -> bf2cf2f97


if warmup is called skip core class preloading


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

Branch: refs/heads/master
Commit: bf2cf2f97ee93941872cacb8510e519205934ac3
Parents: 439352c
Author: Romain Manni-Bucau <rmannibu...@apache.org>
Authored: Tue Jun 16 14:21:20 2015 +0200
Committer: Romain Manni-Bucau <rmannibu...@apache.org>
Committed: Tue Jun 16 14:21:20 2015 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/openejb/Core.java  | 162 ++++++++++---------
 1 file changed, 88 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/bf2cf2f9/container/openejb-core/src/main/java/org/apache/openejb/Core.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/Core.java 
b/container/openejb-core/src/main/java/org/apache/openejb/Core.java
index 7bdeece..e76ca68 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/Core.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/Core.java
@@ -27,55 +27,6 @@ import java.util.concurrent.Semaphore;
  */
 public class Core {
     static {
-        final String[] classes = {
-            "org.slf4j.LoggerFactory",
-            "org.slf4j.impl.StaticLoggerBinder",
-
-            "org.apache.openejb.config.sys.JaxbJavaee",
-            "org.apache.bval.jsr.ApacheValidationProvider",
-            "org.apache.bval.jsr.ApacheValidatorFactory",
-            "org.apache.bval.jsr.ConstraintAnnotationAttributes",
-            "org.apache.bval.jsr.ConstraintDefaults",
-            "org.apache.bval.jsr.groups.GroupsComputer",
-            "org.apache.bval.jsr.xml.ValidationMappingParser",
-            "org.apache.bval.util.PrivilegedActions",
-            "org.apache.geronimo.transaction.manager.TransactionManagerImpl",
-            "org.apache.openejb.InterfaceType",
-            "org.apache.openejb.assembler.classic.Assembler",
-            "org.apache.openejb.assembler.classic.AssemblerTool",
-            "org.apache.openejb.cdi.CdiBuilder",
-            "org.apache.openejb.cdi.ThreadSingletonServiceImpl",
-            "org.apache.openejb.config.AppValidator",
-            "org.apache.openejb.config.AnnotationDeployer",
-            "org.apache.openejb.config.AutoConfig",
-            "org.apache.openejb.config.ConfigurationFactory",
-            "org.apache.openejb.config.MBeanDeployer",
-            "org.apache.openejb.config.PersistenceContextAnnFactory",
-            "org.apache.openejb.core.ServerFederation",
-            "org.apache.openejb.core.ivm.EjbHomeProxyHandler$1",
-            "org.apache.openejb.core.ivm.EjbHomeProxyHandler$MethodType",
-            "org.apache.openejb.core.managed.ManagedContainer$MethodType",
-            "org.apache.openejb.loader.FileUtils",
-            "org.apache.openejb.loader.IO",
-            "org.apache.openejb.loader.SystemInstance",
-            "org.apache.openejb.monitoring.StatsInterceptor",
-            "org.apache.openejb.persistence.JtaEntityManagerRegistry",
-            "org.apache.openejb.util.Join",
-            "org.apache.openejb.util.JuliLogStreamFactory",
-            "org.apache.openejb.util.LogCategory",
-            "org.apache.openejb.util.Messages",
-            "org.apache.openejb.util.SafeToolkit",
-            "org.apache.openejb.util.StringTemplate",
-            "org.apache.openejb.util.proxy.ProxyManager",
-            "org.apache.openjpa.enhance.PCRegistry",
-            "org.apache.openjpa.lib.util.Localizer",
-            "org.apache.webbeans.logger.WebBeansLoggerFacade",
-            "org.apache.xbean.naming.reference.SimpleReference",
-            "org.apache.xbean.propertyeditor.PropertyEditors",
-            "org.apache.xbean.propertyeditor.ReferenceIdentityMap",
-            "org.apache.xbean.recipe.ReflectionUtil"
-        };
-
         final Thread preloadMessages = new Thread() {
             @Override
             public void run() {
@@ -102,41 +53,104 @@ public class Core {
         final Semaphore semaphore = new Semaphore(0);
         final ClassLoader loader = OpenEjbContainer.class.getClassLoader();
 
-        try { // logging classes should be loaded before any other classes so 
do it here synchronously
-            Class.forName("org.apache.openejb.util.Logger", true, loader);
+        try {
+            Class.forName("org.apache.tomee.catalina.Warmup", true, loader);
+            // ok preloading already done
         } catch (final Throwable e) {
-            // no-op
-        }
+            try { // logging classes should be loaded before any other classes 
so do it here synchronously
+                Class.forName("org.apache.openejb.util.Logger", true, loader);
+            } catch (final Throwable ignored) {
+                // no-op
+            }
+
+            final String[] classes = {
+                    "org.slf4j.LoggerFactory",
+                    "org.slf4j.impl.StaticLoggerBinder",
+
+                    "org.apache.openejb.config.sys.JaxbJavaee",
+                    "org.apache.bval.jsr.ApacheValidationProvider",
+                    "org.apache.bval.jsr.ApacheValidatorFactory",
+                    "org.apache.bval.jsr.ConstraintAnnotationAttributes",
+                    "org.apache.bval.jsr.ConstraintDefaults",
+                    "org.apache.bval.jsr.groups.GroupsComputer",
+                    "org.apache.bval.jsr.xml.ValidationMappingParser",
+                    "org.apache.bval.util.PrivilegedActions",
+                    
"org.apache.geronimo.transaction.manager.TransactionManagerImpl",
+                    "org.apache.openejb.InterfaceType",
+                    "org.apache.openejb.assembler.classic.Assembler",
+                    "org.apache.openejb.assembler.classic.AssemblerTool",
+                    "org.apache.openejb.cdi.CdiBuilder",
+                    "org.apache.openejb.cdi.ThreadSingletonServiceImpl",
+                    "org.apache.openejb.config.AppValidator",
+                    "org.apache.openejb.config.AnnotationDeployer",
+                    "org.apache.openejb.config.AutoConfig",
+                    "org.apache.openejb.config.ConfigurationFactory",
+                    "org.apache.openejb.config.MBeanDeployer",
+                    "org.apache.openejb.config.PersistenceContextAnnFactory",
+                    "org.apache.openejb.core.ServerFederation",
+                    "org.apache.openejb.core.ivm.EjbHomeProxyHandler$1",
+                    
"org.apache.openejb.core.ivm.EjbHomeProxyHandler$MethodType",
+                    
"org.apache.openejb.core.managed.ManagedContainer$MethodType",
+                    "org.apache.openejb.loader.FileUtils",
+                    "org.apache.openejb.loader.IO",
+                    "org.apache.openejb.loader.SystemInstance",
+                    "org.apache.openejb.monitoring.StatsInterceptor",
+                    "org.apache.openejb.persistence.JtaEntityManagerRegistry",
+                    "org.apache.openejb.util.Join",
+                    "org.apache.openejb.util.JuliLogStreamFactory",
+                    "org.apache.openejb.util.LogCategory",
+                    "org.apache.openejb.util.Messages",
+                    "org.apache.openejb.util.SafeToolkit",
+                    "org.apache.openejb.util.StringTemplate",
+                    "org.apache.openejb.util.proxy.ProxyManager",
+                    "org.apache.openjpa.enhance.PCRegistry",
+                    "org.apache.openjpa.lib.util.Localizer",
+                    "org.apache.webbeans.logger.WebBeansLoggerFacade",
+                    "org.apache.xbean.naming.reference.SimpleReference",
+                    "org.apache.xbean.propertyeditor.PropertyEditors",
+                    "org.apache.xbean.propertyeditor.ReferenceIdentityMap",
+                    "org.apache.xbean.recipe.ReflectionUtil"
+            };
 
-        final int part = Math.max(1, (int) Math.round(classes.length * 1. / 
permits));
-        for (int i = 0; i < permits; i++) {
-            final int current = i;
-            final int offset = i * part;
-            final Thread thread = new Thread() {
-                @Override
-                public void run() {
-                    int max = offset + part;
-                    if (current == permits - 1) { // last one
-                        max = classes.length;
+            final int part = Math.max(1, (int) Math.round(classes.length * 1. 
/ permits));
+            for (int i = 0; i < permits; i++) {
+                final int current = i;
+                final int offset = i * part;
+                final Thread thread = new Thread() {
+                    {
+                        setName("core-" + current);
                     }
 
-                    for (int c = offset; c < max; c++) {
-                        try {
-                            Class.forName(classes[c], true, loader);
-                        } catch (final Throwable e) {
-                            // no-op
+                    @Override
+                    public void run() {
+                        int max = offset + part;
+                        if (current == permits - 1) { // last one
+                            max = classes.length;
+                        }
+
+                        for (int c = offset; c < max; c++) {
+                            try {
+                                Class.forName(classes[c], true, loader);
+                            } catch (final Throwable e) {
+                                // no-op
+                            }
                         }
+                        semaphore.release();
                     }
-                    semaphore.release();
-                }
-            };
-            thread.setDaemon(true);
-            thread.start();
+                };
+                thread.setDaemon(true);
+                thread.start();
+            }
+            try {
+                semaphore.acquire(permits);
+            } catch (final InterruptedException ie) {
+                Thread.interrupted();
+            }
         }
+
         try {
             preloadServiceProviders.join();
             preloadMessages.join();
-            semaphore.acquire(permits);
         } catch (final InterruptedException e) {
             Thread.interrupted();
         }

Reply via email to