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() {