Author: rmannibucau
Date: Thu Sep 19 08:11:14 2013
New Revision: 1524647

URL: http://svn.apache.org/r1524647
Log:
TOMEE-1034 ability to preload some classes at container setup (Maven.resolver() 
use case)

Modified:
    
tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
    
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
    
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
    
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
    
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java

Modified: 
tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java?rev=1524647&r1=1524646&r2=1524647&view=diff
==============================================================================
--- 
tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
 (original)
+++ 
tomee/tomee/trunk/arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/ArquillianUtil.java
 Thu Sep 19 08:11:14 2013
@@ -17,6 +17,7 @@
 package org.apache.openejb.arquillian.common;
 
 import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.openejb.util.DaemonThreadFactory;
 import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
 import org.jboss.arquillian.container.spi.client.container.DeploymentException;
 import org.jboss.shrinkwrap.api.Archive;
@@ -27,6 +28,8 @@ import java.lang.reflect.Modifier;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -107,4 +110,37 @@ public final class ArquillianUtil {
             }
         }
     }
+
+    public static void preLoadClassesAsynchronously(final String 
classesToLoad) {
+        if (classesToLoad == null || classesToLoad.isEmpty()) {
+            return;
+        }
+
+        final ClassLoader loader = 
Thread.currentThread().getContextClassLoader();
+        final String[] split = classesToLoad.trim().split(",");
+        final ExecutorService es = Executors.newCachedThreadPool(new 
DaemonThreadFactory(split));
+        for (final String clazz : split) {
+            es.submit(new PreLoadClassTask(loader, clazz));
+        }
+        es.shutdown();
+    }
+
+    private static class PreLoadClassTask implements Runnable {
+        private final String clazz;
+        private final ClassLoader loader;
+
+        public PreLoadClassTask(final ClassLoader loader, final String name) {
+            this.loader = loader;
+            this.clazz = name;
+        }
+
+        @Override
+        public void run() {
+            try {
+                loader.loadClass(clazz);
+            } catch (final Throwable th) {
+                // no-op
+            }
+        }
+    }
 }

Modified: 
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java?rev=1524647&r1=1524646&r2=1524647&view=diff
==============================================================================
--- 
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
 (original)
+++ 
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBConfiguration.java
 Thu Sep 19 08:11:14 2013
@@ -22,6 +22,7 @@ import org.jboss.arquillian.container.sp
 
 public class OpenEJBConfiguration implements ContainerConfiguration {
     private String properties = "";
+    private String preloadClasses = null;
 
     @Override
     public void validate() throws ConfigurationException {
@@ -36,4 +37,12 @@ public class OpenEJBConfiguration implem
     public void setProperties(String properties) {
         this.properties = properties;
     }
+
+    public String getPreloadClasses() {
+        return preloadClasses;
+    }
+
+    public void setPreloadClasses(final String preloadClasses) {
+        this.preloadClasses = preloadClasses;
+    }
 }

Modified: 
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java?rev=1524647&r1=1524646&r2=1524647&view=diff
==============================================================================
--- 
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
 (original)
+++ 
tomee/tomee/trunk/arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/OpenEJBDeployableContainer.java
 Thu Sep 19 08:11:14 2013
@@ -33,10 +33,6 @@ import org.apache.openejb.core.LocalInit
 import org.apache.openejb.core.LocalInitialContextFactory;
 import org.apache.openejb.loader.IO;
 import org.apache.openejb.loader.SystemInstance;
-import org.apache.openejb.server.ServerService;
-import org.apache.openejb.server.SimpleServiceManager;
-import org.apache.openejb.util.ServiceManagerProxy;
-import org.apache.openejb.util.reflection.Reflections;
 import org.apache.openejb.web.LightweightWebAppBuilder;
 import org.apache.webbeans.web.lifecycle.test.MockHttpSession;
 import org.apache.webbeans.web.lifecycle.test.MockServletContext;
@@ -44,9 +40,7 @@ import org.jboss.arquillian.container.sp
 import org.jboss.arquillian.container.spi.client.container.DeploymentException;
 import org.jboss.arquillian.container.spi.client.container.LifecycleException;
 import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
-import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
 import 
org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
-import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
 import org.jboss.arquillian.container.spi.context.annotation.DeploymentScoped;
 import org.jboss.arquillian.core.api.Instance;
 import org.jboss.arquillian.core.api.InstanceProducer;
@@ -167,6 +161,8 @@ public class OpenEJBDeployableContainer 
                 properties.setProperty(key, defaultKey.getValue().toString());
             }
         }
+
+        
ArquillianUtil.preLoadClassesAsynchronously(openEJBConfiguration.getPreloadClasses());
     }
 
     @Override

Modified: 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java?rev=1524647&r1=1524646&r2=1524647&view=diff
==============================================================================
--- 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
 (original)
+++ 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEConfiguration.java
 Thu Sep 19 08:11:14 2013
@@ -36,6 +36,7 @@ public class TomEEConfiguration implemen
     protected String stopCommand = "SHUTDOWN"; // default one - can be 
overriden in server.xml
     protected String serverXml = null;
     protected String portRange = ""; // only used if port < 0, empty means 
whatever, can be "1024-65535"
+    protected String preloadClasses = null; // just a client 
classloader.loadClass(), value is comma separated qualified names. Useful with 
maven resolver for instance
     protected boolean quickSession = true;
     protected boolean unpackWars = true;
 
@@ -171,4 +172,12 @@ public class TomEEConfiguration implemen
     public void setStopCommand(String stopCommand) {
         this.stopCommand = stopCommand;
     }
+
+    public String getPreloadClasses() {
+        return preloadClasses;
+    }
+
+    public void setPreloadClasses(final String preloadClasses) {
+        this.preloadClasses = preloadClasses;
+    }
 }

Modified: 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java?rev=1524647&r1=1524646&r2=1524647&view=diff
==============================================================================
--- 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
 (original)
+++ 
tomee/tomee/trunk/arquillian/arquillian-tomee-common/src/main/java/org/apache/openejb/arquillian/common/TomEEContainer.java
 Thu Sep 19 08:11:14 2013
@@ -48,7 +48,6 @@ import javax.naming.NamingException;
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.lang.Character;
 import java.net.Socket;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -105,6 +104,8 @@ public abstract class TomEEContainer<Con
                 }
             }
         }
+
+        
ArquillianUtil.preLoadClassesAsynchronously(configuration.getPreloadClasses());
     }
 
     protected void setPorts() {


Reply via email to