[jboss-cvs] JBossAS SVN: r80274 - in projects/aop/trunk: aop/src/main/org/jboss/aop/classpool and 22 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Oct 30 13:43:34 EDT 2008
Author: kabir.khan at jboss.com
Date: 2008-10-30 13:43:34 -0400 (Thu, 30 Oct 2008)
New Revision: 80274
Added:
projects/aop/trunk/aop/aop-report.xml
projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java
projects/aop/trunk/asintegration-jmx/src/assembly/
projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml
projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml
projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml
projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml
projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml
projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml
projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/
projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/
projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java
projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java
projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java
projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java
projects/aop/trunk/asintegration-jmx/src/tests/
projects/aop/trunk/asintegration-jmx/src/tests/org/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java
projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java
projects/aop/trunk/build/release.properties
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
projects/aop/trunk/asintegration-core/.classpath
projects/aop/trunk/asintegration-core/pom.xml
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/IsLocalResourcePluginFactory.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java
projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java
projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java
projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java
projects/aop/trunk/asintegration-jmx/.classpath
projects/aop/trunk/asintegration-jmx/pom.xml
Log:
[JBAOP-666] New classpools for RepositoryClassLoaders in AS 4
Added: projects/aop/trunk/aop/aop-report.xml
===================================================================
Added: projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java (rev 0)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPCLassPoolSearchStrategy.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,34 @@
+/*
+* 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.aop.classpool;
+
+import javassist.CtClass;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface AOPCLassPoolSearchStrategy
+{
+ CtClass getCached(String classname);
+}
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/classpool/AOPClassPool.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -47,6 +47,14 @@
/** Classnames of classes that have been loaded, but were not woven */
protected ConcurrentHashMap<String, Boolean> loadedButNotWovenClasses = new ConcurrentHashMap<String, Boolean>();
+ /** Causes the AOPClassPool.getCached() method to search all ClassPools registered in the repository */
+ public static final Class<SearchAllRegisteredLoadersSearchStrategy> SEARCH_ALL_STRATEGY = SearchAllRegisteredLoadersSearchStrategy.class;
+
+ /** Causes the AOPClassPool.getCached() method to search only itself */
+ public static final Class<SearchLocalLoaderLoaderSearchStrategy> SEARCH_LOCAL_ONLY_STRATEGY = SearchLocalLoaderLoaderSearchStrategy.class;
+
+ private final AOPCLassPoolSearchStrategy searchStrategy;
+
static
{
ClassPool.doPruning = false;
@@ -65,9 +73,43 @@
private AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean isTemp)
{
+ this(cl, src, repository, SEARCH_ALL_STRATEGY, isTemp);
+ }
+
+ public AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy)
+ {
+ this(cl, src, repository, searchStrategy, false);
+ }
+
+ public AOPClassPool(ClassPool src, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy)
+ {
+ this(null, src, repository, searchStrategy, true);
+ }
+
+ private AOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy, boolean isTemp)
+ {
super(cl, src, repository, isTemp);
+ if (searchStrategy == SEARCH_ALL_STRATEGY)
+ {
+ this.searchStrategy = new SearchAllRegisteredLoadersSearchStrategy();
+ }
+ else if (searchStrategy == SEARCH_LOCAL_ONLY_STRATEGY)
+ {
+ this.searchStrategy = new SearchLocalLoaderLoaderSearchStrategy();
+ }
+ else
+ {
+ try
+ {
+ this.searchStrategy = searchStrategy.newInstance();
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Error instantiating search strategy class " + searchStrategy, e);
+ }
+ }
}
-
+
public void setClassLoader(ClassLoader cl)
{
classLoader = new WeakReference<ClassLoader>(cl);
@@ -86,54 +128,17 @@
public CtClass getCached(String classname)
{
- CtClass clazz = getCachedLocally(classname);
- if (clazz == null)
- {
- boolean isLocal = false;
-
- ClassLoader cl = getClassLoader0();
-
- if (cl != null)
- {
- isLocal = isLocalResource(classname);
- }
-
- if (!isLocal)
- {
- Object o = generatedClasses.get(classname);
- if (o == null)
- {
- Map<ClassLoader, ClassPool> registeredCLs = AspectManager.getRegisteredCLs();
- synchronized (registeredCLs)
- {
- for(ClassPool pl : AspectManager.getRegisteredCLs().values())
- {
- AOPClassPool pool = (AOPClassPool) pl;
- if (pool.isUnloadedClassLoader())
- {
- AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
- continue;
- }
-
- //Do not check classpools for scoped classloaders
- if (!pool.includeInGlobalSearch())
- {
- continue;
- }
-
- clazz = pool.getCachedLocally(classname);
- if (clazz != null)
- {
- return clazz;
- }
- }
- }
- }
- }
- }
- // *NOTE* NEED TO TEST WHEN SUPERCLASS IS IN ANOTHER UCL!!!!!!
- return clazz;
+ return searchStrategy.getCached(classname);
}
+
+ /**
+ * Make createCtClass public so that we can override it
+ */
+ @Override
+ protected CtClass createCtClass(String classname, boolean useCache)
+ {
+ return super.createCtClass(classname, useCache);
+ }
protected boolean includeInGlobalSearch()
{
@@ -224,5 +229,72 @@
return super.get0(classname, useCache);
}
+ /**
+ * Contains the original AOPClassPool.getCached()
+ *
+ */
+ private class SearchAllRegisteredLoadersSearchStrategy implements AOPCLassPoolSearchStrategy
+ {
+ public CtClass getCached(String classname)
+ {
+ CtClass clazz = getCachedLocally(classname);
+ if (clazz == null)
+ {
+ boolean isLocal = false;
+
+ ClassLoader cl = getClassLoader0();
+
+ if (cl != null)
+ {
+ isLocal = isLocalResource(classname);
+ }
+
+ if (!isLocal)
+ {
+ Object o = generatedClasses.get(classname);
+ if (o == null)
+ {
+ Map<ClassLoader, ClassPool> registeredCLs = AspectManager.getRegisteredCLs();
+ synchronized (registeredCLs)
+ {
+ for(ClassPool pl : AspectManager.getRegisteredCLs().values())
+ {
+ AOPClassPool pool = (AOPClassPool) pl;
+ if (pool.isUnloadedClassLoader())
+ {
+ AspectManager.instance().unregisterClassLoader(pool.getClassLoader());
+ continue;
+ }
+
+ //Do not check classpools for scoped classloaders
+ if (!pool.includeInGlobalSearch())
+ {
+ continue;
+ }
+
+ clazz = pool.getCachedLocally(classname);
+ if (clazz != null)
+ {
+ return clazz;
+ }
+ }
+ }
+ }
+ }
+ }
+ // *NOTE* NEED TO TEST WHEN SUPERCLASS IS IN ANOTHER UCL!!!!!!
+ return clazz;
+ }
+ }
+ /**
+ * Checks only the AOPClassPool's cache
+ */
+ private class SearchLocalLoaderLoaderSearchStrategy implements AOPCLassPoolSearchStrategy
+ {
+ public CtClass getCached(String classname)
+ {
+ return getCachedLocally(classname);
+ }
+ }
}
Modified: projects/aop/trunk/asintegration-core/.classpath
===================================================================
--- projects/aop/trunk/asintegration-core/.classpath 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/.classpath 2008-10-30 17:43:34 UTC (rev 80274)
@@ -1,66 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src/etc" including="jbossorg-eula.txt" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/main"/>
- <classpathentry kind="src" path="src/tests" output="target/test-classes"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.0.2/activation-1.0.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/bcel/bcel/5.1/bcel-5.1.jar" sourcepath="M2_REPO/bcel/bcel/5.1/bcel-5.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1.jar" sourcepath="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/urbanophile/java-getopt/1.0.9/java-getopt-1.0.9.jar"/>
- <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4.jar" sourcepath="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4-sources.jar"/>
- <classpathentry kind="src" path="/jboss-aop"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-tests.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15.jar" sourcepath="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
- <classpathentry kind="src" path="/pluggable-instrumentor"/>
- <classpathentry kind="var" path="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1.jar" sourcepath="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0/stax-api-1.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/trove/trove/2.1.1/trove-2.1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
-</classpath>
\ No newline at end of file
+ <classpathentry excluding="**/*.java" including="jbossorg-eula.txt" kind="src" path="src/etc"/>
+ <classpathentry kind="src" path="src/main"/>
+ <classpathentry excluding="org/jboss/test/aop/classpool/support/" kind="src" output="target/test-classes" path="src/tests"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.0.2/activation-1.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-junit/1.7.0/ant-junit-1.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/bcel/bcel/5.1/bcel-5.1.jar" sourcepath="M2_REPO/bcel/bcel/5.1/bcel-5.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1.jar" sourcepath="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/urbanophile/java-getopt/1.0.9/java-getopt-1.0.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4.jar" sourcepath="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4-sources.jar"/>
+ <classpathentry kind="src" path="/jboss-aop"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-tests.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-server-manager/0.1.1.GA/jboss-server-manager-0.1.1.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA.jar" sourcepath="M2_REPO/org/jboss/test/jboss-test/1.1.1.GA/jboss-test-1.1.1.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15.jar" sourcepath="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/apache-log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
+ <classpathentry kind="src" path="/pluggable-instrumentor"/>
+ <classpathentry kind="var" path="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1.jar" sourcepath="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0/stax-api-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/trove/trove/2.1.1/trove-2.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Modified: projects/aop/trunk/asintegration-core/pom.xml
===================================================================
--- projects/aop/trunk/asintegration-core/pom.xml 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/pom.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -49,18 +49,41 @@
<exclude>org/jboss/test/aop/classpool/support/b/B.class</exclude>
</excludes>
</configuration>
- <!-- fileSets>
- <fileSet>
- <directory>target/test-classes</directory>
- <outputDirectory>/</outputDirectory>
- <excludes>
- <exclude>org/jboss/test/aop/classpool/support/a/A.class</exclude>
- <exclude>org/jboss/test/aop/classpool/support/b/B.class</exclude>
- </excludes>
- </fileSet>
- </fileSets -->
-
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2</version>
+ <executions>
+ <execution>
+ <id>test-classpool-a</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-a.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test-classpool-b</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-b.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/AbstractIsLocalResourcePlugin.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -21,6 +21,10 @@
*/
package org.jboss.aop.classpool;
+import java.net.URL;
+
+import javassist.ClassPool;
+
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -28,18 +32,46 @@
*/
public abstract class AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
{
- private final DelegatingClassPool pool;
+ private final BaseClassPool pool;
- public AbstractIsLocalResourcePlugin(DelegatingClassPool pool)
+ public AbstractIsLocalResourcePlugin(BaseClassPool pool)
{
this.pool = pool;
initialise();
}
- protected abstract void initialise();
+ protected void initialise()
+ {
+
+ }
- protected DelegatingClassPool getPool()
+ protected BaseClassPool getPool()
{
return pool;
}
+
+ /**
+ * Checks if the resource can be found in the parent classpool's loader
+ * and returns true if it either does not exist in the parent or if
+ * the parent has a different URL for the resource
+ */
+ protected boolean isSameInParent(String classResourceName, URL foundURL)
+ {
+ ClassPool parent = pool.getParent();
+ if (parent != null)
+ {
+ ClassLoader parentLoader = parent.getClassLoader();
+ URL parentURL = parentLoader.getResource(classResourceName);
+ if (parentURL == null)
+ {
+ return false;
+ }
+ if (parentURL.equals(foundURL))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
}
Added: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java (rev 0)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/BaseClassPool.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,119 @@
+/*
+* 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.aop.classpool;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+/**
+ * Intermediate class containing commonly needed functionality for the new classpools. I don't want to
+ * modify AOPClassPool too much
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class BaseClassPool extends AOPClassPool
+{
+ private IsLocalResourcePlugin isLocalResourcePlugin;
+
+ public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
+ {
+ super(cl, parent, repository);
+ isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
+
+ }
+
+ public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, Class<? extends AOPCLassPoolSearchStrategy> searchStrategy)
+ {
+ super(cl, parent, repository, searchStrategy);
+ isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
+ }
+
+ /**
+ * Make createCtClass public so that we can override it
+ */
+ @Override
+ public CtClass createCtClass(String classname, boolean useCache)
+ {
+ return super.createCtClass(classname, useCache);
+ }
+
+ @Override
+ public void cacheCtClass(String classname, CtClass c, boolean dynamic)
+ {
+ super.cacheCtClass(classname, c, dynamic);
+ }
+
+ protected CtClass createParentCtClass(String classname, boolean useCache)
+ {
+
+ CtClass clazz = null;
+ if (parent != null)
+ {
+ //Make parent create class
+ if (parent instanceof BaseClassPool)
+ {
+ clazz = ((BaseClassPool)parent).createCtClass(classname, useCache);
+ }
+ else
+ {
+ try
+ {
+ clazz = parent.get(classname);
+ }
+ catch (NotFoundException e)
+ {
+ }
+ }
+ }
+
+ if (clazz != null)
+ {
+ ClassPool pool = clazz.getClassPool();
+ if (pool instanceof BaseClassPool)
+ {
+ ((BaseClassPool)pool).cacheCtClass(classname, clazz, false);
+ }
+ }
+ return clazz;
+ }
+
+ public ClassPool getParent()
+ {
+ return parent;
+ }
+
+ @Override
+ public boolean isLocalClassLoaderResource(String classResourceName)
+ {
+ return isLocalResourcePlugin.isMyResource(classResourceName);
+ }
+
+ public boolean isLocalClassLoaderClass(String classname)
+ {
+ return isLocalResourcePlugin.isMyResource(getResourceName(classname));
+ }
+
+
+}
Added: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java (rev 0)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/ClassPoolDomainRegistry.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,53 @@
+/*
+* 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.aop.classpool;
+
+import java.util.Map;
+import java.util.WeakHashMap;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassPoolDomainRegistry
+{
+ final static ClassPoolDomainRegistry INSTANCE = new ClassPoolDomainRegistry();
+
+ final Map<Object, ClassPoolDomain> domains = new WeakHashMap<Object, ClassPoolDomain>();
+
+ public static ClassPoolDomainRegistry getInstance()
+ {
+ return INSTANCE;
+ }
+
+ public ClassPoolDomain getDomain(Object key)
+ {
+ return domains.get(key);
+ }
+
+ public void addClassPoolDomain(Object key, ClassPoolDomain domain)
+ {
+ domains.put(key, domain);
+ }
+
+}
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePlugin.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -28,16 +28,11 @@
*/
public class DefaultClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
{
- public DefaultClassLoaderIsLocalResourcePlugin(DelegatingClassPool pool)
+ public DefaultClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
{
super(pool);
}
- @Override
- protected void initialise()
- {
- }
-
public boolean isMyResource(String resourceName)
{
return getPool().getClassLoader().getResource(resourceName) != null;
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -29,7 +29,7 @@
public class DefaultClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
{
- public IsLocalResourcePlugin create(DelegatingClassPool pool)
+ public IsLocalResourcePlugin create(BaseClassPool pool)
{
return new DefaultClassLoaderIsLocalResourcePlugin(pool);
}
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/DelegatingClassPool.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -21,8 +21,7 @@
*/
package org.jboss.aop.classpool;
-import java.net.URL;
-
+import javassist.ClassPool;
import javassist.CtClass;
import javassist.NotFoundException;
import javassist.scopedpool.ScopedClassPoolRepository;
@@ -30,11 +29,12 @@
import org.jboss.logging.Logger;
/**
+ * Base class for classpools backed by a domain
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class DelegatingClassPool extends AOPClassPool //TODO It would be great not to have this redundant code
+public class DelegatingClassPool extends BaseClassPool
{
private final static Logger logger = Logger.getLogger(DelegatingClassPool.class);
private final ClassPoolDomain domain;
@@ -43,22 +43,18 @@
private boolean closed;
- private IsLocalResourcePlugin isLocalResourcePlugin;
-
- public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ScopedClassPoolRepository repository, boolean isTemp)
+ public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, boolean isTemp)
{
- super(cl, null, repository);
+ super(cl, parent, repository);
this.domain = domain;
domain.addClassPool(this);
- isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
}
- protected DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ScopedClassPoolRepository repository)
+ protected DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
{
- super(cl, null, repository);
+ super(cl, parent, repository);
this.domain = domain;
domain.addClassPool(this);
- isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
}
public CtClass get(String classname) throws NotFoundException
@@ -152,17 +148,43 @@
Object o = generatedClasses.get(classname);
if (o == null && isInitiatingPool)
{
- return domain.getCached(this, classname);
+ clazz = domain.getCached(this, classname);
+ if (clazz != null)
+ {
+ return clazz;
+ }
}
}
}
- // *NOTE* NEED TO TEST WHEN SUPERCLASS IS IN ANOTHER UCL!!!!!!
+
+ return getCachedFromParent(classname);
+ }
+
+ private CtClass getCachedFromParent(String classname)
+ {
+ if (parent != null)
+ {
+ if (parent instanceof AOPClassPool)
+ {
+ return ((AOPClassPool)parent).getCached(classname);
+ }
+ else
+ {
+ try
+ {
+ return parent.get(classname);
+ }
+ catch (NotFoundException e)
+ {
+ }
+ }
+ }
+
return null;
}
-
@Override
- protected CtClass createCtClass(String classname, boolean useCache)
+ public CtClass createCtClass(String classname, boolean useCache)
{
return createCtClass(true, classname, useCache);
}
@@ -172,8 +194,6 @@
CtClass clazz = null;
if (isLocalResource(classname))
{
- URL classUrl = find(classname);
-
boolean create = true;
if (domain.isParentFirst())
{
@@ -202,8 +222,13 @@
}
if (clazz == null && isInitiatingPool)
{
- return domain.createCtClass(this, classname, useCache);
+ clazz = domain.createCtClass(this, classname, useCache);
}
+
+ if (clazz == null)
+ {
+ clazz = createParentCtClass(classname, useCache);
+ }
return clazz;
}
@@ -215,17 +240,6 @@
}
@Override
- public boolean isLocalClassLoaderResource(String classResourceName)
- {
- return isLocalResourcePlugin.isMyResource(classResourceName);
- }
-
- public boolean isLocalClassLoaderClass(String classname)
- {
- return isLocalResourcePlugin.isMyResource(getResourceName(classname));
- }
-
- @Override
public String toString()
{
return super.toString() + " domain: " + domain;
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/IsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/IsLocalResourcePluginFactory.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/IsLocalResourcePluginFactory.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -28,5 +28,5 @@
*/
public interface IsLocalResourcePluginFactory
{
- IsLocalResourcePlugin create(DelegatingClassPool pool);
+ IsLocalResourcePlugin create(BaseClassPool pool);
}
Added: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java (rev 0)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/NonDelegatingClassPool.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,106 @@
+/*
+* 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.aop.classpool;
+
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+/**
+ * ClassPool for class loaders not backed by a repository/classloading domain
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class NonDelegatingClassPool extends BaseClassPool
+{
+ public NonDelegatingClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean parentFirst)
+ {
+ super(cl, src, repository, AOPClassPool.SEARCH_LOCAL_ONLY_STRATEGY);
+ super.childFirstLookup = !parentFirst;
+ }
+
+// /**
+// * Overrides ClassPool.get0() so that we can look up classes without caching them in the initiating pool.
+// * The DelgatingClassPool + ClassPoolDomain handle the caching in the correct pool + handles the
+// * parentFirst functionality
+// */
+// @Override
+// protected synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
+// {
+// CtClass clazz = null;
+// if (useCache)
+// {
+// clazz = getCached(classname);
+// if (!childFirstLookup && clazz != null)
+// {
+// return clazz;
+// }
+// }
+//
+// boolean attemptCreate = false;
+// if (clazz == null)
+// {
+// attemptCreate = true;
+// }
+// else if (clazz != null && clazz.getClassPool() != this && childFirstLookup && isLocalResource(classname))
+// {
+// attemptCreate = true;
+// }
+//
+// if (attemptCreate)
+// {
+// CtClass clazz2 = createCtClass(classname, useCache);
+// if (clazz2 != null)
+// {
+// clazz = clazz2;
+// }
+// }
+// return clazz;
+// }
+
+ @Override
+ public CtClass createCtClass(String classname, boolean useCache)
+ {
+ CtClass clazz = null;
+ if (!childFirstLookup)
+ {
+ clazz = createParentCtClass(classname, useCache);
+ }
+ if (clazz == null)
+ {
+// String resName = getResourceName(classname);
+ if (isLocalResource(classname))
+ {
+ clazz = super.createCtClass(classname, useCache);
+ }
+ }
+ if (childFirstLookup && clazz == null)
+ {
+ clazz = createParentCtClass(classname, useCache);
+ }
+
+ return clazz;
+ }
+}
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -21,6 +21,8 @@
*/
package org.jboss.aop.classpool;
+import java.net.URL;
+
import org.jboss.util.loading.Translatable;
/**
@@ -30,17 +32,11 @@
*/
public class TranslatableClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin
{
- public TranslatableClassLoaderIsLocalResourcePlugin(DelegatingClassPool pool)
+ public TranslatableClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
{
- // FIXME TranslatableClassLoaderParentResourcePlugin constructor
super(pool);
}
- @Override
- protected void initialise()
- {
- }
-
public boolean isMyResource(String resourceName)
{
ClassLoader loader = getPool().getClassLoader();
@@ -48,7 +44,16 @@
{
throw new IllegalStateException("ClassLoader is not instance of Translatable " + loader);
}
- return ((Translatable)getPool().getClassLoader()).getResourceLocally(resourceName) != null;
+ URL url = ((Translatable)getPool().getClassLoader()).getResourceLocally(resourceName);
+ if (url == null)
+ {
+ return false;
+ }
+ if (isSameInParent(resourceName, url))
+ {
+ return false;
+ }
+ return true;
}
}
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -28,7 +28,7 @@
*/
public class TranslatableClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
{
- public IsLocalResourcePlugin create(DelegatingClassPool pool)
+ public IsLocalResourcePlugin create(BaseClassPool pool)
{
return new TranslatableClassLoaderIsLocalResourcePlugin(pool);
}
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePlugin.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -24,6 +24,8 @@
import java.net.URL;
import java.net.URLClassLoader;
+import javassist.ClassPool;
+
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -31,43 +33,37 @@
*/
public class URLClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin
{
- String[] urls;
- public URLClassLoaderIsLocalResourcePlugin(DelegatingClassPool pool)
+ public URLClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
{
- // FIXME URLClassLoaderParentResourcePlugin constructor
super(pool);
}
- public boolean isMyResource(String resourceName)
+ public boolean isMyResource(String classResourceName)
{
- URL url = getPool().getClassLoader().getResource(resourceName);
- if (url != null)
+ //TODO This should be moved into URLClassLoaderIsLocalResourcePlugin, and the -core tests should be updated to
+ //not use the same urls
+ ClassLoader myLoader = getPool().getClassLoader();
+ URL myURL = myLoader.getResource(classResourceName);
+ if (myURL == null)
{
- String urlString = url.toString();
- for (String s : urls)
+ return false;
+ }
+
+ ClassPool parent = getPool().getParent();
+ if (parent != null)
+ {
+ ClassLoader parentLoader = parent.getClassLoader();
+ URL parentURL = parentLoader.getResource(classResourceName);
+ if (parentURL == null)
{
- if (urlString.contains(s))
- {
- return true;
- }
+ return true;
}
+ if (!parentURL.equals(myURL))
+ {
+ return true;
+ }
}
+
return false;
}
-
- @Override
- protected void initialise()
- {
- ClassLoader loader = getPool().getClassLoader();
- if (loader instanceof URLClassLoader == false)
- {
- throw new IllegalStateException("Not a URLClassLoader " + loader);
- }
- URL[] loaderUrls = ((URLClassLoader)loader).getURLs();
- urls = new String[loaderUrls.length];
- for (int i = 0 ; i < loaderUrls.length ; i++)
- {
- urls[i] = loaderUrls[i].toString();
- }
- }
}
Modified: projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/main/org/jboss/aop/classpool/URLClassLoaderIsLocalResourcePluginFactory.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -29,7 +29,7 @@
public class URLClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
{
- public IsLocalResourcePlugin create(DelegatingClassPool pool)
+ public IsLocalResourcePlugin create(BaseClassPool pool)
{
return new URLClassLoaderIsLocalResourcePlugin(pool);
}
Modified: projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/ClassPoolTest.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -27,6 +27,8 @@
import java.util.ArrayList;
import java.util.List;
+import javassist.ClassPool;
+
import org.jboss.aop.classpool.AOPClassPoolRepository;
import org.jboss.aop.classpool.ClassPoolDomain;
import org.jboss.aop.classpool.DelegatingClassPool;
@@ -102,7 +104,7 @@
//Once all the classes in the loader have been loaded, it seems to clear the URLs. Work around this
//by recreating the loader since we need the urls in the URLClassLoaderIsLocalResourcePlugin
loaders.add(new URLClassLoader(urls));
- return new DelegatingClassPool(domain, loader, AOPClassPoolRepository.getInstance(), false);
+ return new DelegatingClassPool(domain, loader, ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
}
@Override
Modified: projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-core/src/tests/org/jboss/test/aop/classpool/test/IsLocalResourcePluginFactoryTestCase.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -25,6 +25,8 @@
import java.net.URL;
import java.net.URLClassLoader;
+import javassist.ClassPool;
+
import org.jboss.aop.classpool.AOPClassPoolRepository;
import org.jboss.aop.classpool.ClassPoolDomain;
import org.jboss.aop.classpool.DefaultClassLoaderIsLocalResourcePlugin;
@@ -76,37 +78,37 @@
public void testDefaultClassLoader()
{
- DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new DefaultClassLoader(), AOPClassPoolRepository.getInstance(), false);
+ DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new DefaultClassLoader(), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
assertFactoryAndPlugin(pool, DefaultClassLoaderIsLocalResourcePluginFactory.class, DefaultClassLoaderIsLocalResourcePlugin.class);
}
public void testURLClassLoaderDirect()
{
- DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLClassLoader(URLS), AOPClassPoolRepository.getInstance(), false);
+ DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLClassLoader(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
assertFactoryAndPlugin(pool, URLClassLoaderIsLocalResourcePluginFactory.class, URLClassLoaderIsLocalResourcePlugin.class);
}
public void testURLClassLoaderSubClass()
{
- DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLCLassLoaderSubClass(URLS), AOPClassPoolRepository.getInstance(), false);
+ DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new URLCLassLoaderSubClass(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
assertFactoryAndPlugin(pool, URLClassLoaderIsLocalResourcePluginFactory.class, URLClassLoaderIsLocalResourcePlugin.class);
}
public void testTranslatableClassLoaderImplementation()
{
- DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementation(), AOPClassPoolRepository.getInstance(), false);
+ DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementation(), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
assertFactoryAndPlugin(pool, TranslatableClassLoaderIsLocalResourcePluginFactory.class, TranslatableClassLoaderIsLocalResourcePlugin.class);
}
public void testTranslatableClassLoaderImplementationAndURLClassLoaderSubClass()
{
- DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementationAndURLClassLoaderSubClass(URLS), AOPClassPoolRepository.getInstance(), false);
+ DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new TranslatableImplementationAndURLClassLoaderSubClass(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
assertFactoryAndPlugin(pool, TranslatableClassLoaderIsLocalResourcePluginFactory.class, TranslatableClassLoaderIsLocalResourcePlugin.class);
}
public void testTranslatable2ClassLoaderImplementationAndURLClassLoaderSubClass()
{
- DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new Translatable2ImplementationAndURLClassLoaderSubClass(URLS), AOPClassPoolRepository.getInstance(), false);
+ DelegatingClassPool pool = new DelegatingClassPool(DOMAIN, new Translatable2ImplementationAndURLClassLoaderSubClass(URLS), ClassPool.getDefault(), AOPClassPoolRepository.getInstance(), false);
assertFactoryAndPlugin(pool, TranslatableClassLoaderIsLocalResourcePluginFactory.class, TranslatableClassLoaderIsLocalResourcePlugin.class);
}
Modified: projects/aop/trunk/asintegration-jmx/.classpath
===================================================================
--- projects/aop/trunk/asintegration-jmx/.classpath 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-jmx/.classpath 2008-10-30 17:43:34 UTC (rev 80274)
@@ -1,62 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
<classpath>
- <classpathentry kind="src" path="src/etc" including="jbossorg-eula.txt" excluding="**/*.java"/>
- <classpathentry kind="src" path="src/main"/>
- <classpathentry kind="output" path="target/classes"/>
- <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
- <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.0.2/activation-1.0.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/bcel/bcel/5.1/bcel-5.1.jar" sourcepath="M2_REPO/bcel/bcel/5.1/bcel-5.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
- <classpathentry kind="var" path="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1.jar" sourcepath="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/urbanophile/java-getopt/1.0.9/java-getopt-1.0.9.jar"/>
- <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4.jar" sourcepath="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4-sources.jar"/>
- <classpathentry kind="src" path="/jboss-aop"/>
- <classpathentry kind="src" path="/jboss-aop-asintegration-core"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-tests.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15.jar" sourcepath="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
- <classpathentry kind="src" path="/pluggable-instrumentor"/>
- <classpathentry kind="var" path="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1.jar" sourcepath="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1-sources.jar"/>
- <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0/stax-api-1.0.jar"/>
- <classpathentry kind="var" path="M2_REPO/trove/trove/2.1.1/trove-2.1.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
- <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
-</classpath>
\ No newline at end of file
+ <classpathentry excluding="**/*.java" including="jbossorg-eula.txt" kind="src" path="src/etc"/>
+ <classpathentry excluding="org/jboss/test/aop/classpool/ucl/support/a/|org/jboss/test/aop/classpool/ucl/support/b/|org/jboss/test/aop/classpool/ucl/support/c/" kind="src" path="src/tests"/>
+ <classpathentry kind="src" path="src/main"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="var" path="M2_REPO/javax/activation/activation/1.0.2/activation-1.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant/1.7.0/ant-1.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/ant/ant-launcher/1.7.0/ant-launcher-1.7.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/bcel/bcel/5.1/bcel-5.1.jar" sourcepath="M2_REPO/bcel/bcel/5.1/bcel-5.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/apache-httpclient/commons-httpclient/2.0.2/commons-httpclient-2.0.2.jar"/>
+ <classpathentry kind="var" path="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1.jar" sourcepath="M2_REPO/oswego-concurrent/concurrent/1.3.4-jboss-update1/concurrent-1.3.4-jboss-update1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar" sourcepath="M2_REPO/dom4j/dom4j/1.6.1/dom4j-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/wutka-dtdparser/dtdparser121/1.2.1/dtdparser121-1.2.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/urbanophile/java-getopt/1.0.9/java-getopt-1.0.9.jar"/>
+ <classpathentry kind="var" path="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA.jar" sourcepath="M2_REPO/javassist/javassist/3.9.0.GA/javassist-3.9.0.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4.jar" sourcepath="M2_REPO/sun-jaxb/jaxb-api/2.1.4/jaxb-api-2.1.4-sources.jar"/>
+ <classpathentry kind="src" path="/jboss-aop"/>
+ <classpathentry kind="src" path="/jboss-aop-asintegration-core"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-aop-mc-int/2.0.0.CR1/jboss-aop-mc-int-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-bootstrap/5.0.0.CR2/jboss-as-bootstrap-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-j2se/5.0.0.CR2/jboss-as-j2se-5.0.0.CR2-tests.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-jmx/5.0.0.CR2/jboss-as-jmx-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-main/5.0.0.CR2/jboss-as-main-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-mbeans/5.0.0.CR2/jboss-as-mbeans-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system/5.0.0.CR2/jboss-as-system-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/jbossas/jboss-as-system-jmx/5.0.0.CR2/jboss-as-system-jmx-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloader/2.0.0.CR3/jboss-classloader-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading/2.0.0.CR3/jboss-classloading-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/integration/jboss-classloading-spi/5.0.0.CR2/jboss-classloading-spi-5.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/cl/jboss-classloading-vfs/2.0.0.CR3/jboss-classloading-vfs-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA.jar" sourcepath="M2_REPO/org/jboss/jboss-common-core/2.2.8.GA/jboss-common-core-2.2.8.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-dependency/2.0.0.CR1/jboss-dependency-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client/2.0.0.CR2/jboss-deployers-client-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-client-spi/2.0.0.CR2/jboss-deployers-client-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core/2.0.0.CR2/jboss-deployers-core-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-core-spi/2.0.0.CR2/jboss-deployers-core-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-impl/2.0.0.CR2/jboss-deployers-impl-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-spi/2.0.0.CR2/jboss-deployers-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-structure-spi/2.0.0.CR2/jboss-deployers-structure-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs/2.0.0.CR2/jboss-deployers-vfs-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2.jar" sourcepath="M2_REPO/org/jboss/deployers/jboss-deployers-vfs-spi/2.0.0.CR2/jboss-deployers-vfs-spi-2.0.0.CR2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/microcontainer/jboss-kernel/2.0.0.CR1/jboss-kernel-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-log4j/2.0.5.GA/jboss-logging-log4j-2.0.5.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA.jar" sourcepath="M2_REPO/org/jboss/logging/jboss-logging-spi/2.0.5.GA/jboss-logging-spi-2.0.5.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-managed/2.0.0.CR1/jboss-managed-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3.jar" sourcepath="M2_REPO/org/jboss/jboss-mdr/2.0.0.CR3/jboss-mdr-2.0.0.CR3-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/man/jboss-metatype/2.0.0.CR1/jboss-metatype-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jboss/profiler/jvmti/jboss-profiler-jvmti/1.0.0.CR5/jboss-profiler-jvmti-1.0.0.CR5.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-reflect/2.0.0.CR1/jboss-reflect-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA.jar" sourcepath="M2_REPO/jboss/jboss-test/1.0.3.GA/jboss-test-1.0.3.GA-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1.jar" sourcepath="M2_REPO/org/jboss/jboss-vfs/2.0.0.CR1/jboss-vfs-2.0.0.CR1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15.jar" sourcepath="M2_REPO/org/jboss/jbossxb/2.0.0.CR15/jbossxb-2.0.0.CR15-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar" sourcepath="M2_REPO/junit/junit/3.8.1/junit-3.8.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14.jar" sourcepath="M2_REPO/log4j/log4j/1.2.14/log4j-1.2.14-sources.jar"/>
+ <classpathentry kind="src" path="/pluggable-instrumentor"/>
+ <classpathentry kind="var" path="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1.jar" sourcepath="M2_REPO/qdox/qdox/1.6.1/qdox-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0/stax-api-1.0.jar"/>
+ <classpathentry kind="var" path="M2_REPO/trove/trove/2.1.1/trove-2.1.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/apache-xerces/xercesImpl/2.9.1/xercesImpl-2.9.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/apache-xerces/xml-apis/2.9.1/xml-apis-2.9.1.jar"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
Modified: projects/aop/trunk/asintegration-jmx/pom.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/pom.xml 2008-10-30 17:40:22 UTC (rev 80273)
+++ projects/aop/trunk/asintegration-jmx/pom.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -43,6 +43,13 @@
</goals>
</execution>
</executions>
+ <configuration>
+ <excludes>
+ <exclude>org/jboss/test/aop/classpool/ucl/support/a/A.class</exclude>
+ <exclude>org/jboss/test/aop/classpool/ucl/support/b/B.class</exclude>
+ <exclude>org/jboss/test/aop/classpool/ucl/support/c/C.class</exclude>
+ </excludes>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -54,6 +61,91 @@
<skip>true</skip>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2-beta-2</version>
+ <executions>
+ <execution>
+ <id>test-classpool-a1</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-a1.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test-classpool-a2</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-a2.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test-classpool-b1</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-b1.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test-classpool-b2</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-b2.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test-classpool-c1</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-c1.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ <execution>
+ <id>test-classpool-c2</id>
+ <phase>package</phase>
+ <goals>
+ <goal>attached</goal>
+ </goals>
+ <configuration>
+ <descriptors>
+ <descriptor>src/assembly/test-classpool-c2.xml</descriptor>
+ </descriptors>
+ <finalName>${artifactId}</finalName>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a1.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+ <id>test-classpool-a1</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/test-classes</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>org/jboss/test/aop/classpool/ucl/support/a/A.class</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-a2.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+ <id>test-classpool-a2</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/test-classes</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>org/jboss/test/aop/classpool/ucl/support/a/A.class</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b1.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+ <id>test-classpool-b1</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/test-classes</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>org/jboss/test/aop/classpool/ucl/support/b/B.class</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-b2.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+ <id>test-classpool-b2</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/test-classes</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>org/jboss/test/aop/classpool/ucl/support/b/B.class</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c1.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+ <id>test-classpool-c1</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/test-classes</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>org/jboss/test/aop/classpool/ucl/support/c/C.class</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/assembly/test-classpool-c2.xml 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,16 @@
+<assembly>
+ <id>test-classpool-c2</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <fileSets>
+ <fileSet>
+ <directory>target/test-classes</directory>
+ <outputDirectory>/</outputDirectory>
+ <includes>
+ <include>org/jboss/test/aop/classpool/ucl/support/c/C.class</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+</assembly>
\ No newline at end of file
Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossClassPathHelper.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,41 @@
+/*
+* 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.aop.classpool.ucl;
+
+import java.io.File;
+import java.net.URL;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossClassPathHelper
+{
+ File tmpDir;
+ URL tmpURL;
+ public JBossClassPathHelper(File tmpDir, URL tmpURL)
+ {
+ this.tmpDir = tmpDir;
+ this.tmpURL = tmpURL;
+ }
+}
Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclClassPoolFactory.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,165 @@
+/*
+* 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.aop.classpool.ucl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.aop.classpool.AbstractJBossClassPoolFactory;
+import org.jboss.aop.classpool.ClassPoolDomain;
+import org.jboss.aop.classpool.ClassPoolDomainRegistry;
+import org.jboss.aop.classpool.NonDelegatingClassPool;
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+import org.jboss.mx.server.ServerConstants;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossUclClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
+{
+ private ClassPoolDomain mainDomain;
+ protected File tmpClassesDir;
+
+ public JBossUclClassPoolFactory(File tmpClassesDir) throws IOException
+ {
+ this.tmpClassesDir = tmpClassesDir;
+ }
+
+ public synchronized ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ ClassPool parent = getCreateParentClassPools(cl, src, repository);
+
+ if (cl instanceof RepositoryClassLoader)
+ {
+ ClassPoolDomain domain = getDomain((RepositoryClassLoader)cl);
+
+ File tempdir = getTempDirectory(cl);
+ URL tmpCP = createURLAndAddToLoader(cl, tempdir);
+
+ return new JBossUclDelegatingClassPool(domain, cl, parent, repository, tempdir, tmpCP);
+ }
+
+ return new NonDelegatingClassPool(cl, parent, repository, true);
+ }
+
+ private ClassPoolDomain getDomain(RepositoryClassLoader cl)
+ {
+ LoaderRepository loaderRepository = cl.getLoaderRepository();
+ ClassPoolDomainRegistry registry = ClassPoolDomainRegistry.getInstance();
+ ClassPoolDomain domain = registry.getDomain(loaderRepository);
+ if (domain == null)
+ {
+ if (loaderRepository instanceof HeirarchicalLoaderRepository3)
+ {
+
+ domain = new UclClassPoolDomain("Scoped" + System.identityHashCode(loaderRepository), mainDomain);
+ boolean parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
+ domain.setParentFirst(parentFirst);
+ }
+ else
+ {
+ if (mainDomain == null)
+ {
+ domain = new UclClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null);
+ mainDomain = domain;
+ }
+ else
+ {
+ domain = mainDomain;
+ }
+ registry.addClassPoolDomain(loaderRepository, domain);
+ }
+ }
+ return domain;
+ }
+
+ protected File getTempDirectory(ClassLoader cl)
+ {
+ File tempdir = null;
+ int attempts = 0;
+ IOException ex = null;
+ while (tempdir == null && attempts < 5)
+ {
+ //Workaround for JBAOP-254, retry a few times
+ try
+ {
+ tempdir = createTempDir(cl);
+ }
+ catch (IOException e)
+ {
+ ex = e;
+ }
+ }
+
+ if (tempdir == null)
+ {
+ throw new RuntimeException("", ex);
+ }
+
+ return tempdir;
+ }
+
+ public File createTempDir(ClassLoader cl) throws IOException
+ {
+ File tempdir = File.createTempFile("ucl", "", tmpClassesDir);
+ tempdir.delete();
+ tempdir.mkdir();
+ tempdir.deleteOnExit();
+
+ return tempdir;
+ }
+
+ private URL createURLAndAddToLoader(ClassLoader cl, File tempdir)
+ {
+ try
+ {
+ URL tmpURL = tempdir.toURL();
+ URL tmpCP = new URL(tmpURL, "?dynamic=true");
+
+ RepositoryClassLoader ucl = (RepositoryClassLoader) cl;
+
+ // We may be undeploying.
+ if (ucl.getLoaderRepository() != null)
+ {
+ ucl.addURL(tmpCP);
+ }
+
+ return tmpCP;
+ }
+ catch(Exception e)
+ {
+ // AutoGenerated
+ throw new RuntimeException(e);
+ }
+ }
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/JBossUclDelegatingClassPool.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,104 @@
+/*
+* 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.aop.classpool.ucl;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.net.URL;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.aop.classpool.ClassPoolDomain;
+import org.jboss.aop.classpool.DelegatingClassPool;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class JBossUclDelegatingClassPool extends DelegatingClassPool
+{
+ File tmpDir;
+ URL tmpURL;
+ // For loadClass tmpdir creation for UCL
+ protected final Object tmplock = new Object();
+
+ public JBossUclDelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent,
+ ScopedClassPoolRepository repository, File tmpDir, URL tmpURL)
+ {
+ super(domain, cl, parent, repository);
+ this.tmpDir = tmpDir;
+ this.tmpURL = tmpURL;
+ }
+
+ public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain)
+ throws CannotCompileException
+ {
+ lockInCache(cc);
+ if (getClassLoader() == null || tmpDir == null)
+ {
+ return super.toClass(cc, loader, domain);
+ }
+ Class<?> dynClass = null;
+ try
+ {
+ File classFile = null;
+ String classFileName = getResourceName(cc.getName());
+ // Write the clas file to the tmpdir
+ synchronized (tmplock)
+ {
+ classFile = new File(tmpDir, classFileName);
+ File pkgDirs = classFile.getParentFile();
+ pkgDirs.mkdirs();
+ FileOutputStream stream = new FileOutputStream(classFile);
+ stream.write(cc.toBytecode());
+ stream.flush();
+ stream.close();
+ classFile.deleteOnExit();
+ }
+ // We have to clear Blacklist caches or the class will never
+ // be found
+ //((UnifiedClassLoader)dcl).clearBlacklists();
+ // To be backward compatible
+ RepositoryClassLoader rcl = (RepositoryClassLoader) getClassLoader();
+ rcl.clearClassBlackList();
+ rcl.clearResourceBlackList();
+
+ // Now load the class through the cl
+ dynClass = getClassLoader().loadClass(cc.getName());
+ }
+ catch (Exception ex)
+ {
+ ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName());
+ cfe.initCause(ex);
+ throw cfe;
+ }
+
+ return dynClass;
+ }
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/main/org/jboss/aop/classpool/ucl/UclClassPoolDomain.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,38 @@
+/*
+* 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.aop.classpool.ucl;
+
+import org.jboss.aop.classpool.ClassPoolDomain;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolDomain extends ClassPoolDomain
+{
+ public UclClassPoolDomain(String domainName, ClassPoolDomain parent)
+ {
+ // FIXME UclClassPoolDomain constructor
+ super(domainName, parent);
+ }
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/ParentLastURLClassLoader.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,82 @@
+/*
+* 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.aop.classpool.ucl.support;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * An attempt to emulate the web classloader with parent last search order in AS
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ParentLastURLClassLoader extends URLClassLoader
+{
+ ClassLoader parent;
+ URLClassLoader delegate;
+
+ public ParentLastURLClassLoader(URL[] urls, ClassLoader parent)
+ {
+ super(urls, parent);
+ delegate = new URLClassLoader(urls);
+ this.parent = parent;
+ }
+
+ @Override
+ public URL findResource(String name)
+ {
+ URL url = delegate.findResource(name);
+ if (url == null && parent instanceof URLClassLoader)
+ {
+ url = ((URLClassLoader)parent).findResource(name);
+ }
+ return url;
+ }
+
+ @Override
+ public URL getResource(String name)
+ {
+ URL url = delegate.getResource(name);
+ if (url == null)
+ {
+ url = parent.getResource(name);
+ }
+ return url;
+ }
+
+ @Override
+ public Class<?> loadClass(String name) throws ClassNotFoundException
+ {
+ try
+ {
+ return delegate.loadClass(name);
+ }
+ catch(ClassNotFoundException e)
+ {
+ }
+ return parent.loadClass(name);
+ }
+
+
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/a/A.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,32 @@
+/*
+* 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.aop.classpool.ucl.support.a;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class A
+{
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/b/B.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,32 @@
+/*
+* 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.aop.classpool.ucl.support.b;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class B
+{
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/support/c/C.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,32 @@
+/*
+* 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.aop.classpool.ucl.support.c;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class C
+{
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassLoaderSanityTestCase.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,328 @@
+/*
+* 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.aop.classpool.ucl.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * This is here to figure out how the UCLs work, and we will duplicate this
+ * in the classpool test
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassLoaderSanityTestCase extends UclClassPoolTest
+{
+ public UclClassLoaderSanityTestCase(String name)
+ {
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite(UclClassLoaderSanityTestCase.class);
+ }
+
+
+ public void testGlobalScope() throws Exception
+ {
+ ClassLoader clA = null;
+ ClassLoader clB = null;
+ try
+ {
+ clA = createGlobalClassLoader(JAR_A_1);
+ clB = createGlobalClassLoader(JAR_B_1);
+ try
+ {
+ Class<?> aFromA = clA.loadClass(CLASS_A);
+ assertNotNull(aFromA);
+ Class<?> bFromA = clA.loadClass(CLASS_B);
+ assertNotNull(bFromA);
+ Class<?> aFromB = clB.loadClass(CLASS_A);
+ Class<?> bFromB = clB.loadClass(CLASS_B);
+ assertSame(aFromA, aFromB);
+ assertSame(bFromA, bFromB);
+ assertSame(clA, aFromA.getClassLoader());
+ assertSame(clB, bFromB.getClassLoader());
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clB);
+ }
+ Class<?> aFromA = clA.loadClass(CLASS_A);
+ assertNotNull(aFromA);
+
+ assertCannotLoadClass(clA, CLASS_B);
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clA);
+ }
+ assertCannotLoadClass(getGlobalRepository(), CLASS_A);
+ }
+
+ public void testChildDomain() throws Exception
+ {
+ ClassLoader clA = null;
+ ClassLoader clB = null;
+ ClassLoader clC = null;
+ try
+ {
+ clA = createGlobalClassLoader(JAR_A_1);
+ clB = createGlobalClassLoader(JAR_B_1);
+ clC = createChildClassLoader(JAR_C_1, false);
+
+ Class<?> aFromA = clA.loadClass(CLASS_A);
+ assertNotNull(aFromA);
+ Class<?> bFromB = clB.loadClass(CLASS_B);
+ assertNotNull(bFromB);
+ Class<?> cFromC = clC.loadClass(CLASS_C);
+ assertNotNull(cFromC);
+ Class<?> aFromC = clC.loadClass(CLASS_A);
+ assertNotNull(aFromC);
+ Class<?> bFromC = clC.loadClass(CLASS_B);
+ assertNotNull(bFromC);
+
+ assertSame(aFromA, aFromC);
+ assertSame(bFromB, bFromC);
+ assertSame(clA, aFromA.getClassLoader());
+ assertSame(clB, bFromB.getClassLoader());
+ assertSame(clC, cFromC.getClassLoader());
+
+ assertCannotLoadClass(clA, CLASS_C);
+ assertCannotLoadClass(clB, CLASS_C);
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clA);
+ removeClassLoaderFromRepository(clB);
+ }
+ }
+
+ public void testSiblingDomains() throws Exception
+ {
+ ClassLoader clA = createChildClassLoader(JAR_A_1, true);
+ ClassLoader clB = createChildClassLoader(JAR_B_1, false);
+
+ Class<?> clazzA = clA.loadClass(CLASS_A);
+ assertSame(clA, clazzA.getClassLoader());
+ Class<?> clazzB = clB.loadClass(CLASS_B);
+ assertSame(clB, clazzB.getClassLoader());
+ assertCannotLoadClass(clA, CLASS_B);
+ assertCannotLoadClass(clB, CLASS_A);
+ }
+
+ public void testChildWithNewClassesInParent() throws Exception
+ {
+ ClassLoader clGlobal = null;
+ ClassLoader clScoped = null;
+ try
+ {
+ clScoped = createChildClassLoader(JAR_B_1, true);
+ assertCannotLoadClass(clScoped, CLASS_A);
+
+ clGlobal = createGlobalClassLoader(JAR_A_1);
+ Class<?> aFromChild = clScoped.loadClass(CLASS_A);
+ assertNotNull(aFromChild);
+ Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
+ assertNotNull(aFromParent);
+ assertSame(aFromChild, aFromParent);
+ assertSame(clGlobal, aFromParent.getClassLoader());
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clGlobal);
+ }
+ }
+
+ public void testChildOverrideWithParentDelegation() throws Exception
+ {
+ ClassLoader clGlobal = null;
+ try
+ {
+ clGlobal = createGlobalClassLoader(JAR_A_1);
+ ClassLoader clScoped = createChildClassLoader(JAR_A_2, true);
+ Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
+ assertNotNull(aFromParent);
+ Class<?> aFromChild = clScoped.loadClass(CLASS_A);
+ assertNotNull(aFromChild);
+ assertSame(aFromParent, aFromChild);
+ assertSame(clGlobal, aFromParent.getClassLoader());
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clGlobal);
+ }
+ }
+
+ public void testChildOverrideWithNoParentDelegation() throws Exception
+ {
+ ClassLoader clGlobal = null;
+ try
+ {
+ clGlobal = createGlobalClassLoader(JAR_A_1);
+ ClassLoader clScoped = createChildClassLoader(JAR_A_2, false);
+ Class<?> aFromParent = clGlobal.loadClass(CLASS_A);
+ assertNotNull(aFromParent);
+ Class<?> aFromChild = clScoped.loadClass(CLASS_A);
+ assertNotNull(aFromChild);
+ assertNotSame(aFromParent, aFromChild);
+ assertSame(clGlobal, aFromParent.getClassLoader());
+ assertSame(clScoped, aFromChild.getClassLoader());
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clGlobal);
+ }
+ }
+
+ public void testURLChildOfGlobalUcl() throws Exception
+ {
+ ClassLoader clGlobal = null;
+ try
+ {
+ clGlobal = createGlobalClassLoader(JAR_A_1);
+ ClassLoader clChildA = createChildURLClassLoader(clGlobal, JAR_B_1);
+
+ Class<?> aFromA = clChildA.loadClass(CLASS_A);
+ assertSame(clGlobal, aFromA.getClassLoader());
+ Class<?> bFromA = clChildA.loadClass(CLASS_B);
+ assertSame(clChildA, bFromA.getClassLoader());
+
+ ClassLoader clChildB = createChildURLClassLoader(clGlobal, JAR_A_2);
+ Class<?> aFromB = clChildB.loadClass(CLASS_A);
+ assertSame(clGlobal, aFromB.getClassLoader());
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clGlobal);
+ }
+ }
+
+ public void testUndeploySibling() throws Exception
+ {
+ ClassLoader clA = null;
+ ClassLoader clB = null;
+ try
+ {
+ try
+ {
+ clA = createGlobalClassLoader(JAR_A_1);
+ assertCannotLoadClass(clA, CLASS_B);
+
+ clB = createGlobalClassLoader(JAR_B_1);
+ Class<?> bFromA = clA.loadClass(CLASS_B);
+ assertSame(clB, bFromA.getClassLoader());
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clB);
+ }
+ assertCannotLoadClass(clA, CLASS_B);
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(clA);
+ }
+ }
+
+
+// public void testUndeployParentDomainClassLoader() throws Exception
+// {
+// ClassLoader globalA = null;
+// ClassLoader globalB = null;
+// ClassLoader child = null;
+// try
+// {
+// try
+// {
+// globalA = createGlobalClassLoader(JAR_A_1);
+// assertCannotLoadClass(globalA, CLASS_B);
+//
+// child = createChildClassLoader(JAR_C_1, true);
+// assertCannotLoadClass(child, CLASS_B);
+//
+// globalB = createGlobalClassLoader(JAR_B_1);
+// Class<?> bFromChild = child.loadClass(CLASS_B);
+// Class<?> bFromA = globalA.loadClass(CLASS_B);
+// assertSame(globalB, bFromA.getClassLoader());
+// assertSame(bFromA, bFromChild);
+// }
+// finally
+// {
+// removeClassLoaderFromRepository(globalB);
+// }
+// assertCannotLoadClass(child, CLASS_B);
+// }
+// finally
+// {
+// removeClassLoaderFromRepository(globalA);
+// }
+// }
+
+ public void testUclWithParentClassLoader() throws Exception
+ {
+ ClassLoader parent = createChildURLClassLoader(null, JAR_B_1);
+ ClassLoader global = null;
+ try
+ {
+ global = createGlobalClassLoaderWithParent(JAR_A_1, parent);
+ Class<?> aFromGlobal = global.loadClass(CLASS_A);
+ assertSame(global, aFromGlobal.getClassLoader());
+ Class<?> bFromGlobal = global.loadClass(CLASS_B);
+ assertSame(parent, bFromGlobal.getClassLoader());
+ Class<?> bFromParent = parent.loadClass(CLASS_B);
+ assertSame(bFromGlobal, bFromParent);
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(global);
+ }
+ }
+
+
+ public void testUclWithParentClassLoaderAndSameClassInDomain() throws Exception
+ {
+ ClassLoader parent = createChildURLClassLoader(null, JAR_B_1);
+ ClassLoader globalA = null;
+ ClassLoader globalB = null;
+ try
+ {
+ globalA = createGlobalClassLoaderWithParent(JAR_A_1, parent);
+ Class<?> aFromGlobal = globalA.loadClass(CLASS_A);
+ assertSame(globalA, aFromGlobal.getClassLoader());
+
+ globalB = createGlobalClassLoader(JAR_B_2);
+ Class<?> bFromGlobalA = globalA.loadClass(CLASS_B);
+ assertSame(globalB, bFromGlobalA.getClassLoader());
+ Class<?> bFromParent = parent.loadClass(CLASS_B);
+ assertSame(parent, bFromParent.getClassLoader());
+ assertNotSame(bFromGlobalA, bFromParent);
+ }
+ finally
+ {
+ removeClassLoaderFromRepository(globalA);
+ removeClassLoaderFromRepository(globalB);
+ }
+ }
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTest.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,275 @@
+/*
+* 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.aop.classpool.ucl.test;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.HashSet;
+import java.util.Set;
+
+import javassist.ClassPool;
+
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
+import javax.management.ObjectName;
+
+import org.jboss.aop.AspectManager;
+import org.jboss.aop.classpool.ucl.JBossUclClassPoolFactory;
+import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
+import org.jboss.mx.loading.LoaderRepository;
+import org.jboss.mx.loading.RepositoryClassLoader;
+import org.jboss.mx.loading.UnifiedClassLoader3;
+import org.jboss.mx.util.MBeanServerLocator;
+import org.jboss.test.AbstractTestCaseWithSetup;
+import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.aop.classpool.ucl.support.ParentLastURLClassLoader;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolTest extends AbstractTestCaseWithSetup
+{
+ public final static URL JAR_A_1 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-a1.jar");
+ public final static URL JAR_A_2 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-a2.jar");
+ public final static URL JAR_B_1 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-b1.jar");
+ public final static URL JAR_B_2 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-b2.jar");
+ public final static URL JAR_C_1 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-c1.jar");
+ public final static URL JAR_C_2 = getURLRelativeToProjectRoot("target/jboss-aop-asintegration-jmx-test-classpool-c2.jar");
+
+ public final static String CLASS_A = "org.jboss.test.aop.classpool.ucl.support.a.A";
+ public final static String CLASS_B = "org.jboss.test.aop.classpool.ucl.support.b.B";
+ public final static String CLASS_C = "org.jboss.test.aop.classpool.ucl.support.c.C";
+
+ private MBeanServer server;
+ private LoaderRepository globalRepository;
+ //Keep a strong reference to the classloaders so that they are not garbage collected
+
+ final static Set<ClassLoader> registeredClassLoaders = new HashSet<ClassLoader>();
+
+ final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
+ static
+ {
+ try
+ {
+ MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
+ AspectManager.setClassPoolFactory(new JBossUclClassPoolFactory(new File(".")));
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public UclClassPoolTest(String name)
+ {
+ super(name);
+ System.setProperty("javax.management.builder.initial", "org.jboss.mx.server.MBeanServerBuilderImpl");
+ server = MBeanServerFactory.createMBeanServer();
+ MBeanServerLocator.setJBoss(server);
+ try
+ {
+ globalRepository = (LoaderRepository)server.invoke(MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
+ }
+ catch(Exception e)
+ {
+
+ }
+ }
+
+ public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+ {
+ return new UclClassPoolTestDelegate(clazz);
+ }
+
+ protected static URL getURLRelativeToProjectRoot(String relativePath)
+ {
+ try
+ {
+ URL url = UclClassPoolTest.class.getProtectionDomain().getCodeSource().getLocation();
+ String location = url.toString();
+ int index = location.lastIndexOf("/asintegration-jmx/") + "/asintegration-jmx/".length();
+ location = location.substring(0, index);
+
+ location = location + relativePath;
+ return new URL(location);
+ }
+ catch (MalformedURLException e)
+ {
+ // AutoGenerated
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ public MBeanServer getServer()
+ {
+ return server;
+ }
+
+
+ public LoaderRepository getGlobalRepository()
+ {
+ return globalRepository;
+ }
+
+ protected ClassLoader createGlobalClassLoader(URL url) throws Exception
+ {
+ ClassLoader cl = globalRepository.newClassLoader(url, true);
+ registeredClassLoaders.add(cl);
+ return cl;
+ }
+
+ protected ClassPool createGlobalClassPool(URL url) throws Exception
+ {
+ ClassLoader loader = createGlobalClassLoader(url);
+ return AspectManager.instance().registerClassLoader(loader);
+ }
+
+ protected ClassLoader createGlobalClassLoaderWithParent(URL url, ClassLoader parent) throws Exception
+ {
+ ClassLoader cl = new UnifiedClassLoader3(url, null, parent, globalRepository);
+ globalRepository.addClassLoader(cl);
+ registeredClassLoaders.add(cl);
+ return cl;
+ }
+
+ protected ClassPool createGlobalClassPoolWithParent(URL url, ClassPool parent) throws Exception
+ {
+ ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
+ ClassLoader loader = createGlobalClassLoaderWithParent(url, parentLoader);
+ return AspectManager.instance().registerClassLoader(loader);
+ }
+
+ protected void removeClassLoaderFromRepository(ClassLoader cl)
+ {
+ if (cl != null)
+ {
+ if (cl instanceof RepositoryClassLoader)
+ {
+ LoaderRepository repository = ((RepositoryClassLoader)cl).getLoaderRepository();
+ repository.removeClassLoader(cl);
+ }
+ }
+ }
+
+ protected void removeClassPool(ClassPool pool)
+ {
+ if (pool != null)
+ {
+ ClassLoader cl = pool.getClassLoader();
+ if (cl != null)
+ {
+ removeClassLoaderFromRepository(cl);
+ AspectManager.instance().unregisterClassLoader(cl);
+ registeredClassLoaders.remove(cl);
+ }
+ }
+ }
+
+ protected void assertCannotLoadClass(ClassLoader cl, String className)
+ {
+ try
+ {
+ cl.loadClass(className);
+ fail("Should not have been able to load " + className);
+ }
+ catch(Exception expected)
+ {
+ }
+ }
+
+ protected void assertCannotLoadCtClass(ClassPool pool, String className)
+ {
+ try
+ {
+ pool.get(className);
+ }
+ catch(Exception e)
+ {
+ }
+ }
+
+ protected void assertCannotLoadClass(LoaderRepository repository, String className)
+ {
+ try
+ {
+ repository.loadClass(className);
+ fail("Should not have been able to load " + className);
+ }
+ catch(Exception expected)
+ {
+ }
+ }
+
+ protected ClassLoader createChildClassLoader(URL url, boolean parentFirst) throws Exception
+ {
+ HeirarchicalLoaderRepository3 repository = new HeirarchicalLoaderRepository3(getServer(), MAIN_LOADER_REPOSITORY_OBJECT_NAME);
+ repository.setUseParentFirst(parentFirst);
+ ClassLoader cl = repository.newClassLoader(url, true);
+ registeredClassLoaders.add(cl);
+ return cl;
+ }
+
+ protected ClassPool createChildClassPool(URL url, boolean parentFirst) throws Exception
+ {
+ ClassLoader loader = createChildClassLoader(url, parentFirst);
+ return AspectManager.instance().registerClassLoader(loader);
+ }
+
+ protected ClassLoader createChildURLClassLoader(ClassLoader parent, URL url)
+ {
+ ClassLoader cl = new URLClassLoader(new URL[] {url}, parent);
+ registeredClassLoaders.add(cl);
+ return cl;
+ }
+
+ protected ClassLoader createChildURLClassLoaderParentLast(ClassLoader parent, URL url)
+ {
+ ClassLoader cl = new ParentLastURLClassLoader(new URL[] {url}, parent);
+ registeredClassLoaders.add(cl);
+ return cl;
+ }
+
+ protected ClassPool createChildURLClassPool(ClassPool parent, URL url)
+ {
+ ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
+ ClassLoader cl = createChildURLClassLoader(parentLoader, url);
+ registeredClassLoaders.add(cl);
+ return AspectManager.instance().registerClassLoader(cl);
+ }
+
+ protected ClassPool createChildURLClassPoolParentLast(ClassPool parent, URL url)
+ {
+ ClassLoader parentLoader = parent != null ? parent.getClassLoader() : null;
+ ClassLoader cl = createChildURLClassLoaderParentLast(parentLoader, url);
+ registeredClassLoaders.add(cl);
+ ClassPool pool = AspectManager.instance().registerClassLoader(cl);
+ pool.childFirstLookup = true;
+ return pool;
+ }
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestDelegate.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,39 @@
+/*
+* 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.aop.classpool.ucl.test;
+
+import org.jboss.test.AbstractTestDelegate;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolTestDelegate extends AbstractTestDelegate
+{
+
+ public UclClassPoolTestDelegate(Class<?> clazz)
+ {
+ super(clazz);
+ }
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclClassPoolTestSuite.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,51 @@
+/*
+* 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.aop.classpool.ucl.test;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import junit.textui.TestRunner;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclClassPoolTestSuite extends TestSuite
+{
+ public static void main(String[] args)
+ {
+ TestRunner.run(suite());
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite("UclClassPool All Tests");
+
+ suite.addTest(UclClassLoaderSanityTestCase.suite());
+ suite.addTest(UclDelegatingClassPoolTestCase.suite());
+
+
+ return suite;
+ }
+
+}
Added: projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java
===================================================================
--- projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java (rev 0)
+++ projects/aop/trunk/asintegration-jmx/src/tests/org/jboss/test/aop/classpool/ucl/test/UclDelegatingClassPoolTestCase.java 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,605 @@
+/*
+* 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.aop.classpool.ucl.test;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UclDelegatingClassPoolTestCase extends UclClassPoolTest
+{
+
+ public UclDelegatingClassPoolTestCase(String name)
+ {
+ // FIXME SimpleUclDelegatingClassPoolTestCase constructor
+ super(name);
+ }
+
+ public static Test suite()
+ {
+ return new TestSuite(UclDelegatingClassPoolTestCase.class);
+ }
+
+
+ public void testGlobalScope() throws Exception
+ {
+ ClassPool globalA = null;
+ ClassPool globalB = null;
+ try
+ {
+ try
+ {
+ globalA = createGlobalClassPool(JAR_A_1);
+ globalB = createGlobalClassPool(JAR_B_1);
+
+ //Call twice to ensure that we hit the cache as well as creating the CtClases
+ accessGlobalScope(globalA, globalB);
+ accessGlobalScope(globalA, globalB);
+ }
+ finally
+ {
+ removeClassPool(globalA);
+ }
+ assertCannotLoadCtClass(globalB, CLASS_A);
+ }
+ finally
+ {
+ removeClassPool(globalB);
+ }
+ }
+
+ private void accessGlobalScope(ClassPool globalA, ClassPool globalB) throws Exception
+ {
+ CtClass aFromA = globalA.get(CLASS_A);
+ assertNotNull(aFromA);
+ assertEquals(CLASS_A, aFromA.getName());
+ CtClass bFromA = globalA.get(CLASS_B);
+ assertNotNull(bFromA);
+ assertEquals(CLASS_B, bFromA.getName());
+ CtClass aFromB = globalB.get(CLASS_A);
+ assertNotNull(aFromB);
+ assertSame(aFromA, aFromB);
+ CtClass bFromB = globalB.get(CLASS_B);
+ assertNotNull(bFromB);
+ assertSame(bFromA, bFromB);
+ }
+
+ public void testChildDomain() throws Exception
+ {
+ ClassPool poolA = null;
+ ClassPool poolB = null;
+ ClassPool poolC = null;
+ try
+ {
+ poolA = createGlobalClassPool(JAR_A_1);
+ poolB = createGlobalClassPool(JAR_B_1);
+ poolC = createChildClassPool(JAR_C_1, false);
+
+ //Call twice to ensure that we hit the cache as well as creating the CtClases
+ accessChildDomain(poolA, poolB, poolC);
+ accessChildDomain(poolA, poolB, poolC);
+ }
+ finally
+ {
+ removeClassPool(poolA);
+ removeClassPool(poolB);
+ removeClassPool(poolC);
+ }
+ }
+
+ private void accessChildDomain(ClassPool poolA, ClassPool poolB, ClassPool poolC) throws Exception
+ {
+ CtClass aFromA = poolA.get(CLASS_A);
+ assertNotNull(aFromA);
+ CtClass bFromB = poolB.get(CLASS_B);
+ assertNotNull(bFromB);
+ CtClass cFromC = poolC.get(CLASS_C);
+ assertNotNull(cFromC);
+ CtClass aFromC = poolC.get(CLASS_A);
+ assertNotNull(aFromC);
+ CtClass bFromC = poolC.get(CLASS_B);
+ assertNotNull(bFromC);
+
+ assertSame(aFromA, aFromC);
+ assertSame(bFromB, bFromC);
+ assertSame(poolA, aFromA.getClassPool());
+ assertSame(poolB, bFromB.getClassPool());
+ assertSame(poolC, cFromC.getClassPool());
+
+ assertCannotLoadCtClass(poolA, CLASS_C);
+ assertCannotLoadCtClass(poolB, CLASS_C);
+ }
+
+ public void testSiblingDomains() throws Exception
+ {
+ ClassPool poolA = createChildClassPool(JAR_A_1, true);
+ ClassPool poolB = createChildClassPool(JAR_B_1, false);
+
+ try
+ {
+ accessSiblingDomains(poolA, poolB);
+ }
+ finally
+ {
+ removeClassPool(poolA);
+ removeClassPool(poolB);
+ }
+ }
+
+ private void accessSiblingDomains(ClassPool poolA, ClassPool poolB) throws Exception
+ {
+ CtClass clazzA = poolA.get(CLASS_A);
+ assertSame(poolA, clazzA.getClassPool());
+ CtClass clazzB = poolB.get(CLASS_B);
+ assertSame(poolB, clazzB.getClassPool());
+ assertCannotLoadCtClass(poolA, CLASS_B);
+ assertCannotLoadCtClass(poolB, CLASS_A);
+ }
+
+ public void testChildWithNewClassesInParent() throws Exception
+ {
+ ClassPool globalPool = null;
+ ClassPool scopedPool = null;
+ try
+ {
+ scopedPool = createChildClassPool(JAR_B_1, true);
+ assertCannotLoadCtClass(scopedPool, CLASS_A);
+
+ globalPool = createGlobalClassPool(JAR_A_1);
+ CtClass aFromChild = scopedPool.get(CLASS_A);
+ assertNotNull(aFromChild);
+ CtClass aFromParent = globalPool.get(CLASS_A);
+ assertNotNull(aFromParent);
+ assertSame(aFromChild, aFromParent);
+ assertSame(globalPool, aFromParent.getClassPool());
+
+ CtClass aFromChild2 = scopedPool.get(CLASS_A);
+ assertSame(aFromChild, aFromChild2);
+ }
+ finally
+ {
+ removeClassPool(globalPool);
+ removeClassPool(scopedPool);
+ }
+ }
+
+ public void testChildOverrideWithParentDelegation() throws Exception
+ {
+ ClassPool globalPool = null;
+ ClassPool scopedPool = null;
+ try
+ {
+ globalPool = createGlobalClassPool(JAR_A_1);
+ scopedPool = createChildClassPool(JAR_A_2, true);
+ CtClass aFromParent = globalPool.get(CLASS_A);
+ assertNotNull(aFromParent);
+ CtClass aFromChild = scopedPool.get(CLASS_A);
+ assertNotNull(aFromChild);
+ assertSame(aFromParent, aFromChild);
+ assertSame(globalPool, aFromParent.getClassPool());
+ }
+ finally
+ {
+ removeClassPool(globalPool);
+ removeClassPool(scopedPool);
+ }
+ }
+
+ public void testChildOverrideWithNoParentDelegation() throws Exception
+ {
+ ClassPool globalPool = null;
+ ClassPool scopedPool = null;
+ try
+ {
+ globalPool = createGlobalClassPool(JAR_A_1);
+ scopedPool = createChildClassPool(JAR_A_2, false);
+ CtClass aFromParent = globalPool.get(CLASS_A);
+ assertNotNull(aFromParent);
+ CtClass aFromChild = scopedPool.get(CLASS_A);
+ assertNotNull(aFromChild);
+ assertNotSame(aFromParent, aFromChild);
+ assertSame(globalPool, aFromParent.getClassPool());
+ assertSame(scopedPool, aFromChild.getClassPool());
+ }
+ finally
+ {
+ removeClassPool(globalPool);
+ removeClassPool(scopedPool);
+ }
+ }
+
+ public void testURLChildOfGlobalUclParentFirst() throws Exception
+ {
+ ClassPool globalPool = null;
+ ClassPool childA = null;
+ ClassPool childB = null;
+ try
+ {
+ globalPool = createGlobalClassPool(JAR_A_1);
+ childA = createChildURLClassPool(globalPool, JAR_B_1);
+
+ //Try loading A from child first
+ CtClass aFromA = childA.get(CLASS_A);
+ assertSame(globalPool, aFromA.getClassPool());
+
+ //Try loading A from global
+ CtClass aFromGlobal = globalPool.get(CLASS_A);
+ assertSame(aFromA, aFromGlobal);
+
+ //Try loading B from A
+ CtClass bFromA = childA.get(CLASS_B);
+ assertSame(childA, bFromA.getClassPool());
+
+ //Should get the cached copy from the parent
+ childB = createChildURLClassPool(globalPool, JAR_A_2);
+ CtClass aFromB = childB.get(CLASS_A);
+ assertSame(globalPool, aFromB.getClassPool());
+ }
+ finally
+ {
+ removeClassPool(globalPool);
+ removeClassPool(childA);
+ removeClassPool(childB);
+ }
+ }
+
+
+ public void testURLChildOfGlobalUcParentLast() throws Exception
+ {
+ ClassPool globalPool = null;
+ ClassPool childA = null;
+ ClassPool childB = null;
+ try
+ {
+ globalPool = createGlobalClassPool(JAR_A_1);
+ childA = createChildURLClassPoolParentLast(globalPool, JAR_B_1);
+
+ //Try loading A from child first
+ CtClass aFromA = childA.get(CLASS_A);
+ assertSame(globalPool, aFromA.getClassPool());
+
+ //Try loading A from global
+ CtClass aFromGlobal = globalPool.get(CLASS_A);
+ assertSame(aFromA, aFromGlobal);
+
+ //Try loading B from A
+ CtClass bFromA = childA.get(CLASS_B);
+ assertSame(childA, bFromA.getClassPool());
+
+ //Should get the child copy
+ childB = createChildURLClassPoolParentLast(globalPool, JAR_A_2);
+ CtClass aFromB = childB.get(CLASS_A);
+ assertSame(childB, aFromB.getClassPool());
+ }
+ finally
+ {
+ removeClassPool(globalPool);
+ removeClassPool(childA);
+ removeClassPool(childB);
+ }
+ }
+
+ public void testURLChildOfGlobalUclParentFirstWithClassInGlobalSibling() throws Exception
+ {
+ ClassPool globalPoolA = null;
+ ClassPool globalPoolB = null;
+ ClassPool childC = null;
+ ClassPool childB = null;
+ try
+ {
+ globalPoolA = createGlobalClassPool(JAR_A_1);
+ globalPoolB = createGlobalClassPool(JAR_B_1);
+ childC = createChildURLClassPool(globalPoolA, JAR_C_1);
+
+ //Try loading A from child first
+ CtClass bFromC = childC.get(CLASS_B);
+ assertSame(globalPoolB, bFromC.getClassPool());
+
+ //Try loading A from global
+ CtClass bFromGlobalA = globalPoolA.get(CLASS_B);
+ assertSame(bFromC, bFromGlobalA);
+
+ //Try loading B from A
+ CtClass cFromC = childC.get(CLASS_C);
+ assertSame(childC, cFromC.getClassPool());
+
+ //Should get the cached copy from the parent
+ childB = createChildURLClassPool(globalPoolA, JAR_B_2);
+ CtClass bFromB = childB.get(CLASS_B);
+ assertSame(globalPoolB, bFromB.getClassPool());
+ }
+ finally
+ {
+ removeClassPool(globalPoolA);
+ removeClassPool(globalPoolB);
+ removeClassPool(childC);
+ removeClassPool(childB);
+ }
+ }
+
+ public void testUndeploySibling() throws Exception
+ {
+ ClassPool poolA = null;
+ ClassPool poolB = null;
+ try
+ {
+ try
+ {
+ poolA = createGlobalClassPool(JAR_A_1);
+ assertCannotLoadCtClass(poolA, CLASS_B);
+
+ poolB = createGlobalClassPool(JAR_B_1);
+ CtClass bFromA = poolA.get(CLASS_B);
+ assertSame(poolB, bFromA.getClassPool());
+ }
+ finally
+ {
+ removeClassPool(poolB);
+ }
+ assertCannotLoadCtClass(poolA, CLASS_B);
+ }
+ finally
+ {
+ removeClassPool(poolA);
+ removeClassPool(poolB);
+ }
+ }
+
+
+// public void testUndeployParentDomainClassLoader() throws Exception
+// {
+// ClassLoader globalA = null;
+// ClassLoader globalB = null;
+// ClassLoader child = null;
+// try
+// {
+// try
+// {
+// globalA = createGlobalClassLoader(JAR_A_1);
+// assertCannotLoadClass(globalA, CLASS_B);
+//
+// child = createChildClassLoader(JAR_C_1, true);
+// assertCannotLoadClass(child, CLASS_B);
+//
+// globalB = createGlobalClassLoader(JAR_B_1);
+// Class<?> bFromChild = child.loadClass(CLASS_B);
+// Class<?> bFromA = globalA.loadClass(CLASS_B);
+// assertSame(globalB, bFromA.getClassLoader());
+// assertSame(bFromA, bFromChild);
+// }
+// finally
+// {
+// removeClassLoaderFromRepository(globalB);
+// }
+// assertCannotLoadClass(child, CLASS_B);
+// }
+// finally
+// {
+// removeClassLoaderFromRepository(globalA);
+// }
+// }
+
+ public void testUclWithParentClassLoader() throws Exception
+ {
+ ClassPool parent = null;
+ ClassPool global = null;
+ try
+ {
+ parent = createChildURLClassPool(null, JAR_B_1);
+ global = createGlobalClassPoolWithParent(JAR_A_1, parent);
+
+ CtClass aFromGlobal = global.get(CLASS_A);
+ assertSame(global, aFromGlobal.getClassPool());
+ CtClass aFromGlobal2 = global.get(CLASS_A);
+ assertSame(aFromGlobal, aFromGlobal2);
+
+ CtClass bFromGlobal = global.get(CLASS_B);
+ assertSame(parent, bFromGlobal.getClassPool());
+ CtClass bFromGlobal2 = global.get(CLASS_B);
+ assertSame(bFromGlobal, bFromGlobal2);
+
+ CtClass bFromParent = parent.get(CLASS_B);
+ assertSame(parent, bFromParent.getClassPool());
+ assertSame(bFromGlobal, bFromParent);
+ CtClass bFromParent2 = parent.get(CLASS_B);
+ assertSame(bFromParent, bFromParent2);
+ }
+ finally
+ {
+ removeClassPool(global);
+ removeClassPool(parent);
+ }
+ }
+
+ public void testUclWithParentClassLoaderAndSameClassInDomain() throws Exception
+ {
+ ClassPool parent = null;
+ ClassPool globalA = null;
+ ClassPool globalB = null;
+ try
+ {
+ parent = createChildURLClassPool(null, JAR_B_1);
+ globalA = createGlobalClassPoolWithParent(JAR_A_1, parent);
+
+ CtClass aFromGlobal = globalA.get(CLASS_A);
+ assertSame(globalA, aFromGlobal.getClassPool());
+ CtClass aFromGlobal2 = globalA.get(CLASS_A);
+ assertSame(aFromGlobal, aFromGlobal2);
+
+ globalB = createGlobalClassPool(JAR_B_2);
+ CtClass bFromGlobalA = globalA.get(CLASS_B);
+ assertSame(globalB, bFromGlobalA.getClassPool());
+ CtClass bFromGlobalA2 = globalA.get(CLASS_B);
+ assertSame(bFromGlobalA, bFromGlobalA2);
+
+
+ CtClass bFromParent = parent.get(CLASS_B);
+ assertSame(parent, bFromParent.getClassPool());
+ assertNotSame(bFromGlobalA, bFromParent);
+ CtClass bFromParent2 = parent.get(CLASS_B);
+ assertSame(bFromParent, bFromParent2);
+ }
+ finally
+ {
+ removeClassPool(globalA);
+ removeClassPool(globalB);
+ removeClassPool(parent);
+ }
+ }
+
+ public void testGeneratingClassInNonDelegatingPool() throws Exception
+ {
+ ClassPool parent = null;
+ ClassPool global = null;
+ ClassPool child = null;
+ try
+ {
+ final String PARENT = "parent.Parent";
+ final String CHILD = "child.Child";
+ parent = createChildURLClassPool(null, JAR_B_1);
+ global = createGlobalClassPoolWithParent(JAR_A_1, parent);
+ child = createChildURLClassPool(global, JAR_C_1);
+
+ assertCannotLoadCtClass(parent, PARENT);
+ assertCannotLoadCtClass(global, PARENT);
+ assertCannotLoadCtClass(child, PARENT);
+ assertCannotLoadCtClass(child, CHILD);
+
+ CtClass parentClass = parent.makeClass(PARENT);
+
+ CtClass childClass = child.makeClass(CHILD);
+ childClass.setSuperclass(parentClass);
+
+ CtClass parentFromParent = parent.get(PARENT);
+ assertSame(parent, parentFromParent.getClassPool());
+ assertSame(parentClass, parentFromParent);
+
+ CtClass childFromChild = child.get(CHILD);
+ assertSame(child, childFromChild.getClassPool());
+ assertSame(childClass, childFromChild);
+
+ assertCannotLoadCtClass(global, CHILD);
+
+ CtClass parentFromChildA = childClass.getSuperclass();
+ assertSame(parentClass, parentFromChildA);
+
+ CtClass parentFromChildB = child.get(PARENT);
+ assertSame(parentClass, parentFromChildB);
+
+ Class<?> parentClazz = parentClass.toClass();
+ assertSame(parent.getClassLoader(), parentClazz.getClassLoader());
+
+ Class<?> childClazz = childClass.toClass();
+ assertSame(child.getClassLoader(), childClazz.getClassLoader());
+
+ Class<?> parentClazzFromParent = parent.getClassLoader().loadClass(PARENT);
+ assertSame(parentClazz, parentClazzFromParent);
+
+ Class<?> parentClazzFromChild = parent.getClassLoader().loadClass(PARENT);
+ assertSame(parentClazz, parentClazzFromChild);
+
+ Class<?> childClazzFromChild = child.getClassLoader().loadClass(CHILD);
+ assertSame(childClazz, childClazzFromChild);
+ }
+ finally
+ {
+ removeClassPool(parent);
+ removeClassPool(global);
+ removeClassPool(child);
+ }
+ }
+
+
+ public void testGeneratingClassInDelegatingPool() throws Exception
+ {
+ ClassPool globalA = null;
+ ClassPool globalB = null;
+ ClassPool child = null;
+ try
+ {
+ globalA = createGlobalClassPool(JAR_A_1);
+ globalB = createGlobalClassPool(JAR_B_1);
+ child = createChildURLClassPool(globalA, JAR_C_1);
+
+ final String A_CLASS = "a.Clazz";
+ final String B_CLASS = "b.Clazz";
+
+ assertCannotLoadCtClass(globalA, A_CLASS);
+ assertCannotLoadCtClass(globalB, A_CLASS);
+ assertCannotLoadCtClass(child, A_CLASS);
+ assertCannotLoadCtClass(globalA, B_CLASS);
+ assertCannotLoadCtClass(globalB, B_CLASS);
+ assertCannotLoadCtClass(child, B_CLASS);
+
+ CtClass a = globalA.makeClass(A_CLASS);
+ CtClass b = globalB.makeClass(B_CLASS);
+
+ CtClass aFromA = globalA.get(A_CLASS);
+ assertSame(a, aFromA);
+ assertSame(globalA, aFromA.getClassPool());
+ CtClass aFromB = globalB.get(A_CLASS);
+ assertSame(a, aFromB);
+ CtClass bFromA = globalA.get(B_CLASS);
+ assertSame(b, bFromA);
+ assertSame(globalB, bFromA.getClassPool());
+ CtClass bFromB = globalB.get(B_CLASS);
+ assertSame(b, bFromB);
+ CtClass aFromChild = child.get(A_CLASS);
+ assertSame(a, aFromChild);
+ CtClass bFromChild = child.get(B_CLASS);
+ assertSame(b, bFromChild);
+
+ Class<?> clazzA = a.toClass();
+ assertSame(globalA.getClassLoader(), clazzA.getClassLoader());
+
+ Class<?> clazzB = b.toClass();
+ assertSame(globalB.getClassLoader(), clazzB.getClassLoader());
+
+ Class<?> clazzAFromA = globalA.getClassLoader().loadClass(A_CLASS);
+ assertSame(clazzA, clazzAFromA);
+ Class<?> clazzAFromB = globalB.getClassLoader().loadClass(A_CLASS);
+ assertSame(clazzA, clazzAFromB);
+ Class<?> clazzAFromChild = child.getClassLoader().loadClass(A_CLASS);
+ assertSame(clazzA, clazzAFromChild);
+
+ Class<?> clazzBFromA = globalA.getClassLoader().loadClass(B_CLASS);
+ assertSame(clazzB, clazzBFromA);
+ Class<?> clazzBFromB = globalB.getClassLoader().loadClass(B_CLASS);
+ assertSame(clazzB, clazzBFromB);
+ Class<?> clazzBFromChild = child.getClassLoader().loadClass(B_CLASS);
+ assertSame(clazzB, clazzBFromChild);
+ }
+ finally
+ {
+ removeClassPool(globalA);
+ removeClassPool(globalB);
+ removeClassPool(child);
+ }
+ }
+
+}
Added: projects/aop/trunk/build/release.properties
===================================================================
--- projects/aop/trunk/build/release.properties (rev 0)
+++ projects/aop/trunk/build/release.properties 2008-10-30 17:43:34 UTC (rev 80274)
@@ -0,0 +1,7 @@
+#release configuration
+#Thu Oct 16 16:06:44 BST 2008
+preparationGoals=clean verify
+scm.commentPrefix=[maven-release-plugin]
+exec.additionalArguments=-Prelease -P jboss.repository,jboss.repository
+completedPhase=check-poms
+scm.url=scm\:svn\:https\://svn.jboss.org/repos/labs/labs/jbossbuild/jboss-parent/tags/jboss-parent-4/jboss-aop-parent/jboss-aop-dist
More information about the jboss-cvs-commits
mailing list