package org.kevoree.kcl; import org.junit.Test; import org.kevoree.kcl.api.FlexyClassLoader; import org.kevoree.kcl.api.Helper; import org.kevoree.kcl.impl.FlexyClassLoaderImpl; import org.kevoree.log.Log; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; /** * Created with IntelliJ IDEA. * User: duke * Date: 19/08/13 * Time: 11:46 */ public class ConcurrentLoadTest implements Runnable { @Test public void testConcurrentLoad() throws InterruptedException { ExecutorService pool = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 4); for (int i = 0; i < Runtime.getRuntime().availableProcessors() * 4; i++) { pool.submit(new ConcurrentLoadTest()); } pool.awaitTermination(1000, TimeUnit.MILLISECONDS); } @Override public void run() { try { System.out.println("Perform concurrent KCL test"); FlexyClassLoader fcl0 = new FlexyClassLoaderImpl(); fcl0.load(Helper.stream2File( this.getClass().getClassLoader().getResourceAsStream("org.kevoree.kcl.jar"), "org.kevoree.kcl.jar")); FlexyClassLoader fcl1 = new FlexyClassLoaderImpl(); fcl1.load(Helper.stream2File( this.getClass().getClassLoader().getResourceAsStream("org.kevoree.log.jar"), "org.kevoree.log.jar")); fcl0.attachChild(fcl1); Class resolvedClass = fcl0.loadClass(FlexyClassLoaderImpl.class.getName()); assert (resolvedClass.getClassLoader().equals(fcl0)); Class resolvedLogClass = fcl1.loadClass(Log.class.getName()); //std resolution of class assert (resolvedLogClass.getClassLoader().equals(fcl1)); Class resolvedLogClassTransitive = fcl0.loadClass(Log.class.getName()); assert (resolvedLogClassTransitive.getClassLoader().equals(fcl1)); // Log class should be resolved from the new KCL //TEst the transitive link } catch (Exception e) { e.printStackTrace(); } } }