Author: rmannibucau
Date: Tue Aug 21 18:35:55 2012
New Revision: 1375712
URL: http://svn.apache.org/viewvc?rev=1375712&view=rev
Log:
propagating core refactoring to warmup
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/Warmup.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java?rev=1375712&r1=1375711&r2=1375712&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/Core.java
Tue Aug 21 18:35:55 2012
@@ -96,7 +96,6 @@ public class Core {
// no-op
}
- long start = System.nanoTime();
final int part = (int) Math.round(classes.length * 1. / permits);
for (int i = 0; i < permits; i++) {
final int offset = i * part;
@@ -127,8 +126,6 @@ public class Core {
} catch (InterruptedException e) {
Thread.interrupted();
}
- long end = System.nanoTime();
- System.out.println(TimeUnit.NANOSECONDS.toMillis(end - start));
}
public static void warmup() {}
Modified:
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/Warmup.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/Warmup.java?rev=1375712&r1=1375711&r2=1375712&view=diff
==============================================================================
---
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/Warmup.java
(original)
+++
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/Warmup.java
Tue Aug 21 18:35:55 2012
@@ -17,13 +17,8 @@
package org.apache.tomee.catalina;
import org.apache.openejb.config.TldScanner;
-import org.apache.openejb.jee.JaxbJavaee;
-import org.apache.openejb.jee.WebApp;
-import org.apache.openejb.util.DaemonThreadFactory;
-
-import javax.xml.bind.JAXBException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+
+import java.util.concurrent.Semaphore;
/**
* The classes listed and loaded eagerly have static initializers which take a
tiny bit of time.
@@ -129,9 +124,7 @@ public class Warmup {
"org.apache.openejb.server.ejbd.EjbRequestHandler",
"org.apache.openejb.util.Duration",
"org.apache.openejb.util.Join",
- "org.apache.openejb.util.JuliLogStreamFactory",
"org.apache.openejb.util.LogCategory",
- "org.apache.openejb.util.Logger",
"org.apache.openejb.util.Messages",
"org.apache.openejb.util.SafeToolkit",
"org.apache.openejb.util.StringTemplate",
@@ -164,47 +157,60 @@ public class Warmup {
"org.slf4j.impl.StaticLoggerBinder",
};
- final ExecutorService executor = Executors.newFixedThreadPool(4, new
DaemonThreadFactory("warmup"));
+ final ClassLoader loader = Warmup.class.getClassLoader();
+
+ try { // see org.apache.openejb.Core
+ Class.forName("org.apache.openejb.util.Logger", true, loader);
+ Class.forName("org.apache.openejb.util.JuliLogStreamFactory",
true, loader);
+ } catch (Throwable e) {
+ // no-op
+ }
+
+ final int permits = 2 * Runtime.getRuntime().availableProcessors() + 1;
+ final Semaphore semaphore = new Semaphore(0);
- executor.execute(new JaxbJavaeeLoad(WebApp.class));
- executor.execute(new Runnable() {
+ final Thread tld = new Thread() {
@Override
public void run() {
try {
TldScanner.scan(TomcatLoader.class.getClassLoader());
} catch (Throwable throwable) {
+ // no-op
}
}
- });
+ };
+ tld.setDaemon(true);
+ tld.start();
- for (final String className : classes) {
- final ClassLoader loader = Warmup.class.getClassLoader();
- executor.execute(new Runnable() {
+ final int part = (int) Math.round(classes.length * 1. / permits);
+ for (int i = 0; i < permits; i++) {
+ final int offset = i * part;
+ final Thread thread = new Thread() {
@Override
public void run() {
- try {
- Class.forName(className, true, loader);
- } catch (Throwable throwable) {
+ int max = offset + part;
+ if (offset / part == permits - 1) { // last one
+ max = classes.length;
}
- }
- });
- }
- }
-
- private static class JaxbJavaeeLoad implements Runnable {
- private final Class<?> type;
-
- private JaxbJavaeeLoad(Class<?> type) {
- this.type = type;
+ for (int c = offset; c < max; c++) {
+ try {
+ Class.forName(classes[c], true, loader);
+ } catch (Throwable e) {
+ // no-op
+ }
+ }
+ semaphore.release();
+ }
+ };
+ thread.setDaemon(true);
+ thread.start();
}
-
- @Override
- public void run() {
- try {
- JaxbJavaee.getContext(type);
- } catch (JAXBException e) {
- }
+ try {
+ semaphore.acquire(permits);
+ tld.join();
+ } catch (InterruptedException e) {
+ Thread.interrupted();
}
}