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(); }