[jboss-cvs] JBossAS SVN: r103194 - in projects/kernel/trunk/kernel/src/test: java/org/jboss/test/kernel/dependency/test and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 29 14:18:00 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-03-29 14:17:58 -0400 (Mon, 29 Mar 2010)
New Revision: 103194

Added:
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java
   projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml
Modified:
   projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java
Log:
[JBKERNEL-114] Rework test to understand classloading better when creating classpools

Added: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/support/ClassPoolFactoryImpl.java	2010-03-29 18:17:58 UTC (rev 103194)
@@ -0,0 +1,99 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.kernel.dependency.support;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import javassist.ClassPool;
+import javassist.LoaderClassPath;
+
+import org.jboss.beans.metadata.api.annotations.Install;
+import org.jboss.beans.metadata.api.annotations.Uninstall;
+import org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactoryImpl;
+import org.jboss.reflect.plugins.javassist.classpool.ClassPoolFactory;
+
+/**
+ * ClassPoolFactory which works as a in/uncallback listener for classloaders 
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassPoolFactoryImpl implements ClassPoolFactory
+{
+   private Map<ClassLoader, ClassPool> pools = new WeakHashMap<ClassLoader, ClassPool>();
+   
+   private ClassPoolFactory factory;
+   
+   @Install
+   public void addClassLoader(ClassLoader loader)
+   {
+      ClassPool pool = new ClassLoaderAwareClassPool(ClassPool.getDefault(), loader);
+      pool.childFirstLookup = true;
+      pool.appendClassPath(new LoaderClassPath(loader));
+      pools.put(loader, pool);
+   }
+   
+   @Uninstall
+   public void removeClassLoader(ClassLoader loader)
+   {
+      pools.remove(loader);
+   }
+   
+   public ClassPool getPoolForLoader(ClassLoader classLoader)
+   {
+      ClassPool pool = pools.get(classLoader);
+      if (pool != null)
+         return pool;
+      return ClassPool.getDefault();
+   }
+   
+   public void start()
+   {
+      factory = JavassistTypeInfoFactoryImpl.getPoolFactory();
+      JavassistTypeInfoFactoryImpl.setPoolFactory(this);
+   }
+   
+   public void stop()
+   {
+      if (factory != null)
+         JavassistTypeInfoFactoryImpl.setPoolFactory(factory);
+   }
+   
+   private static class ClassLoaderAwareClassPool extends ClassPool
+   {
+      ClassLoader cl;
+      public ClassLoaderAwareClassPool(ClassPool parent, ClassLoader cl)
+      {
+         super(parent);
+         this.cl = cl;
+         childFirstLookup = true;
+         appendClassPath(new LoaderClassPath(cl));
+      }
+
+      public ClassLoader getClassLoader()
+      {
+         return cl;
+      }
+   }
+
+}
\ No newline at end of file

Modified: projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java
===================================================================
--- projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java	2010-03-29 18:05:11 UTC (rev 103193)
+++ projects/kernel/trunk/kernel/src/test/java/org/jboss/test/kernel/dependency/test/ConstructorClassLoaderTestCase.java	2010-03-29 18:17:58 UTC (rev 103194)
@@ -225,6 +225,7 @@
    {
       constructorClassLoaderReinstall();
 
+      assertInstall(4, "ClassPoolFactory");
       assertInstall(3, "URL");
       ControllerContext clCtx = assertInstall(0, "VFSClassLoader");
       ControllerContext bean1Ctx = assertInstall(1, "VFSBean1");
@@ -320,7 +321,10 @@
       AbstractConstructorMetaData cmd = new AbstractConstructorMetaData();
       metaData2.setConstructor(cmd);
       cmd.setParameters(constructor2);
+      
+      AbstractBeanMetaData metaData4 = new AbstractBeanMetaData("ClassPoolFactory", 
+            "org.jboss.test.kernel.dependency.support.ClassPoolFactoryImpl");
 
-      setBeanMetaDatas(new BeanMetaData[] { metaData0, metaData1, metaData2, metaData3 });
+      setBeanMetaDatas(new BeanMetaData[] { metaData0, metaData1, metaData2, metaData3, metaData4});
    }
 }
\ No newline at end of file

Added: projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml
===================================================================
--- projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml	                        (rev 0)
+++ projects/kernel/trunk/kernel/src/test/resources/xml-test/org/jboss/test/kernel/dependency/test/testConstructorClassLoaderReinstall4.xml	2010-03-29 18:17:58 UTC (rev 103194)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<deployment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:schemaLocation="urn:jboss:bean-deployer bean-deployer_1_0.xsd"
+            xmlns="urn:jboss:bean-deployer">
+   <bean name="ClassPoolFactory" class="org.jboss.test.kernel.dependency.support.ClassPoolFactoryImpl"/>
+</deployment>




More information about the jboss-cvs-commits mailing list