[jboss-cvs] JBossAS SVN: r92662 - in projects/jboss-classpool/trunk/src: main/java/org/jboss/classpool/base and 18 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Aug 21 08:57:01 EDT 2009
Author: flavia.rainone at jboss.com
Date: 2009-08-21 08:57:00 -0400 (Fri, 21 Aug 2009)
New Revision: 92662
Added:
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassPoolToClassPoolDomainAdaptorFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactoryRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdaptorFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/helpers/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/helpers/ClassLoaderUtils.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepositoryCallback.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossDelegatingClassPool.java
Removed:
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactoryImpl.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossDelegatingClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassLoaderUtils.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepository.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepositoryCallback.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolSearchStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdapter.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdaptorFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassPoolToClassPoolDomainAdaptorFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactoryRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/NonDelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossDelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePlugin.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePluginFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/LoaderRepositoryUrlUtil.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedJBossClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedRepositoryClassLoaderHelper.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvoker.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvokerPoolReference.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/DomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/RegisterModuleCallback.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ScopedJBoss5ClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvoker.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvokerPoolReference.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/VFSClassLoaderDomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPoolFactory.java
Modified:
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPool.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java
projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/SecurityActions.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/common/ClassFactory.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithUsesPackageSanityTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentFirstDelegatingClassPoolTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentLastDelegatingClassPoolTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ScopedSiblingDelegatingClassPoolTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/SimpleDelegatingClassPoolTestCase.java
projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java
Log:
[JBREFLECT-57] Package rearrangement
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,417 +0,0 @@
-package org.jboss.classpool;
-
-import java.util.Iterator;
-import java.util.Map;
-import java.util.WeakHashMap;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPool;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.logging.Logger;
-
-/**
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
- * @version $Revision: 86930 $
- */
-public class AbstractClassPool extends ScopedClassPool
-{
- protected final Logger logger = Logger.getLogger(this.getClass());
-
- /** Classnames of classes that will be created - we do not want to look for these in other pools.
- * The main use for this is when a class is created in a parent pool, and we then want to
- * create a class with the same name in a parent-last child pool. As part of the create process
- * javassist.ClassPool will check if that class is frozen (which in turn will call getCached()
- * and get0()). If the classname exists in this map, get0() and getCached() should return null;
- */
- protected final ConcurrentHashMap<String, String> generatedClasses = new ConcurrentHashMap<String, String>();
-
- protected final ConcurrentHashMap<String, Boolean> localResources = new ConcurrentHashMap<String, Boolean>();
-
- /** Classnames of classes that have been loaded, but were not woven */
- protected final ConcurrentHashMap<String, Boolean> loadedButNotWovenClasses = new ConcurrentHashMap<String, Boolean>();
-
- /** Causes the AbstractClassPool.getCached() method to search all ClassPools registered in the repository */
- public static final Class<SearchAllRegisteredLoadersSearchStrategy> SEARCH_ALL_STRATEGY = SearchAllRegisteredLoadersSearchStrategy.class;
-
- /** Causes the AbstractClassPool.getCached() method to search only itself */
- public static final Class<SearchLocalLoaderLoaderSearchStrategy> SEARCH_LOCAL_ONLY_STRATEGY = SearchLocalLoaderLoaderSearchStrategy.class;
-
- private final ClassPoolSearchStrategy searchStrategy;
-
- private final Map<AbstractClassPool, Boolean> children = new WeakHashMap<AbstractClassPool, Boolean>();
-
- static
- {
- ClassPool.doPruning = false;
- ClassPool.releaseUnmodifiedClassFile = false;
- }
-
- public AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- this(cl, src, repository, false);
- }
-
- protected AbstractClassPool(ClassPool src, ScopedClassPoolRepository repository)
- {
- this(null, src, repository, true);
- }
-
- private AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean isTemp)
- {
- this(cl, src, repository, SEARCH_ALL_STRATEGY, isTemp);
- }
-
- public AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
- {
- this(cl, src, repository, searchStrategy, false);
- }
-
- public AbstractClassPool(ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
- {
- this(null, src, repository, searchStrategy, true);
- }
-
- private AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> 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);
- }
- }
- if (logger.isTraceEnabled()) logger.trace(this + " creating pool for loader " + cl + " searchStrategy:" + this.searchStrategy + " isTemp:" + isTemp);
-
- registerWithParent();
- }
-
- private void registerWithParent()
- {
- if (parent != null && parent instanceof AbstractClassPool)
- {
- ((AbstractClassPool)parent).children.put(this, Boolean.TRUE);
- }
- }
-
- private void unregisterWithParent()
- {
- if (parent != null && parent instanceof AbstractClassPool)
- {
- ((AbstractClassPool)parent).children.remove(this);
- }
- }
-
- public void registerGeneratedClass(String className)
- {
- generatedClasses.put(className, className);
- }
-
- public boolean isGeneratedClass(String className)
- {
- return generatedClasses.containsKey(className);
- }
-
- public void doneGeneratingClass(String className)
- {
- generatedClasses.remove(className);
- }
-
- public void close()
- {
- super.close();
- unregisterWithParent();
- repository.unregisterClassLoader(getClassLoader());
-
- for (Iterator<AbstractClassPool> childIterator = children.keySet().iterator(); childIterator.hasNext();)
- {
- AbstractClassPool child = childIterator.next();
- childIterator.remove();
- if (child.getClassLoader() != null)
- {
- child.close();
- }
- }
-// for (Iterator<AbstractClassPool> it = children.keySet().iterator() ; it.hasNext() ; )
-// {
-// AbstractClassPool child = it.next();
-// it.remove();
-// ClassLoader loader = child.getClassLoader();
-// if (loader != null)
-// {
-// AspectManager.instance().unregisterClassLoader(loader);
-// }
-// }
- }
-
- public CtClass getCached(String classname)
- {
- return searchStrategy.getCached(classname);
- }
-
- /**
- * Make createCtClass public so that we can override it
- */
-// @Override
-// public CtClass createCtClass(String classname, boolean useCache)
-// {
-// boolean trace = logger.isTraceEnabled();
-//
-// if (trace) logger.trace(this + " attempting to create CtClass " + classname);
-// CtClass clazz = super.createCtClass(classname, useCache);
-// if (trace) logger.trace(this + " created CtClass " + getClassPoolLogStringForClass(clazz));
-//
-// return clazz;
-// }
-
- @Override
- public void cacheCtClass(String classname, CtClass c, boolean dynamic)
- {
- boolean trace = logger.isTraceEnabled();
- if (trace) logger.trace(this + " caching " + classname);
- // TODO remove this true when ready
- super.cacheCtClass(classname, c, true);
- if (dynamic)
- {
- if (trace) logger.trace(this + " registering dynamic class " + classname);
- doneGeneratingClass(classname);
- String resourcename = getResourceName(classname);
- localResources.put(resourcename, Boolean.TRUE);
- }
- }
-
- protected boolean includeInGlobalSearch()
- {
- return true;
- }
-
- protected String getResourceName(String classname)
- {
- return ClassLoaderUtils.getResourceName(classname);
- }
-
- protected final boolean isLocalResource(String resourceName, boolean trace)
- {
- String classResourceName = resourceName;
- Boolean isLocal = localResources.get(classResourceName);
- if (isLocal != null)
- {
- if (trace) logger.trace(this + " " + resourceName + " is local " + isLocal);
-
- return isLocal.booleanValue();
- }
- boolean localResource = isLocalClassLoaderResource(classResourceName);
- localResources.put(classResourceName, localResource ? Boolean.TRUE : Boolean.FALSE);
-
- if (trace) logger.trace(this + " " + resourceName + " is local " + localResource);
-
- return localResource;
- }
-
- protected boolean isLocalClassLoaderResource(String classResourceName)
- {
- return getClassLoader().getResource(classResourceName) != null;
- }
-
-// @Override
-// public synchronized CtClass getLocally(String classname)
-// throws NotFoundException
-// {
-// boolean trace = logger.isTraceEnabled();
-// if (trace) logger.trace(this + " attempting local get for " + classname);
-// softcache.remove(classname);
-// CtClass clazz = (CtClass) classes.get(classname);
-// if (trace && clazz != null)
-// {
-// logger.trace(this + " found " + classname + " in cache");
-// }
-// if (clazz == null)
-// {
-// clazz = createCtClass(classname, true);
-// if (clazz == null) throw new NotFoundException(classname);
-// lockInCache(clazz);//Avoid use of the softclasscache
-// }
-//
-// return clazz;
-// }
-
-// @Override
-// protected CtClass getCachedLocally(String classname)
-// {
-// if (logger.isTraceEnabled()) logger.trace(this + " checking local cache for " + classname);
-// return super.getCachedLocally(classname);
-// }
-
-// @Override
-// public void lockInCache(CtClass c)
-// {
-// if (logger.isTraceEnabled()) logger.trace(this + " locking in cache " + c.getName());
-// super.lockInCache(c);
-// }
-
-// public void setClassLoadedButNotWoven(String classname)
-// {
-// loadedButNotWovenClasses.put(classname, Boolean.TRUE);
-// }
-//
-// public boolean isClassLoadedButNotWoven(String classname)
-// {
-// return loadedButNotWovenClasses.get(classname) == Boolean.TRUE;
-// }
-
-// public static AbstractClassPool createAOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
-// {
-// return (AbstractClassPool)AspectManager.getClassPoolFactory().create(cl, src, repository);
-// }
-//
-// public static AbstractClassPool createAOPClassPool(ClassPool src, ScopedClassPoolRepository repository)
-// {
-// return (AbstractClassPool)AspectManager.getClassPoolFactory().create(src, repository);
-// }
-
- public String toString()
- {
- ClassLoader cl = null;
- try
- {
- cl = getClassLoader();
- }
- catch(IllegalStateException ignore)
- {
- }
- return this.getClass().getName() + "@" + System.identityHashCode(this) + " " + super.toString() + " - dcl:" + cl;
- }
-
- /* public CtClass getClass(String classname) {
- CtClass clazz;
- if (classname.charAt(0) == '[')
- {
- try
- {
- return Descriptor.toCtClass(classname, this);
- }
- catch (NotFoundException nfe)
- {
- throw new UnreachableStatementException(nfe.getMessage());
- }
- }
- if (classname == null)
- return null;
- else
- clazz = get0(classname, true);
-
- if (clazz != null)
- {
- //clazz.incGetCounter();
- }
- return clazz;
- }*/
-
-
-// public CtClass internalGet0(String classname, boolean useCache) throws NotFoundException
-// {
-// return super.get0(classname, useCache);
-// }
-
- protected String getClassPoolLogStringForClass(CtClass clazz)
- {
- if (clazz == null)
- {
- return null;
- }
- if (clazz.getClassPool() == null)
- {
- return null;
- }
- return clazz.getClassPool().toString();
- }
-
- /**
- * Contains the original AbstractClassPool.getCached()
- *
- */
- // NOTE: identical to ScopedClassPoolRepository, with two differences:
- // 1. This method uses the shortcuts isLocalResource and getResourceName
- // 2. This method uses the Repository.includeInGlobalSearch method
- private class SearchAllRegisteredLoadersSearchStrategy implements ClassPoolSearchStrategy
- {
- Logger logger = Logger.getLogger(this.getClass());
- public CtClass getCached(String classname)
- {
- boolean trace = logger.isTraceEnabled();
-
- if (trace) logger.trace(this + " " + AbstractClassPool.this + " searching all pools for " + classname);
-
- CtClass clazz = getCachedLocally(classname);
- if (clazz == null && getClassLoader0() != null &&
- !isLocalResource(getResourceName(classname), trace) &&
- !generatedClasses.containsKey(classname))
- {
- Map<ClassLoader, ClassPool> registeredCLs = repository.getRegisteredCLs();
- synchronized (registeredCLs)
- {
- for(ClassPool pl : registeredCLs.values())
- {
- AbstractClassPool pool = (AbstractClassPool) pl;
- if (pool.isUnloadedClassLoader())
- {
- if (trace) logger.trace(this + " pool is unloaded " + pool);
- repository.unregisterClassLoader(pool.getClassLoader());
- continue;
- }
-
- //Do not check classpools for scoped classloaders
- if (!pool.includeInGlobalSearch())
- {
- if (trace) logger.trace(this + " pool is scoped " + pool);
- continue;
- }
-
- if (trace) logger.trace(this + " " + AbstractClassPool.this + " searching for " + classname + " in " + pool);
- clazz = pool.getCachedLocally(classname);
- if (clazz != null)
- {
- break;
- }
- }
- }
- }
- if (trace) logger.trace(this + " " + AbstractClassPool.this + " found " + classname + " in pool" + getClassPoolLogStringForClass(clazz));
- return clazz;
- }
- }
-
- /**
- * Checks only the ClassPool's cache
- */
- private class SearchLocalLoaderLoaderSearchStrategy implements ClassPoolSearchStrategy
- {
- Logger logger = Logger.getLogger(this.getClass());
-
- public CtClass getCached(String classname)
- {
- boolean trace = logger.isTraceEnabled();
-
- if (trace) logger.trace(this + " " + AbstractClassPool.this + " searching just this pool for " + classname);
- CtClass clazz = getCachedLocally(classname);
- if (trace) logger.trace(this + " " + AbstractClassPool.this + " found " + classname + " in pool" + getClassPoolLogStringForClass(clazz));
- return clazz;
- }
- }
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolDomain.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,124 +0,0 @@
-/*
-* 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.classpool;
-
-import org.jboss.logging.Logger;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-
-
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public abstract class AbstractClassPoolDomain implements ClassPoolDomain
-{
- protected final Logger logger = Logger.getLogger(this.getClass());
-
- abstract CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create);
-
- abstract CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
-
- abstract CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
-
- abstract void addClassPool(DelegatingClassPool pool);
-
- abstract void removeClassPool(DelegatingClassPool pool);
-
-
- protected CtClass getCachedOrCreateFromPoolParent(BaseClassPool initiatingPool, String classname, boolean create, boolean trace)
- {
- if (initiatingPool == null)
- {
- if (trace) logger.trace(this + " get cached or create " + classname + " from pool parent - no initiating pool");
- return null;
- }
- ClassPool parentPool = initiatingPool.getParent();
- if (parentPool == null)
- {
- if (trace) logger.trace(this + " get cached or create " + classname + " from pool parent - no parent pool");
- return null;
- }
-
- return getCachedOrCreateFromPool(parentPool, classname, create, trace);
- }
-
-
- protected CtClass getCachedOrCreateFromPool(ClassPool pool, String classname, boolean create, boolean trace)
- {
- if (pool instanceof BaseClassPool)
- {
- return getCachedOrCreateFromPool((BaseClassPool)pool, classname, create, trace);
- }
- try
- {
- //This will check the parents
- if (trace) logger.trace(this + " get cached or create " + classname + " from non-BaseClassPool pool " + pool);
- CtClass clazz = pool.get(classname);
- if (trace) logger.trace(this + " got cached or create " + classname + " from non-BaseClassPool pool " + clazz.getClassPool());
- return clazz;
- }
- catch(NotFoundException e)
- {
- return null;
- }
- }
-
- protected CtClass getCachedOrCreateFromPool(BaseClassPool pool, String classname, boolean create, boolean trace)
- {
- if (pool == null)
- {
- if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - no pool");
- return null;
- }
-
- CtClass clazz = null;
- if (!pool.childFirstLookup)
- {
- if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking parent (parentFirst)");
- clazz = getCachedOrCreateFromPoolParent(pool, classname, create, trace);
- }
-
- if (clazz == null)
- {
- //We can use the exposed methods directly to avoid the overhead of NotFoundException
- if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking cache");
- clazz = pool.getCached(classname);
- if (clazz == null && create)
- {
- if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - creating");
- clazz = pool.createCtClass(classname, true);
- }
- }
-
- if (clazz == null && pool.childFirstLookup)
- {
- if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking parent (parentLast)");
- clazz = getCachedOrCreateFromPoolParent(pool, classname, create, trace);
- }
- return clazz;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,17 +0,0 @@
-package org.jboss.classpool;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-// TODO: check why ScopedClassPoolRepository and not AbstractClassPoolRepository
-public interface AbstractClassPoolFactory extends ScopedClassPoolFactory
-{
-
- public abstract AbstractClassPool create(ClassLoader cl, ClassPool src,
- ScopedClassPoolRepository repository);
-
- public abstract AbstractClassPool create(ClassPool src,
- ScopedClassPoolRepository repository);
-
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactoryImpl.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactoryImpl.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactoryImpl.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,53 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.classpool;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @version $Revision: 55872 $
- *
- **/
-public class AbstractClassPoolFactoryImpl implements AbstractClassPoolFactory
-{
- /* (non-Javadoc)
- * @see org.jboss.classpool.AbstractClassPoolFactory#create(java.lang.ClassLoader, javassist.ClassPool, javassist.scopedpool.ScopedClassPoolRepository)
- */
- public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- return new AbstractClassPool(cl, src, repository);
- }
-
- /* (non-Javadoc)
- * @see org.jboss.classpool.AbstractClassPoolFactory#create(javassist.ClassPool, javassist.scopedpool.ScopedClassPoolRepository)
- */
- public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
- {
- return new AbstractClassPool(src, repository);
- }
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractIsLocalResourcePlugin.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractIsLocalResourcePlugin.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,78 +0,0 @@
-/*
-* 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.classpool;
-
-import java.net.URL;
-
-import javassist.ClassPool;
-
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public abstract class AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
-{
- private final BaseClassPool pool;
-
- public AbstractIsLocalResourcePlugin(BaseClassPool pool)
- {
- this.pool = pool;
- initialise();
- }
-
- protected void initialise()
- {
-
- }
-
- protected AbstractClassPool 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;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossClassPoolFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,60 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.logging.Logger;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public abstract class AbstractJBossClassPoolFactory implements AbstractClassPoolFactory
-{
- protected final Logger log = Logger.getLogger(this.getClass().getName());
-
- protected ClassPool getCreateParentClassPools(final ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- //Make sure that we get classpools for all the parent classloaders
- if (cl == null)
- {
- return ClassPool.getDefault();
- }
- ClassLoader parent = SecurityActions.getParent(cl);
-
- if (parent != null)
- {
- return repository.registerClassLoader(parent);
- }
- return src;
- }
-
- public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
- {
- return new TempJBossClassPool(src, repository);
- }
-
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossDelegatingClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossDelegatingClassPoolFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossDelegatingClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,55 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public abstract class AbstractJBossDelegatingClassPoolFactory extends AbstractJBossClassPoolFactory
-{
- // TODO: check if this is needed
- /*protected ClassPool getCreateParentClassPools(final ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- //Make sure that we get classpools for all the parent classloaders
- if (cl == null)
- {
- return ClassPool.getDefault();
- }
- ClassLoader parent = SecurityActions.getParent(cl);
-
- if (parent != null)
- {
- return repository.registerClassLoader(parent);
- }
- return src;
- }*/
-
- public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
- {
- return new TempJBossDelegatingClassPool(src, repository);
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractParentDelegationStrategy.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,92 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.CtClass;
-
-import org.jboss.logging.Logger;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public abstract class AbstractParentDelegationStrategy implements ParentDelegationStrategy
-{
- protected final Logger logger = Logger.getLogger(this.getClass().getName());
- private AbstractClassPoolDomain domain;
- private AbstractClassPoolDomain parent;
-
- protected AbstractParentDelegationStrategy(ClassPoolDomain parent, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
- {
- if (parent == null)
- {
- if (adaptorFactory == null)
- {
- throw new IllegalStateException("Null parent and null adaptorFactory");
- }
- this.parent = adaptorFactory.createAdaptor();
- }
- else
- {
- if (parent instanceof AbstractClassPoolDomain == false)
- {
- throw new IllegalArgumentException("Parent must implement AbstractClassPoolDomain");
- }
- this.parent = (AbstractClassPoolDomain)parent;
- }
-
- if (this.parent == null)
- {
- throw new IllegalStateException("Parent was not set");
- }
- }
-
- protected boolean hasParent()
- {
- if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " hasParent " + parent != null);
- return parent != null;
- }
-
- protected AbstractClassPoolDomain getDomain()
- {
- return domain;
- }
-
- public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
- {
- return parent.getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
- }
-
- public void setDomain(AbstractClassPoolDomain domain)
- {
- if (domain == null)
- {
- throw new IllegalArgumentException("Null domain");
- }
- if (this.domain != null)
- {
- throw new IllegalArgumentException("Cannot change domain");
- }
- this.domain = domain;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,158 +0,0 @@
-/*
-* 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.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 AbstractClassPool too much
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class BaseClassPool extends AbstractClassPool
-{
- private IsLocalResourcePlugin isLocalResourcePlugin;
-
- public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
- {
- super(cl, parent, repository);
- isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
- if (logger.isTraceEnabled()) logger.trace(this + " isLocalResourcePlugin:" + isLocalResourcePlugin);
- }
-
- public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
- {
- super(cl, parent, repository, searchStrategy);
- isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
- if (logger.isTraceEnabled()) logger.trace(this + " isLocalResourcePlugin:" + isLocalResourcePlugin);
- }
-
-
- /**
- * Stores the classes created in the ScopedClassPool cache.
- */
- @Override
- public CtClass createCtClass(String classname, boolean useCache)
- {
- CtClass clazz = super.createCtClass(classname, useCache);
- if (clazz != null)
- {
- lockInCache(clazz);
- }
- return clazz;
- }
-
- /**
- * Uses the parent ClassPool, if available, to create the CtClass representing
- * {@code classname}.
- *
- * @param classname the name of the queried CtClass
- * @param useCache whether the ScopedClassPool cache should be used to search for the CtClass
- * @param trace enables tracing
- * @return a {@code CtClass} representing {@code classname}
- */
- protected CtClass createParentCtClass(String classname, boolean useCache, boolean trace)
- {
- if (parent == null)
- {
- return null;
- }
-
- //Make parent create class
- if (parent instanceof BaseClassPool)
- {
- return ((BaseClassPool)parent).createCtClass(classname, useCache);
- }
- else
- {
- return plainParentGet(classname);
- }
- }
-
- private CtClass plainParentGet(String classname)
- {
- try
- {
- return parent.get(classname);
- }
- catch (NotFoundException e)
- {
- }
- return null;
- }
-
- public ClassPool getParent()
- {
- return parent;
- }
-
- @Override
- protected boolean isLocalClassLoaderResource(String classResourceName)
- {
- return isLocalResourcePlugin.isMyResource(classResourceName);
- }
-
- @Override
- public final CtClass get(String classname) throws NotFoundException
- {
- boolean trace = logger.isTraceEnabled();
- if (trace) logger.trace(this + " initiating get of " + classname);
-
- try
- {
- CtClass clazz = super.get(classname);
- if (trace)
- {
- logger.trace(this + " completed get of " + classname + " " + getClassPoolLogStringForClass(clazz));
- }
- return clazz;
- }
- catch (NotFoundException e)
- {
- // AutoGenerated
- NotFoundException wrapped = new NotFoundException(e.getMessage() + " could not be found from " + this);
- wrapped.setStackTrace(e.getStackTrace());
- throw wrapped;
- }
- }
-
- @Override
- public CtClass get0(String classname, boolean useCache) throws NotFoundException
- {
- return super.get0(classname, useCache);
- }
-
- @Override
- public void close()
- {
- super.close();
-
- if (logger.isTraceEnabled()) logger.trace(this + " closing");
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPoolDomain.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,152 +0,0 @@
-/*
-* 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.classpool;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import javassist.CtClass;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class BaseClassPoolDomain extends AbstractClassPoolDomain
-{
- private String domainName;
-
- private List<DelegatingClassPool> delegatingPools = new ArrayList<DelegatingClassPool>();
-
- private ParentDelegationStrategy parentDelegationStrategy;
-
- public BaseClassPoolDomain(String domainName, ClassPoolDomain parent, boolean parentFirst)
- {
- this(domainName,
- new DefaultParentDelegationStrategy(
- parent,
- parentFirst,
- DefaultClassPoolToClassPoolDomainAdaptorFactory.getInstance())
- );
- }
-
- protected BaseClassPoolDomain(String domainName, ParentDelegationStrategy parentDelegationStrategy)
- {
- this.domainName = domainName;
- this.parentDelegationStrategy = parentDelegationStrategy;
- parentDelegationStrategy.setDomain(this);
- if (logger.isTraceEnabled()) logger.trace("Created " + this + " parentDelegationStrategy:" + parentDelegationStrategy);
- }
-
- @Override
- synchronized void addClassPool(DelegatingClassPool pool)
- {
- if (!delegatingPools.contains(pool))
- {
- if (logger.isTraceEnabled()) logger.trace(this + " adding pool " + pool);
- delegatingPools.add(pool);
- }
- }
-
- @Override
- protected synchronized void removeClassPool(DelegatingClassPool pool)
- {
- if (logger.isTraceEnabled()) logger.trace(this + " removing pool " + pool);
- delegatingPools.remove(pool);
- }
-
- @Override
- synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create)
- {
- boolean trace = logger.isTraceEnabled();
- String resourceName = ClassLoaderUtils.getResourceName(classname);
-
- CtClass clazz = getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
-
- if (clazz == null)
- {
- clazz = getCachedOrCreateFromPoolParent(initiatingPool, classname, create, trace);
- }
- return clazz;
- }
-
- @Override
- protected CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
- {
- if (trace) logger.trace(this + " looking for " + classname);
-
- CtClass clazz = null;
- if (isParentBefore(classname))
- {
- if (trace) logger.trace(this + " checking parent first for " + classname);
- clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
- }
- if (clazz == null)
- {
- List<DelegatingClassPool> pools = getPoolsForClassName(classname);
- if (pools.size() > 0)
- {
- for (DelegatingClassPool pool : pools)
- {
- clazz = pool.loadLocally(classname, resourceName, create);
- if (clazz != null)
- {
- break;
- }
- }
- }
- }
- if (clazz == null && isParentAfter(classname))
- {
- if (trace) logger.trace(this + " checking parent last for " + classname);
- clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
- }
- if (trace) logger.trace(this + " found " + classname + " in " + (clazz == null ? "null" : clazz.getClassPool()));
- return clazz;
- }
-
- @Override
- protected CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
- {
- return parentDelegationStrategy.getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
- }
-
- public String toString()
- {
- return "[" + super.toString() + " name:" + domainName + "]";
- }
-
- protected boolean isParentBefore(String classname)
- {
- return parentDelegationStrategy.isParentBefore(classname);
- }
-
- protected boolean isParentAfter(String classname)
- {
- return parentDelegationStrategy.isParentAfter(classname);
- }
-
- protected List<DelegatingClassPool> getPoolsForClassName(String classname)
- {
- return delegatingPools;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassLoaderUtils.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassLoaderUtils.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassLoaderUtils.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,99 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.classpool;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import javassist.CtClass;
-import javassist.bytecode.Descriptor;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class ClassLoaderUtils
-{
- private static final Set<String> primitiveNames;
- static
- {
- Set<String> temp = new HashSet<String>();
- temp.add(CtClass.booleanType.getName());
- temp.add(CtClass.byteType.getName());
- temp.add(CtClass.charType.getName());
- temp.add(CtClass.doubleType.getName());
- temp.add(CtClass.floatType.getName());
- temp.add(CtClass.intType.getName());
- temp.add(CtClass.longType.getName());
- temp.add(CtClass.shortType.getName());
- temp.add(CtClass.voidType.getName());
- primitiveNames = Collections.unmodifiableSet(temp);
- }
-
- public static String getResourceName(String classname)
- {
- final String name = stripArrayFromClassName(classname);
- final int lastIndex = name.lastIndexOf('$');
- if (lastIndex < 0)
- {
- return name.replaceAll("[\\.]", "/") + ".class";
- }
- else
- {
- return name.substring(0, lastIndex).replaceAll("[\\.]", "/") + name.substring(lastIndex) + ".class";
- }
- }
-
- public static String getPackageName(String classname)
- {
- final int last = classname.lastIndexOf('.');
- if (last < 0)
- {
- return "";
- }
- else
- {
- return classname.substring(0, last);
- }
- }
-
- public static String stripArrayFromClassName(String classname)
- {
- if (classname.charAt(0) == '[')
- {
- return Descriptor.toClassName(classname);
- }
- if (classname.endsWith("[]"))
- {
- return classname.substring(0, classname.indexOf("[]"));
- }
- return classname;
- }
-
- public static boolean isPrimitiveType(String classname)
- {
- final String name = stripArrayFromClassName(classname);
- return primitiveNames.contains(name);
- }
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomain.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,31 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface ClassPoolDomain
-{
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomainRegistry.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomainRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,59 +0,0 @@
-/*
-* 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.classpool;
-
-import java.lang.ref.WeakReference;
-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, WeakReference<ClassPoolDomain>> domains = new WeakHashMap<Object, WeakReference<ClassPoolDomain>>();
-
- public static ClassPoolDomainRegistry getInstance()
- {
- return INSTANCE;
- }
-
- public synchronized ClassPoolDomain getDomain(Object key)
- {
- WeakReference<ClassPoolDomain> ref = domains.get(key);
- if (ref == null)
- {
- return null;
- }
- return ref.get();
- }
-
- public synchronized void addClassPoolDomain(Object key, ClassPoolDomain domain)
- {
- domains.put(key, new WeakReference<ClassPoolDomain>(domain));
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepository.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepository.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepository.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,184 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.classpool;
-
-import java.util.Map;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-import javassist.scopedpool.ScopedClassPoolRepositoryImpl;
-
-/**
- * Singleton classpool repository
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 87799 $
- */
-public class ClassPoolRepository implements ScopedClassPoolRepository
-{
- //private static final Logger logger = Logger.getLogger(ClassPoolRepository.class);
-
- private final static ClassPoolRepository instance = new ClassPoolRepository();
-
- /** The classes per classppol */
- //protected final HashMap<ClassLoader, HashSet<Class<?>>> ucl2classes = new HashMap<ClassLoader, HashSet<Class<?>>>();
-
- private ScopedClassPoolRepository delegate;
- private ClassPoolRepositoryCallback callback;
-
- public static ClassPoolRepository getInstance()
- {
- return instance;
- }
-
- private ClassPoolRepository()
- {
- this.delegate = ScopedClassPoolRepositoryImpl.getInstance();
- //This was needed when jboss-aop.jar was deployed in the jboss/lib directory since the AspectManager bean had no chance to initialise it
- delegate.setClassPoolFactory(new AbstractClassPoolFactoryImpl());
- // if (!setJBossSpecificStartupVariables())
-// {
-// delegate.setClassPoolFactory(new AbstractClassPoolFactory());
-// }
- }
-
-// private boolean setJBossSpecificStartupVariables()
-// {
-// //We are running within JBoss 5, let's default to the JBossClassPoolFactory and set the ScopedClassPoolHelper
-// //so that we get correct behaviour before the AspectManager service has been deployed
-// try
-// {
-// Class jbcpf = Class.forName("org.jboss.aop.deployment.JBossClassPoolFactory");
-// ScopedClassPoolFactory factory = (ScopedClassPoolFactory)jbcpf.newInstance();
-//
-// Class hlpr = Class.forName("org.jboss.aop.deployment.JBossScopedClassLoaderHelper");
-// AOPScopedClassLoaderHelper helper = (AOPScopedClassLoaderHelper)hlpr.newInstance();
-// delegate.setClassPoolFactory(factory);
-// AspectManager.scopedCLHelper = helper;
-// return true;
-// }
-// catch (Exception e)
-// {
-// }
-// return false;//Not running in JBoss probably
-// }
-
- public void setClassPoolFactory(ScopedClassPoolFactory factory)
- {
- delegate.setClassPoolFactory(factory);
- }
-
- public ScopedClassPoolFactory getClassPoolFactory()
- {
- return delegate.getClassPoolFactory();
- }
-
- public void setClassPoolRepositoryCallback(ClassPoolRepositoryCallback callback)
- {
- this.callback = callback;
- }
-
- public ClassPoolRepositoryCallback getClassPoolRepositoryCallback()
- {
- return this.callback;
- }
-
- public boolean isPrune()
- {
- return delegate.isPrune();
- }
-
- public void setPrune(boolean prune)
- {
- delegate.setPrune(prune);
- }
-
- public ScopedClassPool createScopedClassPool(ClassLoader cl, ClassPool src)
- {
- return delegate.createScopedClassPool(cl, src);
- }
-
- public ClassPool findClassPool(ClassLoader cl)
- {
- return delegate.findClassPool(cl);
- }
-
- /**
- * Get the registered classloaders
- *
- * @return the registered classloaders
- */
- public Map<ClassLoader, ClassPool> getRegisteredCLs()
- {
- return delegate.getRegisteredCLs();
- }
-
- /**
- * This method will check to see if a register classloader has been undeployed (as in JBoss)
- */
- public void clearUnregisteredClassLoaders()
- {
- delegate.clearUnregisteredClassLoaders();
- }
-
- public ClassPool registerClassLoader(ClassLoader classLoader)
- {
- if (classLoader == null)
- {
- classLoader = SecurityActions.getContextClassLoader();
- }
- ClassPool classPool = delegate.registerClassLoader(classLoader);
- if (callback != null)
- {
- callback.classLoaderRegistered(classLoader);
- }
- return classPool;
- }
-
- public void unregisterClassLoader(ClassLoader classLoader)
- {
- delegate.unregisterClassLoader(classLoader);
- if (callback != null)
- {
- callback.classLoaderUnregistered(classLoader);
- }
- }
-
- /*public void registerClass(Class<?> clazz)
- {
- ClassLoader classLoader = SecurityActions.getClassLoader(clazz);
- HashSet<Class<?>> classes = ucl2classes.get(classLoader);
- if (classes == null)
- {
- classes = new HashSet<Class<?>>();
- ucl2classes.put(classLoader, classes);
- }
- classes.add(clazz);
- }*/
-
- /*public void perfomUnregisterClassLoader(ClassLoader cl)
- {
- ucl2classes.remove(cl);
- }*/
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepositoryCallback.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepositoryCallback.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepositoryCallback.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,34 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt 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.classpool;
-
-
-/**
- * Singleton classpool repository
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 87799 $
- */
-public interface ClassPoolRepositoryCallback {
- public void classLoaderRegistered(ClassLoader classLoader);
- public void classLoaderUnregistered(ClassLoader classLoader);
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolSearchStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolSearchStrategy.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolSearchStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,34 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.CtClass;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface ClassPoolSearchStrategy
-{
- CtClass getCached(String classname);
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdapter.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdapter.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,98 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-
-/**
- * Adapts a ClassPool to a ClassPoolDomain, i.e., this class represents an
- * unitary ClassPoolDomain.
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class ClassPoolToClassPoolDomainAdapter extends AbstractClassPoolDomain
-{
- protected ClassPool pool;
-
- public ClassPoolToClassPoolDomainAdapter()
- {
- this.pool = initialiseParentClassLoader();
- if (logger.isTraceEnabled()) logger.trace("Created " + this);
- validate();
- }
-
- public ClassPoolToClassPoolDomainAdapter(ClassPool pool)
- {
- this.pool = pool;
- if (logger.isTraceEnabled()) logger.trace("Created " + this);
- validate();
- }
-
- private void validate()
- {
- if (pool == null)
- {
- throw new IllegalStateException("Null parent classpool");
- }
- }
-
- public ClassPool initialiseParentClassLoader()
- {
- return ClassPool.getDefault();
- }
-
- public void addClassPool(DelegatingClassPool pool)
- {
- throw new IllegalStateException("Cannot add pools to the domain adaptor");
- }
-
-
- synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
- {
- return getCachedOrCreateFromPool(pool, classname, create, trace);
- }
-
- @Override
- CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
- {
- return null;
- }
-
- void removeClassPool(DelegatingClassPool pool)
- {
- throw new IllegalStateException("Cannot remove pools from the domain adaptor");
- }
-
- public String toString()
- {
- return "ClassPoolToDomainAdapter[" + System.identityHashCode(this) + " " + pool.toString() + "]";
- }
-
- @Override
- CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create)
- {
- throw new IllegalStateException("Should never be called");
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdaptorFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,32 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface ClassPoolToClassPoolDomainAdaptorFactory
-{
- ClassPoolToClassPoolDomainAdapter createAdaptor();
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePlugin.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,42 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class DefaultClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
-{
- public DefaultClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
- {
- super(pool);
- }
-
- public boolean isMyResource(String resourceName)
- {
- return getPool().getClassLoader().getResource(resourceName) != null;
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,37 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class DefaultClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
-{
-
- public IsLocalResourcePlugin create(BaseClassPool pool)
- {
- return new DefaultClassLoaderIsLocalResourcePlugin(pool);
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassPoolToClassPoolDomainAdaptorFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,48 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class DefaultClassPoolToClassPoolDomainAdaptorFactory implements ClassPoolToClassPoolDomainAdaptorFactory
-{
- private static final DefaultClassPoolToClassPoolDomainAdaptorFactory INSTANCE = new DefaultClassPoolToClassPoolDomainAdaptorFactory();
-
- private DefaultClassPoolToClassPoolDomainAdaptorFactory()
- {
-
- }
-
- public static ClassPoolToClassPoolDomainAdaptorFactory getInstance()
- {
- return INSTANCE;
- }
-
- public ClassPoolToClassPoolDomainAdapter createAdaptor()
- {
- return new ClassPoolToClassPoolDomainAdapter();
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultParentDelegationStrategy.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,51 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class DefaultParentDelegationStrategy extends AbstractParentDelegationStrategy
-{
- boolean parentFirst;
- DefaultParentDelegationStrategy(ClassPoolDomain parent, boolean parentFirst, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
- {
- super(parent, adaptorFactory);
- this.parentFirst = parentFirst;
- }
-
- public boolean isParentBefore(String classname)
- {
- boolean isParentBefore = hasParent() && parentFirst == true;
- if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentBefore " + isParentBefore);
- return isParentBefore;
- }
-
- public boolean isParentAfter(String classname)
- {
- boolean isParentAfter = hasParent() && parentFirst == false;
- if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentAfter " + isParentAfter);
- return isParentAfter;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DelegatingClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,129 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-/**
- * 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 BaseClassPool
-{
- private final AbstractClassPoolDomain domain;
-
- private boolean closed;
-
- public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
- {
- super(cl, parent, repository);
- if (domain == null)
- {
- throw new IllegalArgumentException("Domain was null");
- }
- if (domain instanceof AbstractClassPoolDomain == false)
- {
- throw new IllegalArgumentException("Domain must implement AbstractClassPoolDomain");
- }
- this.domain = (AbstractClassPoolDomain)domain;
- if (logger.isTraceEnabled()) logger.trace(this + " domain:" + this);
- this.domain.addClassPool(this);
- }
-
- public CtClass loadLocally(String classname, String resourceName, boolean create)
- {
- boolean trace = logger.isTraceEnabled();
- if (trace) logger.trace(this + " attempt to load locally " + classname);
-
- CtClass clazz = null;
- if (isLocalResource(resourceName, trace))
- {
- clazz = getCachedLocally(classname);
- if (clazz == null && create)
- {
- clazz = createCtClass(classname, true);
- }
- }
- if (trace) logger.trace(this + " loaded locally " + classname + " " + getClassPoolLogStringForClass(clazz));
- return clazz;
- }
-
- /**
- * Overrides ClassPool.get0() so that we can look up classes without caching them in the initiating pool.
- * The DelgatingClassPool + DomainClassPool handle the caching in the correct pool + handles the
- * parentFirst functionality
- */
- @Override
- public synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
- {
- if (isGeneratedClass(classname))
- {
- return null;
- }
- CtClass clazz = domain.getCachedOrCreate(this, classname, true);
- if (clazz == null)
- {
- //It is probably a generated proxy. The package name can be different (for example if it is
- //a proxy for a java system class) than the package names exported by the loaders.
- //TODO It should be possible to remove this once these have been done:
- //https://jira.jboss.org/jira/browse/JBCL-25
- //https://jira.jboss.org/jira/browse/JBCL-92
- clazz = loadLocally(classname, ClassLoaderUtils.getResourceName(classname), true);
- }
- return clazz;
- }
-
- @Override
- public boolean isUnloadedClassLoader()
- {
- return closed;
- }
-
- @Override
- public void close()
- {
- closed = true;
- super.close();
- domain.removeClassPool(this);
- }
-
- @Override
- public CtClass getCached(String classname)
- {
- if (isGeneratedClass(classname))
- {
- return null;
- }
- return domain.getCachedOrCreate(this, classname, false);
- }
-
- @Override
- public String toString()
- {
- return "[" + super.toString() + " domain: " + domain + "]";
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePlugin.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePlugin.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,32 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface IsLocalResourcePlugin
-{
- boolean isMyResource(String resourceName);
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,33 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- * Creates IsLocalResourcePlugins for a specific instance of {@link BaseClassPool}
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface IsLocalResourcePluginFactory
-{
- IsLocalResourcePlugin create(BaseClassPool pool);
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactoryRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactoryRegistry.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactoryRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,117 +0,0 @@
-/*
-* 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.classpool;
-
-import java.net.URLClassLoader;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import org.jboss.util.loading.Translatable;
-
-/**
- * A global registry for IsLocalResourcePluginFactories.
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class IsLocalResourcePluginFactoryRegistry
-{
- private static Map<Class<?>, IsLocalResourcePluginFactory> plugins = new WeakHashMap<Class<?>, IsLocalResourcePluginFactory>();
-
- static
- {
- addPluginFactory(ClassLoader.class, new DefaultClassLoaderIsLocalResourcePluginFactory());
- addPluginFactory(URLClassLoader.class, new URLClassLoaderIsLocalResourcePluginFactory());
- addPluginFactory(Translatable.class, new TranslatableClassLoaderIsLocalResourcePluginFactory());
- }
-
- /**
- * Registers {@code plugin} as the factory associated with the {@code classLoaderClass}.
- *
- * @param classLoaderClass the class of a specific ClassLoader
- * @param plugin a plugin factory that will be used for classes loaded by
- * a class loader of type {@code classLoaderClass}
- */
- public static synchronized void addPluginFactory(Class<?> classLoaderClass, IsLocalResourcePluginFactory plugin)
- {
- plugins.put(classLoaderClass, plugin);
- }
-
- /**
- * Unregisters {@code plugin} as the factory associated with the {@code classLoaderClass}.
- *
- * @param classLoaderClass the class of a specific ClassLoader
- * @param plugin a plugin factory that should no longer be used for classes loaded by
- * a class loader of type {@code classLoaderClass}
- */
- public static synchronized void removePluginFactory(Class<?> classLoaderClass, IsLocalResourcePluginFactory plugin)
- {
- plugins.remove(classLoaderClass);
- }
-
- /**
- * Returns the plugin factory associated with the {@code classLoader}.
- *
- * @return a plugin factory that should be used for classes loaded by
- * {@code classLoader}
- */
- public static synchronized IsLocalResourcePluginFactory getPluginFactory(ClassLoader classLoader)
- {
- if (classLoader != null)
- {
- return getPluginFactory(classLoader.getClass());
- }
- return getPluginFactory(ClassLoader.class);
- }
-
- /**
- * Returns the plugin factory associated with the {@code classLoaderClass}.
- *
- * @return a plugin factory that should be used for classes loaded by
- * a class loader of type {@code classLoaderClass}
- */
- public static synchronized IsLocalResourcePluginFactory getPluginFactory(Class<?> classLoaderClass)
- {
- IsLocalResourcePluginFactory plugin = plugins.get(classLoaderClass);
- if (plugin == null)
- {
- Class<?>[] interfaces = classLoaderClass.getInterfaces();
- if (interfaces.length > 0)
- {
- for (Class<?> iface : interfaces)
- {
- plugin = getPluginFactory(iface);
- if (plugin != null)
- {
- return plugin;
- }
- }
- }
- Class<?> superClass = classLoaderClass.getSuperclass();
- if (superClass != null && superClass != Object.class)
- {
- return getPluginFactory(superClass);
- }
- }
- return plugin;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/NonDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/NonDelegatingClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/NonDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,66 +0,0 @@
-/*
-* 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.classpool;
-
-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, AbstractClassPool.SEARCH_LOCAL_ONLY_STRATEGY);
- super.childFirstLookup = !parentFirst;
- }
-
- @Override
- public CtClass createCtClass(String classname, boolean useCache)
- {
- boolean trace = logger.isTraceEnabled();
- CtClass clazz = null;
- if (!childFirstLookup)
- {
- if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentFirst)");
- clazz = createParentCtClass(classname, useCache, trace);
- }
- if (clazz == null && isLocalResource(getResourceName(classname), trace))
- {
- clazz = super.createCtClass(classname, useCache);
- }
- if (childFirstLookup && clazz == null)
- {
- if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentLast)");
- clazz = createParentCtClass(classname, useCache, trace);
- }
-
- if (trace)logger.trace(this + " created " + classname + " " + getClassPoolLogStringForClass(clazz));
- return clazz;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ParentDelegationStrategy.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,40 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.CtClass;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface ParentDelegationStrategy
-{
- void setDomain(AbstractClassPoolDomain domain);
-
- CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
-
- boolean isParentBefore(String classname);
-
- boolean isParentAfter(String classname);
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/SecurityActions.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,217 +0,0 @@
-/*
-* 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.classpool;
-
-import java.beans
-.PropertyEditorManager;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-import org.jboss.util.propertyeditor.ClassArrayEditor;
-import org.jboss.util.propertyeditor.IntArrayEditor;
-import org.jboss.util.propertyeditor.StringArrayEditor;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class SecurityActions
-{
- interface GetParentAction
- {
- ClassLoader getParent(ClassLoader loader);
-
- GetParentAction NON_PRIVILEGED = new GetParentAction()
- {
- public ClassLoader getParent(ClassLoader loader)
- {
- return loader.getParent();
- }
- };
-
- GetParentAction PRIVILEGED = new GetParentAction()
- {
- public ClassLoader getParent(final ClassLoader loader)
- {
- try
- {
- return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
- {
- public ClassLoader run() throws Exception
- {
- return loader.getParent();
- }
- });
- }
- catch (PrivilegedActionException e)
- {
- throw new RuntimeException(e.getException());
- }
- }
- };
- }
-
- public static ClassLoader getParent(ClassLoader loader)
- {
- if (System.getSecurityManager() == null)
- {
- return GetParentAction.NON_PRIVILEGED.getParent(loader);
- }
- else
- {
- return GetParentAction.PRIVILEGED.getParent(loader);
- }
- }
-
-
- private interface InitPropertyEditorsAction
- {
- void initEditors();
-
- InitPropertyEditorsAction PRIVILEGED = new InitPropertyEditorsAction()
- {
- public void initEditors()
- {
- try
- {
- AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
- {
- public Object run() throws Exception
- {
- doInitEditors();
- return null;
- }
- });
- }
- catch (PrivilegedActionException e)
- {
- throw new RuntimeException(e.getException());
- }
- }
- };
-
- InitPropertyEditorsAction NON_PRIVILEGED = new InitPropertyEditorsAction()
- {
- public void initEditors()
- {
- doInitEditors();
- }
- };
- }
-
- private static void doInitEditors()
- {
- String[] currentPath = PropertyEditorManager.getEditorSearchPath();
- int length = currentPath != null ? currentPath.length : 0;
- String[] newPath = new String[length+2];
- System.arraycopy(currentPath, 0, newPath, 2, length);
- // Put the JBoss editor path first
- // The default editors are not very flexible
- newPath[0] = "org.jboss.util.propertyeditor";
- newPath[1] = "org.jboss.mx.util.propertyeditor";
- PropertyEditorManager.setEditorSearchPath(newPath);
-
- /* Register the editor types that will not be found using the standard
- class name to editor name algorithm. For example, the type String[] has
- a name '[Ljava.lang.String;' which does not map to a XXXEditor name.
- */
- Class<String[]> strArrayType = String[].class;
- PropertyEditorManager.registerEditor(strArrayType, StringArrayEditor.class);
-
- @SuppressWarnings("unchecked")
- Class<Class[]> clsArrayType = Class[].class;
- PropertyEditorManager.registerEditor(clsArrayType, ClassArrayEditor.class);
-
- Class<int[]> intArrayType = int[].class;
- PropertyEditorManager.registerEditor(intArrayType, IntArrayEditor.class);
- }
-
-
- static void initEditors()
- {
- if (System.getSecurityManager() == null)
- {
- InitPropertyEditorsAction.NON_PRIVILEGED.initEditors();
- }
- else
- {
- InitPropertyEditorsAction.PRIVILEGED.initEditors();
- }
- }
-
- public static class GetContextClassLoaderAction implements PrivilegedAction<ClassLoader>
- {
- public static GetContextClassLoaderAction INSTANCE = new GetContextClassLoaderAction();
-
- public ClassLoader run()
- {
- return Thread.currentThread().getContextClassLoader();
- }
- }
-
- static ClassLoader getContextClassLoader()
- {
- if (System.getSecurityManager() == null)
- return Thread.currentThread().getContextClassLoader();
- else
- return AccessController.doPrivileged(GetContextClassLoaderAction.INSTANCE);
- }
-
- interface GetClassLoaderAction
- {
- ClassLoader getClassLoader(Class<?> clazz);
-
- GetClassLoaderAction NON_PRIVILEGED = new GetClassLoaderAction() {
-
- public ClassLoader getClassLoader(Class<?> clazz)
- {
- return clazz.getClassLoader();
- }};
-
- GetClassLoaderAction PRIVILEGED = new GetClassLoaderAction() {
-
- public ClassLoader getClassLoader(final Class<?> clazz)
- {
- return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-
- public ClassLoader run()
- {
- return clazz.getClassLoader();
- }});
- }};
- }
-
- public static ClassLoader getClassLoader(Class<?> clazz)
- {
- if (System.getSecurityManager() == null)
- {
- return GetClassLoaderAction.NON_PRIVILEGED.getClassLoader(clazz);
- }
- else
- {
- return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
- }
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,69 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-
-/**
- * The temporary classpool used by the instrumentor. It's main job is to delegate to the parent classpool
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class TempJBossClassPool extends AbstractClassPool
-{
- boolean isParentAbstractPool;
- public TempJBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- super(cl, src, repository);
- if (src instanceof AbstractClassPool)
- {
- isParentAbstractPool = true;
- }
- }
-
- public TempJBossClassPool(ClassPool src, ScopedClassPoolRepository repository)
- {
- super(src, repository);
- if (src instanceof AbstractClassPool)
- {
- isParentAbstractPool = true;
- }
- }
-
- public CtClass getCached(String classname)
- {
- CtClass clazz = null;
- if (isParentAbstractPool)
- {
- clazz = ((AbstractClassPool)parent).getCached(classname);
- }
- if (clazz == null)
- {
- clazz = super.getCached(classname);
- }
- return clazz;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossDelegatingClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,69 +0,0 @@
-/*
-* 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.classpool;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class TempJBossDelegatingClassPool extends AbstractClassPool
-{
- boolean isParentPoolDelegating;
- public TempJBossDelegatingClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- super(cl, src, repository);
- if (src instanceof BaseClassPool)
- {
- isParentPoolDelegating = true;
- }
- }
-
- public TempJBossDelegatingClassPool(ClassPool src, ScopedClassPoolRepository repository)
- {
- super(src, repository);
- if (src instanceof BaseClassPool)
- {
- isParentPoolDelegating = true;
- }
- }
- @Override
- public CtClass get0(String classname, boolean useCache) throws NotFoundException
- {
- CtClass clazz = null;
- if (isParentPoolDelegating)
- {
- clazz = ((BaseClassPool)parent).get0(classname, useCache);
- }
- if (clazz == null)
- {
- clazz = super.get0(classname, useCache);
- }
- return clazz;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,59 +0,0 @@
-/*
-* 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.classpool;
-
-import java.net.URL;
-
-import org.jboss.util.loading.Translatable;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class TranslatableClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin
-{
- public TranslatableClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
- {
- super(pool);
- }
-
- public boolean isMyResource(String resourceName)
- {
- ClassLoader loader = getPool().getClassLoader();
- if (loader instanceof Translatable == false)
- {
- throw new IllegalStateException("ClassLoader is not instance of Translatable " + loader);
- }
- URL url = ((Translatable)getPool().getClassLoader()).getResourceLocally(resourceName);
- if (url == null)
- {
- return false;
- }
- if (isSameInParent(resourceName, url))
- {
- return false;
- }
- return true;
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,36 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class TranslatableClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
-{
- public IsLocalResourcePlugin create(BaseClassPool pool)
- {
- return new TranslatableClassLoaderIsLocalResourcePlugin(pool);
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePlugin.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePlugin.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,54 +0,0 @@
-/*
-* 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.classpool;
-
-import java.net.URL;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class URLClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin
-{
- public URLClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
- {
- super(pool);
- }
-
- public boolean isMyResource(String classResourceName)
- {
- //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)
- {
- return false;
- }
- if (isSameInParent(classResourceName, myURL))
- {
- return false;
- }
- return true;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePluginFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,37 +0,0 @@
-/*
-* 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.classpool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class URLClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
-{
-
- public IsLocalResourcePlugin create(BaseClassPool pool)
- {
- return new URLClassLoaderIsLocalResourcePlugin(pool);
- }
-
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractIsLocalResourcePlugin.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractIsLocalResourcePlugin.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractIsLocalResourcePlugin.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,80 @@
+/*
+* 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.classpool.base;
+
+import java.net.URL;
+
+import org.jboss.classpool.spi.AbstractClassPool;
+
+import javassist.ClassPool;
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+abstract class AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
+{
+ private final BaseClassPool pool;
+
+ public AbstractIsLocalResourcePlugin(BaseClassPool pool)
+ {
+ this.pool = pool;
+ initialise();
+ }
+
+ protected void initialise()
+ {
+
+ }
+
+ protected AbstractClassPool 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;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractParentDelegationStrategy.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/AbstractParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,96 @@
+/*
+* 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.classpool.base;
+
+import javassist.CtClass;
+
+import org.jboss.classpool.domain.AbstractClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.logging.Logger;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class AbstractParentDelegationStrategy implements ParentDelegationStrategy
+{
+ protected final Logger logger = Logger.getLogger(this.getClass().getName());
+ private ClassPoolDomain domain;
+ private ClassPoolDomain parent;
+
+ protected AbstractParentDelegationStrategy(ClassPoolDomain parent, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
+ {
+ if (parent == null)
+ {
+ if (adaptorFactory == null)
+ {
+ throw new IllegalStateException("Null parent and null adaptorFactory");
+ }
+ this.parent = adaptorFactory.createAdaptor();
+ }
+ else
+ {
+ if (parent instanceof AbstractClassPoolDomain == false)
+ {
+ throw new IllegalArgumentException("Parent must implement AbstractClassPoolDomain");
+ }
+ this.parent = parent;
+ }
+
+ if (this.parent == null)
+ {
+ throw new IllegalStateException("Parent was not set");
+ }
+ }
+
+ protected boolean hasParent()
+ {
+ if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " hasParent " + parent != null);
+ return parent != null;
+ }
+
+ protected ClassPoolDomain getDomain()
+ {
+ return domain;
+ }
+
+ public CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+ {
+ return parent.getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
+ }
+
+ public void setDomain(ClassPoolDomain domain)
+ {
+ if (domain == null)
+ {
+ throw new IllegalArgumentException("Null domain");
+ }
+ if (this.domain != null)
+ {
+ throw new IllegalArgumentException("Cannot change domain");
+ }
+ this.domain = domain;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,160 @@
+/*
+* 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.classpool.base;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.spi.AbstractClassPool;
+
+
+/**
+ * Intermediate class containing commonly needed functionality for the new classpools. I don't want to
+ * modify AbstractClassPool too much
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class BaseClassPool extends AbstractClassPool
+{
+ private IsLocalResourcePlugin isLocalResourcePlugin;
+
+ public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
+ {
+ super(cl, parent, repository);
+ isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
+ if (logger.isTraceEnabled()) logger.trace(this + " isLocalResourcePlugin:" + isLocalResourcePlugin);
+ }
+
+ public BaseClassPool(ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
+ {
+ super(cl, parent, repository, searchStrategy);
+ isLocalResourcePlugin = IsLocalResourcePluginFactoryRegistry.getPluginFactory(cl).create(this);
+ if (logger.isTraceEnabled()) logger.trace(this + " isLocalResourcePlugin:" + isLocalResourcePlugin);
+ }
+
+
+ /**
+ * Stores the classes created in the ScopedClassPool cache.
+ */
+ @Override
+ public CtClass createCtClass(String classname, boolean useCache)
+ {
+ CtClass clazz = super.createCtClass(classname, useCache);
+ if (clazz != null)
+ {
+ lockInCache(clazz);
+ }
+ return clazz;
+ }
+
+ /**
+ * Uses the parent ClassPool, if available, to create the CtClass representing
+ * {@code classname}.
+ *
+ * @param classname the name of the queried CtClass
+ * @param useCache whether the ScopedClassPool cache should be used to search for the CtClass
+ * @param trace enables tracing
+ * @return a {@code CtClass} representing {@code classname}
+ */
+ protected CtClass createParentCtClass(String classname, boolean useCache, boolean trace)
+ {
+ if (parent == null)
+ {
+ return null;
+ }
+
+ //Make parent create class
+ if (parent instanceof BaseClassPool)
+ {
+ return ((BaseClassPool)parent).createCtClass(classname, useCache);
+ }
+ else
+ {
+ return plainParentGet(classname);
+ }
+ }
+
+ private CtClass plainParentGet(String classname)
+ {
+ try
+ {
+ return parent.get(classname);
+ }
+ catch (NotFoundException e)
+ {
+ }
+ return null;
+ }
+
+ public ClassPool getParent()
+ {
+ return parent;
+ }
+
+ @Override
+ protected boolean isLocalClassLoaderResource(String classResourceName)
+ {
+ return isLocalResourcePlugin.isMyResource(classResourceName);
+ }
+
+ @Override
+ public final CtClass get(String classname) throws NotFoundException
+ {
+ boolean trace = logger.isTraceEnabled();
+ if (trace) logger.trace(this + " initiating get of " + classname);
+
+ try
+ {
+ CtClass clazz = super.get(classname);
+ if (trace)
+ {
+ logger.trace(this + " completed get of " + classname + " " + getClassPoolLogStringForClass(clazz));
+ }
+ return clazz;
+ }
+ catch (NotFoundException e)
+ {
+ // AutoGenerated
+ NotFoundException wrapped = new NotFoundException(e.getMessage() + " could not be found from " + this);
+ wrapped.setStackTrace(e.getStackTrace());
+ throw wrapped;
+ }
+ }
+
+ @Override
+ public CtClass get0(String classname, boolean useCache) throws NotFoundException
+ {
+ return super.get0(classname, useCache);
+ }
+
+ @Override
+ public void close()
+ {
+ super.close();
+
+ if (logger.isTraceEnabled()) logger.trace(this + " closing");
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/BaseClassPoolDomain.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/BaseClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,154 @@
+/*
+* 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.classpool.base;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.classpool.domain.AbstractClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.helpers.ClassLoaderUtils;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+
+
+import javassist.CtClass;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class BaseClassPoolDomain extends AbstractClassPoolDomain
+{
+ private String domainName;
+
+ private List<DelegatingClassPool> delegatingPools = new ArrayList<DelegatingClassPool>();
+
+ private ParentDelegationStrategy parentDelegationStrategy;
+
+ public BaseClassPoolDomain(String domainName, ClassPoolDomain parent, boolean parentFirst)
+ {
+ this(domainName,
+ new DefaultParentDelegationStrategy(
+ parent,
+ parentFirst,
+ DefaultClassPoolToClassPoolDomainAdaptorFactory.getInstance())
+ );
+ }
+
+ protected BaseClassPoolDomain(String domainName, ParentDelegationStrategy parentDelegationStrategy)
+ {
+ this.domainName = domainName;
+ this.parentDelegationStrategy = parentDelegationStrategy;
+ parentDelegationStrategy.setDomain(this);
+ if (logger.isTraceEnabled()) logger.trace("Created " + this + " parentDelegationStrategy:" + parentDelegationStrategy);
+ }
+
+ public synchronized void addClassPool(DelegatingClassPool pool)
+ {
+ if (!delegatingPools.contains(pool))
+ {
+ if (logger.isTraceEnabled()) logger.trace(this + " adding pool " + pool);
+ delegatingPools.add(pool);
+ }
+ }
+
+ public synchronized void removeClassPool(DelegatingClassPool pool)
+ {
+ if (logger.isTraceEnabled()) logger.trace(this + " removing pool " + pool);
+ delegatingPools.remove(pool);
+ }
+
+ public synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create)
+ {
+ boolean trace = logger.isTraceEnabled();
+ String resourceName = ClassLoaderUtils.getResourceName(classname);
+
+ CtClass clazz = getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
+
+ if (clazz == null)
+ {
+ clazz = getCachedOrCreateFromPoolParent(initiatingPool, classname, create, trace);
+ }
+ return clazz;
+ }
+
+ public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+ {
+ if (trace) logger.trace(this + " looking for " + classname);
+
+ CtClass clazz = null;
+ if (isParentBefore(classname))
+ {
+ if (trace) logger.trace(this + " checking parent first for " + classname);
+ clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
+ }
+ if (clazz == null)
+ {
+ List<DelegatingClassPool> pools = getPoolsForClassName(classname);
+ if (pools.size() > 0)
+ {
+ for (DelegatingClassPool pool : pools)
+ {
+ clazz = pool.loadLocally(classname, resourceName, create);
+ if (clazz != null)
+ {
+ break;
+ }
+ }
+ }
+ }
+ if (clazz == null && isParentAfter(classname))
+ {
+ if (trace) logger.trace(this + " checking parent last for " + classname);
+ clazz = getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
+ }
+ if (trace) logger.trace(this + " found " + classname + " in " + (clazz == null ? "null" : clazz.getClassPool()));
+ return clazz;
+ }
+
+ @Override
+ protected CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+ {
+ return parentDelegationStrategy.getCachedOrCreateFromParent(initiatingPool, classname, resourceName, create, trace);
+ }
+
+ public String toString()
+ {
+ return "[" + super.toString() + " name:" + domainName + "]";
+ }
+
+ protected boolean isParentBefore(String classname)
+ {
+ return parentDelegationStrategy.isParentBefore(classname);
+ }
+
+ protected boolean isParentAfter(String classname)
+ {
+ return parentDelegationStrategy.isParentAfter(classname);
+ }
+
+ protected List<DelegatingClassPool> getPoolsForClassName(String classname)
+ {
+ return delegatingPools;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePlugin.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePlugin.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePlugin.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,43 @@
+/*
+* 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.classpool.base;
+
+
+/**
+ *
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DefaultClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin implements IsLocalResourcePlugin
+{
+ public DefaultClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
+ {
+ super(pool);
+ }
+
+ public boolean isMyResource(String resourceName)
+ {
+ return getPool().getClassLoader().getResource(resourceName) != null;
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePluginFactory.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassLoaderIsLocalResourcePluginFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePluginFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.base;
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DefaultClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
+{
+
+ public IsLocalResourcePlugin create(BaseClassPool pool)
+ {
+ return new DefaultClassLoaderIsLocalResourcePlugin(pool);
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassPoolToClassPoolDomainAdaptorFactory.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultClassPoolToClassPoolDomainAdaptorFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassPoolToClassPoolDomainAdaptorFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.base;
+
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+class DefaultClassPoolToClassPoolDomainAdaptorFactory implements ClassPoolToClassPoolDomainAdaptorFactory
+{
+ private static final DefaultClassPoolToClassPoolDomainAdaptorFactory INSTANCE = new DefaultClassPoolToClassPoolDomainAdaptorFactory();
+
+ private DefaultClassPoolToClassPoolDomainAdaptorFactory()
+ {
+
+ }
+
+ public static ClassPoolToClassPoolDomainAdaptorFactory getInstance()
+ {
+ return INSTANCE;
+ }
+
+ public ClassPoolToClassPoolDomainAdapter createAdaptor()
+ {
+ return new ClassPoolToClassPoolDomainAdapter();
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultParentDelegationStrategy.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/DefaultParentDelegationStrategy.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultParentDelegationStrategy.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/DefaultParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,54 @@
+/*
+* 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.classpool.base;
+
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+class DefaultParentDelegationStrategy extends AbstractParentDelegationStrategy
+{
+ boolean parentFirst;
+ DefaultParentDelegationStrategy(ClassPoolDomain parent, boolean parentFirst, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
+ {
+ super(parent, adaptorFactory);
+ this.parentFirst = parentFirst;
+ }
+
+ public boolean isParentBefore(String classname)
+ {
+ boolean isParentBefore = hasParent() && parentFirst == true;
+ if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentBefore " + isParentBefore);
+ return isParentBefore;
+ }
+
+ public boolean isParentAfter(String classname)
+ {
+ boolean isParentAfter = hasParent() && parentFirst == false;
+ if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentAfter " + isParentAfter);
+ return isParentAfter;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePlugin.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePlugin.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePlugin.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.base;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface IsLocalResourcePlugin
+{
+ boolean isMyResource(String resourceName);
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactory.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.base;
+
+
+/**
+ * Creates IsLocalResourcePlugins for a specific instance of {@link BaseClassPool}
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface IsLocalResourcePluginFactory
+{
+ IsLocalResourcePlugin create(BaseClassPool pool);
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactoryRegistry.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/IsLocalResourcePluginFactoryRegistry.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactoryRegistry.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/IsLocalResourcePluginFactoryRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,117 @@
+/*
+* 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.classpool.base;
+
+import java.net.URLClassLoader;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.jboss.util.loading.Translatable;
+
+/**
+ * A global registry for IsLocalResourcePluginFactories.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class IsLocalResourcePluginFactoryRegistry
+{
+ private static Map<Class<?>, IsLocalResourcePluginFactory> plugins = new WeakHashMap<Class<?>, IsLocalResourcePluginFactory>();
+
+ static
+ {
+ addPluginFactory(ClassLoader.class, new DefaultClassLoaderIsLocalResourcePluginFactory());
+ addPluginFactory(URLClassLoader.class, new URLClassLoaderIsLocalResourcePluginFactory());
+ addPluginFactory(Translatable.class, new TranslatableClassLoaderIsLocalResourcePluginFactory());
+ }
+
+ /**
+ * Registers {@code plugin} as the factory associated with the {@code classLoaderClass}.
+ *
+ * @param classLoaderClass the class of a specific ClassLoader
+ * @param plugin a plugin factory that will be used for classes loaded by
+ * a class loader of type {@code classLoaderClass}
+ */
+ public static synchronized void addPluginFactory(Class<?> classLoaderClass, IsLocalResourcePluginFactory plugin)
+ {
+ plugins.put(classLoaderClass, plugin);
+ }
+
+ /**
+ * Unregisters {@code plugin} as the factory associated with the {@code classLoaderClass}.
+ *
+ * @param classLoaderClass the class of a specific ClassLoader
+ * @param plugin a plugin factory that should no longer be used for classes loaded by
+ * a class loader of type {@code classLoaderClass}
+ */
+ public static synchronized void removePluginFactory(Class<?> classLoaderClass, IsLocalResourcePluginFactory plugin)
+ {
+ plugins.remove(classLoaderClass);
+ }
+
+ /**
+ * Returns the plugin factory associated with the {@code classLoader}.
+ *
+ * @return a plugin factory that should be used for classes loaded by
+ * {@code classLoader}
+ */
+ public static synchronized IsLocalResourcePluginFactory getPluginFactory(ClassLoader classLoader)
+ {
+ if (classLoader != null)
+ {
+ return getPluginFactory(classLoader.getClass());
+ }
+ return getPluginFactory(ClassLoader.class);
+ }
+
+ /**
+ * Returns the plugin factory associated with the {@code classLoaderClass}.
+ *
+ * @return a plugin factory that should be used for classes loaded by
+ * a class loader of type {@code classLoaderClass}
+ */
+ public static synchronized IsLocalResourcePluginFactory getPluginFactory(Class<?> classLoaderClass)
+ {
+ IsLocalResourcePluginFactory plugin = plugins.get(classLoaderClass);
+ if (plugin == null)
+ {
+ Class<?>[] interfaces = classLoaderClass.getInterfaces();
+ if (interfaces.length > 0)
+ {
+ for (Class<?> iface : interfaces)
+ {
+ plugin = getPluginFactory(iface);
+ if (plugin != null)
+ {
+ return plugin;
+ }
+ }
+ }
+ Class<?> superClass = classLoaderClass.getSuperclass();
+ if (superClass != null && superClass != Object.class)
+ {
+ return getPluginFactory(superClass);
+ }
+ }
+ return plugin;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ParentDelegationStrategy.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/ParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,44 @@
+/*
+* 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.classpool.base;
+
+
+import javassist.CtClass;
+
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+interface ParentDelegationStrategy
+{
+ void setDomain(ClassPoolDomain domain);
+
+ CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
+
+ boolean isParentBefore(String classname);
+
+ boolean isParentAfter(String classname);
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePlugin.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePlugin.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePlugin.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,59 @@
+/*
+* 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.classpool.base;
+
+import java.net.URL;
+
+import org.jboss.util.loading.Translatable;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TranslatableClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin
+{
+ public TranslatableClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
+ {
+ super(pool);
+ }
+
+ public boolean isMyResource(String resourceName)
+ {
+ ClassLoader loader = getPool().getClassLoader();
+ if (loader instanceof Translatable == false)
+ {
+ throw new IllegalStateException("ClassLoader is not instance of Translatable " + loader);
+ }
+ URL url = ((Translatable)getPool().getClassLoader()).getResourceLocally(resourceName);
+ if (url == null)
+ {
+ return false;
+ }
+ if (isSameInParent(resourceName, url))
+ {
+ return false;
+ }
+ return true;
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePluginFactory.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TranslatableClassLoaderIsLocalResourcePluginFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePluginFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/TranslatableClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,37 @@
+/*
+* 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.classpool.base;
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TranslatableClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
+{
+ public IsLocalResourcePlugin create(BaseClassPool pool)
+ {
+ return new TranslatableClassLoaderIsLocalResourcePlugin(pool);
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePlugin.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePlugin.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePlugin.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePlugin.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,55 @@
+/*
+* 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.classpool.base;
+
+import java.net.URL;
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class URLClassLoaderIsLocalResourcePlugin extends AbstractIsLocalResourcePlugin
+{
+ public URLClassLoaderIsLocalResourcePlugin(BaseClassPool pool)
+ {
+ super(pool);
+ }
+
+ public boolean isMyResource(String classResourceName)
+ {
+ //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)
+ {
+ return false;
+ }
+ if (isSameInParent(classResourceName, myURL))
+ {
+ return false;
+ }
+ return true;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePluginFactory.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/URLClassLoaderIsLocalResourcePluginFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePluginFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/base/URLClassLoaderIsLocalResourcePluginFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.base;
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class URLClassLoaderIsLocalResourcePluginFactory implements IsLocalResourcePluginFactory
+{
+
+ public IsLocalResourcePlugin create(BaseClassPool pool)
+ {
+ return new URLClassLoaderIsLocalResourcePlugin(pool);
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolDomain.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/AbstractClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,117 @@
+/*
+* 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.classpool.domain;
+
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.logging.Logger;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class AbstractClassPoolDomain implements ClassPoolDomain
+{
+ protected final Logger logger = Logger.getLogger(this.getClass());
+
+ protected abstract CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
+
+ protected CtClass getCachedOrCreateFromPoolParent(BaseClassPool initiatingPool, String classname, boolean create, boolean trace)
+ {
+ if (initiatingPool == null)
+ {
+ if (trace) logger.trace(this + " get cached or create " + classname + " from pool parent - no initiating pool");
+ return null;
+ }
+ ClassPool parentPool = initiatingPool.getParent();
+ if (parentPool == null)
+ {
+ if (trace) logger.trace(this + " get cached or create " + classname + " from pool parent - no parent pool");
+ return null;
+ }
+
+ return getCachedOrCreateFromPool(parentPool, classname, create, trace);
+ }
+
+
+ protected CtClass getCachedOrCreateFromPool(ClassPool pool, String classname, boolean create, boolean trace)
+ {
+ if (pool instanceof BaseClassPool)
+ {
+ return getCachedOrCreateFromPool((BaseClassPool)pool, classname, create, trace);
+ }
+ try
+ {
+ //This will check the parents
+ if (trace) logger.trace(this + " get cached or create " + classname + " from non-BaseClassPool pool " + pool);
+ CtClass clazz = pool.get(classname);
+ if (trace) logger.trace(this + " got cached or create " + classname + " from non-BaseClassPool pool " + clazz.getClassPool());
+ return clazz;
+ }
+ catch(NotFoundException e)
+ {
+ return null;
+ }
+ }
+
+ protected CtClass getCachedOrCreateFromPool(BaseClassPool pool, String classname, boolean create, boolean trace)
+ {
+ if (pool == null)
+ {
+ if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - no pool");
+ return null;
+ }
+
+ CtClass clazz = null;
+ if (!pool.childFirstLookup)
+ {
+ if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking parent (parentFirst)");
+ clazz = getCachedOrCreateFromPoolParent(pool, classname, create, trace);
+ }
+
+ if (clazz == null)
+ {
+ //We can use the exposed methods directly to avoid the overhead of NotFoundException
+ if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking cache");
+ clazz = pool.getCached(classname);
+ if (clazz == null && create)
+ {
+ if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - creating");
+ clazz = pool.createCtClass(classname, true);
+ }
+ }
+
+ if (clazz == null && pool.childFirstLookup)
+ {
+ if (trace) logger.trace(this + " get cached or create " + classname + " from BaseClassPool - checking parent (parentLast)");
+ clazz = getCachedOrCreateFromPoolParent(pool, classname, create, trace);
+ }
+ return clazz;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomain.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,40 @@
+/*
+ * 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.classpool.domain;
+
+import javassist.CtClass;
+
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ClassPoolDomain
+{
+ public void addClassPool(DelegatingClassPool pool);
+ public void removeClassPool(DelegatingClassPool pool);
+ public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create);
+ public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace);
+}
\ No newline at end of file
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomainRegistry.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolDomainRegistry.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomainRegistry.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolDomainRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,59 @@
+/*
+* 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.classpool.domain;
+
+import java.lang.ref.WeakReference;
+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, WeakReference<ClassPoolDomain>> domains = new WeakHashMap<Object, WeakReference<ClassPoolDomain>>();
+
+ public static ClassPoolDomainRegistry getInstance()
+ {
+ return INSTANCE;
+ }
+
+ public synchronized ClassPoolDomain getDomain(Object key)
+ {
+ WeakReference<ClassPoolDomain> ref = domains.get(key);
+ if (ref == null)
+ {
+ return null;
+ }
+ return ref.get();
+ }
+
+ public synchronized void addClassPoolDomain(Object key, ClassPoolDomain domain)
+ {
+ domains.put(key, new WeakReference<ClassPoolDomain>(domain));
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdapter.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdapter.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,99 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.classpool.domain;
+
+
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+
+/**
+ * Adapts a ClassPool to a ClassPoolDomain, i.e., this class represents an
+ * unitary ClassPoolDomain.
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassPoolToClassPoolDomainAdapter extends AbstractClassPoolDomain
+{
+ protected ClassPool pool;
+
+ public ClassPoolToClassPoolDomainAdapter()
+ {
+ this.pool = initialiseParentClassLoader();
+ if (logger.isTraceEnabled()) logger.trace("Created " + this);
+ validate();
+ }
+
+ public ClassPoolToClassPoolDomainAdapter(ClassPool pool)
+ {
+ this.pool = pool;
+ if (logger.isTraceEnabled()) logger.trace("Created " + this);
+ validate();
+ }
+
+ private void validate()
+ {
+ if (pool == null)
+ {
+ throw new IllegalStateException("Null parent classpool");
+ }
+ }
+
+ public ClassPool initialiseParentClassLoader()
+ {
+ return ClassPool.getDefault();
+ }
+
+ public void addClassPool(DelegatingClassPool pool)
+ {
+ throw new IllegalStateException("Cannot add pools to the domain adaptor");
+ }
+
+
+ public synchronized CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+ {
+ return getCachedOrCreateFromPool(pool, classname, create, trace);
+ }
+
+ @Override
+ protected CtClass getCachedOrCreateFromParent(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+ {
+ return null;
+ }
+
+ public void removeClassPool(DelegatingClassPool pool)
+ {
+ throw new IllegalStateException("Cannot remove pools from the domain adaptor");
+ }
+
+ public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, boolean create)
+ {
+ throw new IllegalStateException("Should never be called");
+ }
+
+ public String toString()
+ {
+ return "ClassPoolToDomainAdapter[" + System.identityHashCode(this) + " " + pool.toString() + "]";
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdaptorFactory.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolToClassPoolDomainAdaptorFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdaptorFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/domain/ClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.domain;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ClassPoolToClassPoolDomainAdaptorFactory
+{
+ ClassPoolToClassPoolDomainAdapter createAdaptor();
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/helpers/ClassLoaderUtils.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassLoaderUtils.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/helpers/ClassLoaderUtils.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/helpers/ClassLoaderUtils.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,99 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.classpool.helpers;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javassist.CtClass;
+import javassist.bytecode.Descriptor;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ClassLoaderUtils
+{
+ private static final Set<String> primitiveNames;
+ static
+ {
+ Set<String> temp = new HashSet<String>();
+ temp.add(CtClass.booleanType.getName());
+ temp.add(CtClass.byteType.getName());
+ temp.add(CtClass.charType.getName());
+ temp.add(CtClass.doubleType.getName());
+ temp.add(CtClass.floatType.getName());
+ temp.add(CtClass.intType.getName());
+ temp.add(CtClass.longType.getName());
+ temp.add(CtClass.shortType.getName());
+ temp.add(CtClass.voidType.getName());
+ primitiveNames = Collections.unmodifiableSet(temp);
+ }
+
+ public static String getResourceName(String classname)
+ {
+ final String name = stripArrayFromClassName(classname);
+ final int lastIndex = name.lastIndexOf('$');
+ if (lastIndex < 0)
+ {
+ return name.replaceAll("[\\.]", "/") + ".class";
+ }
+ else
+ {
+ return name.substring(0, lastIndex).replaceAll("[\\.]", "/") + name.substring(lastIndex) + ".class";
+ }
+ }
+
+ public static String getPackageName(String classname)
+ {
+ final int last = classname.lastIndexOf('.');
+ if (last < 0)
+ {
+ return "";
+ }
+ else
+ {
+ return classname.substring(0, last);
+ }
+ }
+
+ public static String stripArrayFromClassName(String classname)
+ {
+ if (classname.charAt(0) == '[')
+ {
+ return Descriptor.toClassName(classname);
+ }
+ if (classname.endsWith("[]"))
+ {
+ return classname.substring(0, classname.indexOf("[]"));
+ }
+ return classname;
+ }
+
+ public static boolean isPrimitiveType(String classname)
+ {
+ final String name = stripArrayFromClassName(classname);
+ return primitiveNames.contains(name);
+ }
+}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,84 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss4;
-
-import java.io.File;
-import java.net.URL;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision: 82781 $
- */
-public class JBossClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
-{
- ToClassInvoker toClassInvoker = null;
-
- protected JBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
- {
- super(cl, src, repository);
- toClassInvoker = new ToClassInvoker(tmp);
- }
-
- protected JBossClassPool(ClassPool src, ScopedClassPoolRepository repository)
- {
- super(src, repository);
- }
-
- public boolean isUnloadedClassLoader()
- {
- if (getClassLoader() instanceof RepositoryClassLoader)
- {
- RepositoryClassLoader rcl = (RepositoryClassLoader) getClassLoader();
- return rcl.getLoaderRepository() == null;
- }
- return false;
- }
-
- public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
- }
-
- public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return super.toClass(cc, loader, domain);
- }
-
- @Override
- public void lockInCache(CtClass clazz)
- {
- super.lockInCache(clazz);
- localResources.put(getResourceName(clazz.getName()), Boolean.TRUE);
- }
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPoolFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,129 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss4;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.AbstractClassPoolFactory;
-import org.jboss.classpool.AbstractJBossClassPoolFactory;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision: 70841 $
- **/
-public class JBossClassPoolFactory extends AbstractJBossClassPoolFactory implements AbstractClassPoolFactory
-{
- protected File tmpClassesDir;
-
- public JBossClassPoolFactory(File tmpClassesDir) throws IOException
- {
- this.tmpClassesDir = tmpClassesDir;
-
- }
- public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = getCreateParentClassPools(cl, src, repository);
- if (cl instanceof RepositoryClassLoader)
- {
- File tempdir = getTempDirectory(cl);
- URL tmpCP;
- try
- {
- tmpCP = createURLAndAddToLoader(cl, tempdir);
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
- if (ScopedRepositoryClassLoaderHelper.isScopedClassLoader(cl))
- {
- //It is scoped
- return new ScopedJBossClassPool(cl, parent, repository, tempdir, tmpCP);
- }
- return new JBossClassPool(cl, parent, repository, tempdir, tmpCP);
- }
- return new AbstractClassPool(cl, parent, repository);
- }
-
- 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) throws IOException
- {
- 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;
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/LoaderRepositoryUrlUtil.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/LoaderRepositoryUrlUtil.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/LoaderRepositoryUrlUtil.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,173 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss4;
-
-import java.net.URL;
-
-import javax.management.InstanceNotFoundException;
-import javax.management.MBeanServer;
-import javax.management.Notification;
-import javax.management.NotificationListener;
-import javax.management.ObjectName;
-
-import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
-import org.jboss.mx.loading.LoaderRepository;
-import org.jboss.mx.util.MBeanServerLocator;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class LoaderRepositoryUrlUtil implements NotificationListener
-{
- final static MBeanServer SERVER;
- final static ObjectName MAIN_LOADER_REPOSITORY_OBJECT_NAME;
- final static LoaderRepository MAIN_LOADER_REPOSITORY;
- static
- {
- SERVER = MBeanServerLocator.locateJBoss();
- try
- {
- MAIN_LOADER_REPOSITORY_OBJECT_NAME = new ObjectName("JMImplementation:name=Default,service=LoaderRepository");
- MAIN_LOADER_REPOSITORY = (LoaderRepository)SERVER.invoke(MAIN_LOADER_REPOSITORY_OBJECT_NAME, "getInstance", new Object[0], new String[0]);
- }
- catch (Exception e)
- {
- throw new RuntimeException(e);
- }
- }
-
- long currentSequenceNumber;
- long lastSequenceNumber = -1;
- URL[] urls;
-
- public LoaderRepositoryUrlUtil()
- {
- try
- {
- SERVER.addNotificationListener(MAIN_LOADER_REPOSITORY_OBJECT_NAME, this, null, null);
- }
- catch (InstanceNotFoundException e)
- {
- throw new RuntimeException(e);
- }
- }
-
- public synchronized void handleNotification(Notification notification, Object handback)
- {
- if (notification.getType().equals(LoaderRepository.CLASSLOADER_ADDED))
- {
- currentSequenceNumber = notification.getSequenceNumber();
- }
- else if (notification.getType().equals(LoaderRepository.CLASSLOADER_REMOVED))
- {
- currentSequenceNumber = notification.getSequenceNumber();
- }
- }
-
- public synchronized UrlInfo getURLInfo(HeirarchicalLoaderRepository3 scopedLoader, UrlInfo urlInfo)
- {
- boolean changed = false;
- if (lastSequenceNumber != currentSequenceNumber)
- {
- urls = MAIN_LOADER_REPOSITORY.getURLs();
- lastSequenceNumber = currentSequenceNumber;
- changed = true;
- }
- if (!changed)
- {
- changed = urlInfo != null && (urlInfo.getSequenceNumber() != lastSequenceNumber);
- }
- if (urlInfo == null || changed)
- {
- URL[] localUrls = getLocalUrls(scopedLoader, urls);
- urlInfo = new UrlInfo(urls, localUrls, lastSequenceNumber);
- }
- return urlInfo;
- }
-
- public long getCurrentSequenceNumber()
- {
- return currentSequenceNumber;
- }
-
- private URL[] getLocalUrls(HeirarchicalLoaderRepository3 scopedRepository, URL[] globalUrls)
- {
- URL[] scopedRepositoryUrls = scopedRepository.getURLs();
-
- //This is a bit of a hack, since this relies on the order of the urls returned by HeirarchicalLoaderRepository3
- //My urls, followed by parent urls.
- int scopedLength = 0;
- for (int i = 0 ; i < scopedRepositoryUrls.length ; i++)
- {
- for (int j = 0 ; j < globalUrls.length ; j ++)
- {
- if (scopedRepositoryUrls[i].equals(globalUrls[j]))
- {
- scopedLength = i;
- break;
- }
- }
- if (scopedLength > 0)
- {
- break;
- }
- }
-
- URL[] localUrls = new URL[scopedLength];
- System.arraycopy(scopedRepositoryUrls, 0, localUrls, 0, scopedLength);
- return localUrls;
- }
-
- public class UrlInfo
- {
-
- URL[] globalUrls;
- URL[] localUrls;
- long sequenceNumber;
-
- public UrlInfo(URL[] globalUrls, URL[] localUrls, long sequenceNumber)
- {
- super();
- this.globalUrls = globalUrls;
- this.localUrls = localUrls;
- this.sequenceNumber = sequenceNumber;
- }
-
- public URL[] getGlobalUrls()
- {
- return globalUrls;
- }
-
- public URL[] getLocalUrls()
- {
- return localUrls;
- }
-
- public long getSequenceNumber()
- {
- return sequenceNumber;
- }
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedJBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedJBossClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedJBossClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,273 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss4;
-
-import java.io.File;
-import java.net.URL;
-import java.util.ArrayList;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.jboss4.LoaderRepositoryUrlUtil.UrlInfo;
-import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
-import org.jboss.mx.loading.LoaderRepository;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * A classpool in JBoss backed by a scoped (HierarchicalLoaderRepository) loader repository
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class ScopedJBossClassPool extends JBossClassPool
-{
- final static LoaderRepositoryUrlUtil LOADER_REPOSITORY_UTIL = new LoaderRepositoryUrlUtil();
-
- private UrlInfo urlInfo;
- private ThreadLocal<ClassPool> lastPool = new ThreadLocal<ClassPool>();
-
- public ScopedJBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, File tmp, URL tmpURL)
- {
- super(cl, src, repository, tmp, tmpURL);
-
- boolean parentFirst = false;
- LoaderRepository loaderRepository = null;
- ClassLoader prnt = cl;
- while (prnt != null)
- {
- if (prnt instanceof RepositoryClassLoader)
- {
- loaderRepository = ((RepositoryClassLoader)prnt).getLoaderRepository();
- if (loaderRepository instanceof HeirarchicalLoaderRepository3)
- {
- parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
- }
- break;
- }
- prnt = SecurityActions.getParent(cl);
- }
-
- super.childFirstLookup = !parentFirst;
- }
-
-
- private HeirarchicalLoaderRepository3 getRepository()
- {
- ClassLoader cl = getClassLoader0();
- if (cl != null)
- {
- return (HeirarchicalLoaderRepository3)((RepositoryClassLoader)cl).getLoaderRepository();
- }
- return null;
- }
-
- private URL getResourceUrlForClass(String resourcename)
- {
- HeirarchicalLoaderRepository3 repo = getRepository();
- return repo.getResource(resourcename, super.getClassLoader());
- }
-
- private boolean isMine(URL url)
- {
- HeirarchicalLoaderRepository3 repo = getRepository();
- if (repo != null)
- {
- //The URL of the class loaded with my scoped classloader
- if (url != null)
- {
- urlInfo = LOADER_REPOSITORY_UTIL.getURLInfo(getRepository(), urlInfo);
-
- URL[] myUrls = urlInfo.getLocalUrls();
- String resource = url.toString();
- for (int i = 0 ; i < myUrls.length ; i++)
- {
- if (resource.indexOf(myUrls[i].toString()) >= 0)
- {
- return true;
- }
- }
- return false;
- }
- }
- return true;
- }
-
- public CtClass getCached(String classname)
- {
- if (classname == null)
- {
- return null;
- }
- if (isUnloadedClassLoader())
- {
- return null;
- }
-
- if (generatedClasses.get(classname) != null)
- {
- //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
- return super.getCached(classname);
- }
-
- //Is this from the scoped classloader itself of from the parent?
- String resourcename = getResourceName(classname);
- URL url = getResourceUrlForClass(resourcename);
- boolean isMine = isMine(url);
-
- if (isMine)
- {
- if (super.childFirstLookup)
- {
- //Parent delegation is false, attempt to get this class out of ourselves
- CtClass clazz = super.getCachedLocally(classname);
- if (clazz == null)
- {
- clazz = createCtClass(classname, false);
- if (clazz != null)
- {
- lockInCache(clazz);
- }
- }
- if (clazz != null)
- {
- return clazz;
- }
- }
- return super.getCached(classname);
- }
-
-
- try
- {
- ClassPool pool = getCorrectPoolForResource(classname, url);
- if (pool != lastPool.get())
- {
- lastPool.set(pool);
- return pool.get(classname);
- }
- }
- catch (NotFoundException e)
- {
- }
- catch(StackOverflowError e)
- {
- throw e;
- }
- finally
- {
- lastPool.set(null);
- }
-
- return null;
- }
-
- @Override
- protected boolean includeInGlobalSearch()
- {
- return false;
- }
-
- private ClassPool getCorrectPoolForResource(String classname, URL url)
- {
- ClassPoolRepository classPoolRepository = ClassPoolRepository.getInstance();
- synchronized(classPoolRepository.getRegisteredCLs())
- {
- //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
- //FIXME This needs revisiting/removing once the
- ArrayList<AbstractClassPool> noAnnotationURLClassLoaderPools = null;
- String resource = url.toString();
- for(ClassPool pool : classPoolRepository.getRegisteredCLs().values())
- {
- AbstractClassPool candidate = (AbstractClassPool)pool;
- if (candidate.isUnloadedClassLoader())
- {
- classPoolRepository.unregisterClassLoader(candidate.getClassLoader());
- continue;
- }
-
- if (candidate.getClassLoader() instanceof RepositoryClassLoader)
- {
- //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
- RepositoryClassLoader rcl = (RepositoryClassLoader)candidate.getClassLoader();
- URL[] urls = rcl.getClasspath();
-
- for (int i = 0 ; i < urls.length ; i++)
- {
- if (resource.indexOf(urls[i].getFile()) >= 0)
- {
- return candidate;
- }
- }
- }
- //FIXME Remove once we have the JBoss 5 version of pool
- else if (isInstanceOfNoAnnotationURLClassLoader(candidate.getClassLoader()))
- {
- if (noAnnotationURLClassLoaderPools == null)
- {
- noAnnotationURLClassLoaderPools = new ArrayList<AbstractClassPool>();
- }
- noAnnotationURLClassLoaderPools.add(candidate);
- }
- }
-
- //FIXME Remove once we have the JBoss 5 version of pool
- if (noAnnotationURLClassLoaderPools != null)
- {
- for (AbstractClassPool pool : noAnnotationURLClassLoaderPools)
- {
- try
- {
- pool.get(classname);
- return pool;
- }
- catch(NotFoundException ignoreTryNext)
- {
- }
- }
- }
- }
- return ClassPoolRepository.getInstance().getClassPoolFactory().
- create(ClassPool.getDefault(), ClassPoolRepository.getInstance());
- }
-
- /**
- * NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
- */
- private boolean isInstanceOfNoAnnotationURLClassLoader(ClassLoader loader)
- {
- Class<?> parent = loader.getClass();
- while (parent != null)
- {
- if ("NoAnnotationURLClassLoader".equals(parent.getSimpleName()))
- {
- return true;
- }
- parent = parent.getSuperclass();
- }
- return false;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedRepositoryClassLoaderHelper.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedRepositoryClassLoaderHelper.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedRepositoryClassLoaderHelper.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,51 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss4;
-
-import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
-import org.jboss.mx.loading.LoaderRepository;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @autor adrian at jboss.org
- * @version $Revision$
- */
-public class ScopedRepositoryClassLoaderHelper
-{
- public static boolean isScopedClassLoader(ClassLoader loader)
- {
- boolean scoped = false;
- if (loader instanceof RepositoryClassLoader)
- {
- LoaderRepository repository = ((RepositoryClassLoader)loader).getLoaderRepository();
- if (repository instanceof HeirarchicalLoaderRepository3)
- {
- scoped = true;
- //HeirarchicalLoaderRepository3 hlr = (HeirarchicalLoaderRepository3)repository;
- //boolean parentFirst = hlr.getUseParentFirst();
- }
- }
- return scoped;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/SecurityActions.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,84 +0,0 @@
-/*
-* 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.classpool.jboss4;
-
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class SecurityActions
-{
- interface GetParentAction
- {
- ClassLoader getParent(ClassLoader loader);
-
- GetParentAction NON_PRIVILEGED = new GetParentAction()
- {
- public ClassLoader getParent(ClassLoader loader)
- {
- return loader.getParent();
- }
- };
-
- GetParentAction PRIVILEGED = new GetParentAction()
- {
- public ClassLoader getParent(final ClassLoader loader)
- {
- try
- {
- return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
- {
- public ClassLoader run() throws Exception
- {
- return loader.getParent();
- }
- });
- }
- catch (PrivilegedActionException e)
- {
- throw new RuntimeException(e.getException());
- }
- }
- };
- }
-
- public static ClassLoader getParent(ClassLoader loader)
- {
- if (loader == null)
- {
- return null;
- }
- if (System.getSecurityManager() == null)
- {
- return GetParentAction.NON_PRIVILEGED.getParent(loader);
- }
- else
- {
- return GetParentAction.PRIVILEGED.getParent(loader);
- }
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvoker.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvoker.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvoker.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,103 +0,0 @@
-/*
-* 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.classpool.jboss4;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-import org.jboss.logging.Logger;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class ToClassInvoker
-{
- Logger logger = Logger.getLogger(this.getClass());
-
- public File tmpDir;
-
- public Object tmplock = new Object();
-
- public ToClassInvoker(File tmpDir)
- {
- this.tmpDir = tmpDir;
- }
-
- public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain)
- throws CannotCompileException
- {
- boolean trace = logger.isTraceEnabled();
- pool.lockInCache(cc);
- final ClassLoader myloader = pool.getClassLoader();
- if (myloader == null || tmpDir == null)
- {
- if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tmpDir:" + tmpDir + " default to superPool.toClass for " + cc.getName());
- Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
- if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
- return clazz;
- }
- Class<?> dynClass = null;
- try
- {
- File classFile = null;
- // Write the clas file to the tmpdir
- synchronized (tmplock)
- {
- classFile = new File(tmpDir, classFileName);
- if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + classFile);
- 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)myloader;
- rcl.clearClassBlackList();
- rcl.clearResourceBlackList();
-
- // Now load the class through the cl
- dynClass = myloader.loadClass(cc.getName());
- if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + dynClass);
- return dynClass;
- }
- catch (Exception ex)
- {
- ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName());
- cfe.initCause(ex);
- throw cfe;
- }
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvokerPoolReference.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvokerPoolReference.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvokerPoolReference.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,39 +0,0 @@
-/*
-* 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.classpool.jboss4;
-
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface ToClassInvokerPoolReference
-{
- Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
- ClassLoader getClassLoader();
- void lockInCache(CtClass clazz);
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/DomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/DomainRegistry.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/DomainRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,55 +0,0 @@
-package org.jboss.classpool.jboss5;
-/*
-* 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.
-*/
-
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.dependency.Module;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface DomainRegistry
-{
- ClassLoaderSystem getSystem();
-
- ClassLoaderDomain getDefaultDomain();
-
- boolean initMapsForLoader(ClassLoader loader, Module module, ClassLoader parentUnitLoader);
-
- void cleanupLoader(ClassLoader loader);
-
- ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl);
-
- ClassLoader getParentUnitLoader(ClassLoader loader);
-
- Module getModule(ClassLoader loader);
-
- ClassLoader getClassLoader(Module module);
-
- //List<ScopedVFSClassLoaderDomain> getAOPDomainsForClassLoaderDomain(ClassLoaderDomain domain);
-
- //ReadWriteLock getAOPDomainsLockForClassLoaderDomain(ClassLoaderDomain domain);
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,76 +0,0 @@
-/*
-* 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.classpool.jboss5;
-
-import java.net.URL;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.AbstractClassPool;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBoss5ClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
-{
- protected ToClassInvoker toClassInvoker = null;
-
- boolean closed;
-
- protected JBoss5ClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, URL tmpURL)
- {
- super(cl, src, repository);
- toClassInvoker = new ToClassInvoker(tmpURL);
- }
-
- protected JBoss5ClassPool(ClassPool src, ScopedClassPoolRepository repository)
- {
- super(src, repository);
- }
-
- public boolean isUnloadedClassLoader()
- {
- return closed;
- }
-
- public void close()
- {
- closed = true;
- super.close();
- }
-
- public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
- }
-
- public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return super.toClass(cc, loader, domain);
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPoolFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,101 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss5;
-
-import java.net.URL;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.AbstractJBossClassPoolFactory;
-import org.jboss.classpool.ClassPoolRepository;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision: 64815 $
- **/
-public class JBoss5ClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
-{
- private DomainRegistry registry;
-
- public JBoss5ClassPoolFactory(DomainRegistry registry)
- {
- this.registry = registry;
- }
-
- public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = getCreateParentClassPools(cl, src, repository);
-
- AbstractClassPool pool = null;
-
- if (cl instanceof RealClassLoader)
- {
- Module module = registry.getModule(cl);
- if (module != null && module.getDeterminedParentDomainName() != null)
- {
- //It is scoped
- ClassLoaderSystem sys = registry.getSystem();
- ClassLoaderDomain domain = sys.getDomain(module.getDeterminedDomainName());
- boolean parentFirst = module.isJ2seClassLoadingCompliance();
- ClassPool parentDomainPool = getParentUnitClassPool(cl);
- pool = new ScopedJBoss5ClassPool(cl, parent, parentDomainPool, repository, getTempURL(module), parentFirst, domain);
- }
- else
- {
- pool = new JBoss5ClassPool(cl, parent, repository, getTempURL(module));
- }
- }
-
- if (pool == null)
- {
- pool = new AbstractClassPool(cl, parent, repository);
- }
- log.debug("Created pool " + pool + " for loader " + cl);
-
- return pool;
- }
-
- private ClassPool getParentUnitClassPool(ClassLoader cl)
- {
- ClassLoader parent = registry.getParentUnitLoader(cl);
- return ClassPoolRepository.getInstance().registerClassLoader(parent);
- }
-
-
- private URL getTempURL(Module module)
- {
- if (module == null)
- return null;
-
- return module.getDynamicClassRoot();
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/RegisterModuleCallback.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/RegisterModuleCallback.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/RegisterModuleCallback.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,68 +0,0 @@
-/*
-* 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.classpool.jboss5;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.logging.Logger;
-
-/**
- * Use with org.jboss.classpool.jbosscl.JBossClDelegatingClassPoolFactory
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class RegisterModuleCallback
-{
- Logger logger = Logger.getLogger(this.getClass());
-
- private Set<Module> registeredModules = new HashSet<Module>();
- private Set<Module> unregisteredModules = new HashSet<Module>();
-
- public synchronized void addModule(Module module)
- {
- logger.debug("Adding module " + module);
- unregisteredModules.add(module);
- }
-
- public synchronized void removeModule(Module module)
- {
- logger.debug("Removing module " + module);
- registeredModules.remove(module);
- unregisteredModules.remove(module);
- }
-
- public synchronized Set<Module> getUnregisteredModules()
- {
- return Collections.unmodifiableSet(new HashSet<Module>(unregisteredModules));
- }
-
- public synchronized void registerModule(Module module)
- {
- logger.debug("Registering module " + module);
- registeredModules.add(module);
- unregisteredModules.remove(module);
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ScopedJBoss5ClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ScopedJBoss5ClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ScopedJBoss5ClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,400 +0,0 @@
-/*
-* 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.classpool.jboss5;
-
-import java.lang.ref.WeakReference;
-import java.net.URL;
-import java.util.ArrayList;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.Loader;
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.ClassPoolRepository;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class ScopedJBoss5ClassPool extends JBoss5ClassPool
-{
- ThreadLocal<ClassPool> lastPool = new ThreadLocal<ClassPool>();
- WeakReference<ClassLoaderDomain> domainRef;
- /** The classpool representing the parent domain of this one */
- ClassPool parentDomainPool;
-
- public ScopedJBoss5ClassPool(ClassLoader cl, ClassPool src, ClassPool parentDomainPool, ScopedClassPoolRepository repository,
- URL tmpURL, boolean parentFirst, ClassLoaderDomain domain)
- {
- super(cl, src, repository, tmpURL);
- super.childFirstLookup = !parentFirst;
- this.parentDomainPool = parentDomainPool;
- this.domainRef = new WeakReference<ClassLoaderDomain>(domain);
-
- logger.debug("Created new ScopedJBoss5ClasPool for " + cl + ", with parent: " + src + ", parentDomain: " + parentDomainPool + ", parentFirst: " + parentFirst);
- }
-
- private URL getResourceUrlForClass(String resourcename)
- {
- ClassLoaderDomain domain = domainRef.get();
- return domain.getResource(resourcename);
- }
-
- private boolean isMine(URL myURL, String resourceName)
- {
- if (myURL == null)
- {
- return false;
- }
-
- ClassLoaderDomain domain = domainRef.get();
- Loader parent = domain.getParent();
- URL parentURL = parent.getResource(resourceName);
-
- if (parentURL == null)
- {
- return true;
- }
-
- if (!myURL.equals(parentURL))
- {
- return true;
- }
-
- return false;
- }
-
-
- @Override
- protected synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
- {
- CtClass clazz = null;
- if (useCache)
- {
- clazz = getCached(classname);
- if (clazz != null)
- return clazz;
- }
-
- if (!childFirstLookup)
- {
- if (parentDomainPool != null)
- {
- clazz = performGet(parentDomainPool, classname);
- if (clazz != null)
- {
- return clazz;
- }
- }
- if (parent != null)
- {
- clazz = performGet(parent, classname);
- if (clazz != null)
- {
- return clazz;
- }
- }
- }
-
- clazz = createCtClass(classname, useCache);
- if (clazz != null)
- {
- // clazz.getName() != classname if classname is "[L<name>;".
- if (useCache)
- cacheCtClass(clazz.getName(), clazz, false);
-
- return clazz;
- }
-
- if (childFirstLookup)
- {
- if (parent != null)
- {
- clazz = performGet(parent, classname);
- if (clazz != null)
- {
- return clazz;
- }
- }
- if (parentDomainPool != null)
- {
- clazz = performGet(parentDomainPool, classname);
- if (clazz != null)
- {
- return clazz;
- }
- }
- }
-
- return clazz;
- }
-
- private CtClass performGet(ClassPool pool, String classname)
- {
- try
- {
- // TODO check whether we should enable this optimization
- //Want to avoid calling get() if possible since that creates NotFoundExceptions
- //on misses which is expensive
- /*if (pool instanceof AbstractClassPool)
- {
- return ((AbstractClassPool)pool).internalGet0(classname, true);
- }
- else
- {*/
- return pool.getCtClass(classname);
- }
- catch (NotFoundException e)
- {
- return null;
- }
- }
-
-
- public CtClass getCached(String classname)
- {
- boolean trace = logger.isTraceEnabled();
-
- if (trace)
- {
- logger.trace("getCached() " + classname);
- }
-
- if (classname == null)
- {
- if (trace)
- {
- logger.trace("getCached() returning null (classname == null)");
- }
- return null;
- }
- if (isUnloadedClassLoader())
- {
- if (trace)
- {
- logger.trace("getCached() returning null (unloaded)");
- }
- return null;
- }
-
- if (generatedClasses.get(classname) != null)
- {
- //It is a new class, and this callback is probably coming from the frozen check when creating a new nested class
- if (trace)
- {
- logger.trace("getCached() In generated classes - check super");
- }
- return super.getCached(classname);
- }
-
- //Is this from the scoped classloader itself of from the parent?
- String resourcename = getResourceName(classname);
- URL url = getResourceUrlForClass(resourcename);
-
- if (isMine(url, resourcename))
- {
- if (super.childFirstLookup)
- {
- //Parent delegation is false, attempt to get this class out of ourselves
- CtClass clazz = super.getCachedLocally(classname);
- if (clazz == null)
- {
- if (trace)
- {
- logger.trace("getCached() Creating my class " + classname);
- }
- clazz = createCtClass(classname, false);
- if (clazz != null)
- {
- lockInCache(clazz);
- }
- }
- if (clazz != null)
- {
- if (trace)
- {
- logger.trace("getCached() Returning my class " + classname);
- }
- return clazz;
- }
- }
- if (trace)
- {
- logger.trace("getCached() Checking super for my class " + classname);
- }
- return super.getCached(classname);
- }
- else if (url == null)
- {
- if (trace)
- {
- logger.trace("getCached() Checking super for my class " + classname + " (no url)");
- }
- return super.getCached(classname);
- }
-
-
- try
- {
- ClassPool pool = getCorrectPoolForResource(classname, resourcename, url, trace);
- if (trace)
- {
- logger.trace("getCached() Found pool for class " + classname + " " + pool);
- }
- if (pool != lastPool.get())
- {
- lastPool.set(pool);
- CtClass found = pool.get(classname);
- if (trace)
- {
- logger.trace("getCached() Found clazz " + classname + " in " + pool + " : " + found);
- }
- return found;
- }
- }
- catch (NotFoundException e)
- {
- }
- catch(StackOverflowError e)
- {
- throw e;
- }
- finally
- {
- lastPool.set(null);
- }
-
- return null;
- }
-
- @Override
- protected boolean includeInGlobalSearch()
- {
- return false;
- }
-
- private ClassPool getCorrectPoolForResource(String classname, String resourceName, URL url, boolean trace)
- {
- synchronized(ClassPoolRepository.getInstance().getRegisteredCLs())
- {
- //JBoss 5 has an extra NoAnnotationURLCLassLoader that is not on the default path, make sure that that is checked at the end
- //FIXME This needs revisiting/removing once the
- ArrayList<ClassPool> noAnnotationURLClassLoaderPools = null;
-
- ClassPoolRepository classPoolRepository = ClassPoolRepository.getInstance();
- for(ClassPool classPool: classPoolRepository.getRegisteredCLs().values())
- {
- AbstractClassPool candidate = (AbstractClassPool)classPool;
- if (candidate.isUnloadedClassLoader())
- {
- classPoolRepository.unregisterClassLoader(candidate.getClassLoader());
- continue;
- }
-
- if (candidate.getClassLoader() instanceof RealClassLoader)
- {
- //Sometimes the ClassLoader is a proxy for MBeanProxyExt?!
- RealClassLoader bcl = (RealClassLoader)candidate.getClassLoader();
- URL foundUrl = bcl.getResourceLocally(resourceName);
- if (foundUrl != null)
- {
- if (url.equals(foundUrl))
- {
- if (trace)
- {
- logger.trace("getCorrectPoolForResource() Candidate classloader " + bcl + " has local resource " + foundUrl);
- }
- return candidate;
- }
- }
- }
- //FIXME Remove once we have the JBoss 5 version of pool
- else if (isInstanceOfNoAnnotationURLClassLoader(candidate.getClassLoader()))
- {
- if (noAnnotationURLClassLoaderPools == null)
- {
- noAnnotationURLClassLoaderPools = new ArrayList<ClassPool>();
- }
- noAnnotationURLClassLoaderPools.add(candidate);
- }
- }
-
- //FIXME Remove once we have the JBoss 5 version of pool
- if (noAnnotationURLClassLoaderPools != null)
- {
- for (ClassPool pool : noAnnotationURLClassLoaderPools)
- {
- try
- {
- pool.get(classname);
- if (trace)
- {
- logger.trace("getCorrectPoolForResource(() Found " + classname + " (no url)");
- }
- return pool;
- }
- catch(NotFoundException ignoreTryNext)
- {
- }
- }
- }
- }
- return createTempPool();
- }
-
- private ClassPool createTempPool()
- {
- //Rememeber that the stuff in jboss5/lib goes in a child classloader of the default classloader. We need
- //to make this the parent of the temp classloader
- ClassLoader loader = this.getClass().getClassLoader();// AspectManager.class.getClassLoader(); TODO validate this
- ClassPool pool = ClassPoolRepository.getInstance().registerClassLoader(loader);
- return ClassPoolRepository.getInstance().getClassPoolFactory().create(pool, ClassPoolRepository.getInstance());
- }
-
- /**
- * NoAnnotationURLCLassLoader lives in different packages in JBoss 4 and 5
- */
- private boolean isInstanceOfNoAnnotationURLClassLoader(ClassLoader loader)
- {
- if (loader == null)
- {
- return false;
- }
- Class<?> parent = loader.getClass();
- while (parent != null)
- {
- if ("NoAnnotationURLClassLoader".equals(parent.getSimpleName()))
- {
- return true;
- }
- parent = parent.getSuperclass();
- }
- return false;
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/SecurityActions.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,80 +0,0 @@
-/*
-* 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.classpool.jboss5;
-
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class SecurityActions
-{
- interface GetParentAction
- {
- ClassLoader getParent(ClassLoader loader);
-
- GetParentAction NON_PRIVILEGED = new GetParentAction()
- {
- public ClassLoader getParent(ClassLoader loader)
- {
- return loader.getParent();
- }
- };
-
- GetParentAction PRIVILEGED = new GetParentAction()
- {
- public ClassLoader getParent(final ClassLoader loader)
- {
- try
- {
- return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
- {
- public ClassLoader run() throws Exception
- {
- return loader.getParent();
- }
- });
- }
- catch (PrivilegedActionException e)
- {
- throw new RuntimeException(e.getException());
- }
- }
- };
- }
-
- public static ClassLoader getParent(ClassLoader loader)
- {
- if (System.getSecurityManager() == null)
- {
- return GetParentAction.NON_PRIVILEGED.getParent(loader);
- }
- else
- {
- return GetParentAction.PRIVILEGED.getParent(loader);
- }
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvoker.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvoker.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvoker.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,102 +0,0 @@
-/*
-* 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.classpool.jboss5;
-
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayOutputStream;
-import java.net.URL;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.logging.Logger;
-import org.jboss.virtual.plugins.context.memory.MemoryContextFactory;
-
-/**
- *
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class ToClassInvoker
-{
- Logger logger = Logger.getLogger(this.getClass());
-
- public URL tempURL;
-
- public Object tmplock = new Object();
-
- public ToClassInvoker(URL tempURL)
- {
- this.tempURL = tempURL;
- }
-
- public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- boolean trace = logger.isTraceEnabled();
- pool.lockInCache(cc);
- final ClassLoader myloader = pool.getClassLoader();
- if (myloader == null || tempURL == null)
- {
- if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tempURL:" + tempURL + " default to superPool.toClass for " + cc.getName());
- Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
- if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
- return clazz;
- }
-
- try
- {
- URL outputURL = new URL(tempURL.toString() + "/" + classFileName);
- //Write the classfile to the temporary url
- synchronized (tmplock)
- {
- if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + tempURL);
- ByteArrayOutputStream byteout = new ByteArrayOutputStream();
- BufferedOutputStream out = new BufferedOutputStream(byteout);
- out.write(cc.toBytecode());
- out.flush();
- out.close();
-
- byte[] classBytes = byteout.toByteArray();
- MemoryContextFactory factory = MemoryContextFactory.getInstance();
- factory.putFile(outputURL, classBytes);
-
- if (myloader instanceof RealClassLoader)
- {
- ((RealClassLoader)myloader).clearBlackList(classFileName);
- }
-
- Class<?> clazz = myloader.loadClass(cc.getName());
- if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
- return clazz;
- }
- }
- catch(Exception e)
- {
- ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName() + " on " + this + " loader:" + myloader);
- cfe.initCause(e);
- throw cfe;
- }
- }
-}
\ No newline at end of file
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvokerPoolReference.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvokerPoolReference.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvokerPoolReference.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,40 +0,0 @@
-/*
-* 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.classpool.jboss5;
-
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-/**
- * Exposes methods on ClassPool needed by JBoss5ClassPool
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface ToClassInvokerPoolReference
-{
- Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
- ClassLoader getClassLoader();
- void lockInCache(CtClass clazz);
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/VFSClassLoaderDomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/VFSClassLoaderDomainRegistry.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/VFSClassLoaderDomainRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,239 +0,0 @@
-package org.jboss.classpool.jboss5;
-/*
-* 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.
-*/
-
-
-import java.lang.ref.WeakReference;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.dependency.Module;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class VFSClassLoaderDomainRegistry implements DomainRegistry
-{
- protected final static ClassLoaderDomain domain = new ClassLoaderDomain("NOT_USED_PLACEHOLDER");
-
- private ClassLoaderSystem system;
-
- private ClassLoaderDomain defaultDomain;
-
- /** classloader domains by their classloaders */
- protected Map<ClassLoader, WeakReference<ClassLoaderDomain>> classLoaderDomainsByLoader = new WeakHashMap<ClassLoader, WeakReference<ClassLoaderDomain>>();
-
- /** parent deployment unit classloaders indexed by children */
- private Map<ClassLoader, WeakReference<ClassLoader>> classLoaderUnitParents = new WeakHashMap<ClassLoader, WeakReference<ClassLoader>>();
-
- /** Modules by classloader */
- private Map<ClassLoader, WeakReference<Module>> classLoaderModules = new WeakHashMap<ClassLoader, WeakReference<Module>>();
-
- /** classloaders by module */
- private Map<Module, WeakReference<ClassLoader>> moduleClassLoaders = new WeakHashMap<Module, WeakReference<ClassLoader>>();
-
- protected Map<ClassLoaderDomain, Integer> classLoaderDomainReferenceCounts = new WeakHashMap<ClassLoaderDomain, Integer>();
-
- /**
- * Needed for the tests, not expected to be needed in production
- */
- public void setSystem(ClassLoaderSystem system)
- {
- this.system = system;
- }
-
- /**
- * Needed for the tests, not expected to be needed in production
- */
- public void setDefaultDomain(ClassLoaderDomain domain)
- {
- this.defaultDomain = domain;
- }
-
- public synchronized ClassLoaderSystem getSystem()
- {
- if (system == null)
- {
- system = ClassLoaderSystem.getInstance();
- }
- return system;
- }
-
- public synchronized ClassLoaderDomain getDefaultDomain()
- {
- if (defaultDomain == null)
- {
- defaultDomain = getSystem().getDefaultDomain();
- }
- return defaultDomain;
- }
-
- public synchronized boolean initMapsForLoader(ClassLoader loader, Module module, ClassLoader parentUnitLoader)
- {
- if (loader == parentUnitLoader)
- {
- throw new IllegalArgumentException("initMapsForLoader() should only be called if parentUnitLoader is different from loader");
- }
- ClassLoaderSystem system = getSystem();
-
- String domainName = module.getDeterminedDomainName();
- ClassLoaderDomain clDomain = system.getDomain(domainName);
- this.validateInitMaps(loader, clDomain, module, parentUnitLoader);
-
- boolean ret = false;
- if (!classLoaderDomainsByLoader.containsKey(loader))
- {
- Integer count = classLoaderDomainReferenceCounts.get(clDomain);
- int cnt = count == null ? 0 : count.intValue();
- classLoaderDomainReferenceCounts.put(clDomain, cnt);
-
- classLoaderDomainsByLoader.put(loader, new WeakReference<ClassLoaderDomain>(clDomain));
- classLoaderUnitParents.put(loader, new WeakReference<ClassLoader>(parentUnitLoader));
- classLoaderModules.put(loader, new WeakReference<Module>(module));
- moduleClassLoaders.put(module, new WeakReference<ClassLoader>(loader));
- ret = true;
- this.initMapsDone(loader, clDomain, module, parentUnitLoader);
- }
-
-
- return ret;
- }
-
- protected void validateInitMaps(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
- {
-
- }
-
- protected void initMapsDone(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
- {
-
- }
-
- public synchronized void cleanupLoader(ClassLoader loader)
- {
- validateCleanupLoader(loader);
- WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.remove(loader);
- ClassLoaderDomain clDomain = clDomainRef == null ? null : clDomainRef.get();
- int cnt = 0;
- if (clDomain != null)
- {
- Integer count = classLoaderDomainReferenceCounts.get(clDomain);
- cnt = count == null ? 0 : count.intValue();
- if (cnt > 0)
- {
- cnt--;
- }
- if (cnt == 0)
- {
- //aopDomainsByClassLoaderDomain.remove(clDomain);
- classLoaderDomainReferenceCounts.remove(clDomain);
- }
- else
- {
- classLoaderDomainReferenceCounts.put(clDomain, ++cnt);
- }
- //ScopedVFSClassLoaderDomain aopDomain = aopDomainsByClassLoader.remove(loader);
- classLoaderUnitParents.remove(loader);
- WeakReference<Module> moduleRef = classLoaderModules.remove(loader);
- if (moduleRef != null)
- {
- Module module = moduleRef.get();
- if (module != null)
- {
- moduleClassLoaders.remove(module);
- }
- }
-
-
- /*List<ScopedVFSClassLoaderDomain> aopDomains = aopDomainsByClassLoaderDomain.get(clDomain);
- if (aopDomains != null)
- {
- aopDomains.remove(aopDomain);
- }
- if (aopDomain != null)
- {
- aopDomain.getParent().unsubscribeSubDomain(aopDomain);
- }*/
- }
- cleanupLoaderDone(loader, clDomain, cnt);
- //aopDomainsByClassLoader.remove(loader);
- }
-
- protected void validateCleanupLoader(ClassLoader loader) {}
-
- protected void cleanupLoaderDone(ClassLoader loader, ClassLoaderDomain loaderDomain, int domainReferences) {}
-
- public synchronized ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl)
- {
- WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.get(cl);
- if (clDomainRef != null)
- {
- return clDomainRef.get();
- }
-
- ClassLoader parent = SecurityActions.getParent(cl);
- if (parent != null)
- {
- ClassLoaderDomain domain = getClassLoaderDomainForLoader(parent);
- if (domain != null)
- {
- classLoaderDomainsByLoader.put(parent, new WeakReference<ClassLoaderDomain>(domain));
- return domain;
- }
- }
- return null;
- }
-
- public synchronized ClassLoader getParentUnitLoader(ClassLoader loader)
- {
- WeakReference<ClassLoader> parentRef = classLoaderUnitParents.get(loader);
- if (parentRef != null)
- {
- return parentRef.get();
- }
- return null;
- }
-
- public synchronized Module getModule(ClassLoader loader)
- {
- WeakReference<Module> moduleRef = classLoaderModules.get(loader);
- if (moduleRef != null)
- {
- return moduleRef.get();
- }
- return null;
- }
-
- public synchronized ClassLoader getClassLoader(Module module)
- {
- WeakReference<ClassLoader> loaderRef = moduleClassLoaders.get(module);
- if (loaderRef != null)
- {
- return loaderRef.get();
- }
- return null;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolDomain.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,251 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import java.security.AccessController;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.NotFoundException;
-
-import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.BaseClassPool;
-import org.jboss.classpool.BaseClassPoolDomain;
-import org.jboss.classpool.ClassLoaderUtils;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.DelegatingClassPool;
-import org.jboss.classpool.jboss5.DomainRegistry;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBossClClassPoolDomain extends BaseClassPoolDomain
-{
- Map<String, Set<DelegatingClassPool>> poolsByPackage = new HashMap<String, Set<DelegatingClassPool>>();
- final static List<DelegatingClassPool> EMPTY_LIST = Collections.unmodifiableList(Collections.EMPTY_LIST);
-
- DomainRegistry registry;
-
- public JBossClClassPoolDomain(String domainName, ClassPoolDomain parent, ParentPolicy parentPolicy, DomainRegistry registry)
- {
- super(domainName,
- new JBossClParentDelegationStrategy(
- parent,
- parentPolicy,
- JBossClClassPoolToClassPoolDomainAdaptorFactory.getInstance())
- );
- this.registry = registry;
- }
-
- synchronized void setupPoolsByPackage(DelegatingClassPool pool)
- {
- if (pool instanceof JBossClDelegatingClassPool == false)
- {
- throw new IllegalStateException("Not an instance of JBossClDelegatingClassPool: " + pool.getClass().getName());
- }
-
- Module module = getModuleForPool(pool);
- boolean trace = logger.isTraceEnabled();
-
- for (String pkg : module.getPackageNames())
- {
- Set<DelegatingClassPool> pools = poolsByPackage.get(pkg);
- if (pools == null)
- {
- pools = new LinkedHashSet<DelegatingClassPool>();
- poolsByPackage.put(pkg, pools);
- }
- pools.add(pool);
- if (trace) logger.trace(this + " adding package " + pkg + " for pool " + pool);
- }
- }
-
- @Override
- protected synchronized void removeClassPool(DelegatingClassPool pool)
- {
- super.removeClassPool(pool);
-
- Module module = getModuleForPool(pool);
- boolean trace = logger.isTraceEnabled();
-
- for (String pkg : module.getPackageNames())
- {
- Set<DelegatingClassPool> pools = poolsByPackage.get(pkg);
- if (pools != null)
- {
- pools.remove(pool);
- if (pools.size() == 0)
- {
- poolsByPackage.remove(pkg);
- if (trace) logger.trace(this + " removing package " + pkg + " for pool " + pool);
- }
- }
- }
- }
-
- @Override
- protected CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
- {
- if (trace) logger.trace(this + " looking for " + classname);
-
- CtClass clazz = getCheckPrimitive(classname);
- if (clazz != null)
- {
- if (trace) logger.trace(this + " isPrimitive " + classname);
- }
- else
- {
- Module module = getModuleForPool(initiatingPool);
- if (module != null && module.isImportAll())
- {
- //Use the old "big ball of mud" model
- if (trace) logger.trace(this + " isImportAll");
- return super.getCachedOrCreate(initiatingPool, classname, resourceName, create, trace);
- }
-
- //Attempt OSGi style loading
- if (isParentBefore(classname))
- {
- if (trace) logger.trace(this + " checking parent first for " + classname);
- clazz = getCachedOrCreateFromParent(null, classname, resourceName, create, trace);
- }
-
- //Check imports first
- if (clazz == null && module != null)
- {
- if (trace) logger.trace(this + " checking imports for " + classname);
- clazz = getCtClassFromModule(module, classname, trace);
- }
-
- //Try to check the initiating pool itself
- if (clazz == null && initiatingPool != null)
- {
- if (trace) logger.trace(this + " checking pool " + initiatingPool + " locally for " + classname);
- clazz = initiatingPool.loadLocally(classname, resourceName, create);
- }
-
- if (clazz == null && isParentAfter(classname))
- {
- if (trace) logger.trace(this + " checking parent last for " + classname);
- clazz = getCachedOrCreateFromParent(null, classname, resourceName, create, trace);
- }
- }
- if (trace) logger.trace(this + " found " + classname + " in " + (clazz == null ? "null" : clazz.getClassPool()));
- return clazz;
- }
-
- private CtClass getCheckPrimitive(String classname)
- {
- if (ClassLoaderUtils.isPrimitiveType(classname))
- {
- try
- {
- return ClassPool.getDefault().get(classname);
- }
- catch(NotFoundException e)
- {
- throw new RuntimeException(classname + " should have been a primitive", e);
- }
- }
- return null;
- }
-
- private Module getModuleForPool(DelegatingClassPool pool)
- {
- if (pool == null)
- {
- return null;
- }
- Module module = ((JBossClDelegatingClassPool)pool).getModule();
- if (logger.isTraceEnabled()) logger.trace(this + " got module " + module + " for " + pool);
- return module;
- }
-
- @Override
- protected List<DelegatingClassPool> getPoolsForClassName(String classname)
- {
- String packageName = ClassLoaderUtils.getPackageName(classname);
- Set<DelegatingClassPool> poolSet = poolsByPackage.get(packageName);
- if (poolSet == null)
- {
- return EMPTY_LIST;
- }
- return new ArrayList<DelegatingClassPool>(poolSet);
- }
-
- private CtClass getCtClassFromModule(final Module module, final String classname, boolean trace)
- {
- Module found = null;
- try
- {
- found = AccessController.doPrivileged(new PrivilegedExceptionAction<Module>()
- {
-
- public Module run() throws Exception
- {
- return module.getModuleForClass(ClassLoaderUtils.stripArrayFromClassName(classname));
- }
- });
- }
- catch (PrivilegedActionException e)
- {
- if (e.getCause() instanceof ClassNotFoundException == false)
- {
- throw new RuntimeException(e);
- }
- }
-
- if (trace) logger.trace(this + " module for " + classname + " " + found);
-
- if (found == null || found == module)
- {
- return null;
- }
- ClassLoader foundLoader = registry.getClassLoader(found);
- ClassPool pool = ClassPoolRepository.getInstance().registerClassLoader(foundLoader);
- try
- {
- if (pool instanceof BaseClassPool)
- {
- return getCachedOrCreateFromPool((BaseClassPool)pool, classname, true, trace);
- }
- return pool.get(classname);
- }
- catch(NotFoundException e)
- {
- }
- return null;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,42 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import javassist.ClassPool;
-
-import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdapter;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBossClClassPoolToClassPoolDomainAdapter extends ClassPoolToClassPoolDomainAdapter
-{
- @Override
- public ClassPool initialiseParentClassLoader()
- {
- return ClassPoolRepository.getInstance().registerClassLoader(BaseClassLoaderDomain.class.getClassLoader());
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,51 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdapter;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdaptorFactory;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBossClClassPoolToClassPoolDomainAdaptorFactory implements ClassPoolToClassPoolDomainAdaptorFactory
-{
- private static final JBossClClassPoolToClassPoolDomainAdaptorFactory INSTANCE = new JBossClClassPoolToClassPoolDomainAdaptorFactory();
-
- private JBossClClassPoolToClassPoolDomainAdaptorFactory()
- {
-
- }
-
- public static ClassPoolToClassPoolDomainAdaptorFactory getInstance()
- {
- return INSTANCE;
- }
-
- public ClassPoolToClassPoolDomainAdapter createAdaptor()
- {
- return new JBossClClassPoolToClassPoolDomainAdapter();
- }
-
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,95 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import java.lang.ref.WeakReference;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.DelegatingClassPool;
-import org.jboss.classpool.jboss5.RegisterModuleCallback;
-import org.jboss.classpool.jboss5.ToClassInvoker;
-import org.jboss.classpool.jboss5.ToClassInvokerPoolReference;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBossClDelegatingClassPool extends DelegatingClassPool implements ToClassInvokerPoolReference
-{
- private WeakReference<Module> module;
- private RegisterModuleCallback callback;
-
- ToClassInvoker toClassInvoker;
-
- protected JBossClDelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent,
- ScopedClassPoolRepository repository, Module module, RegisterModuleCallback callback)
- {
- super(domain, cl, parent, repository);
- if (module == null)
- {
- throw new IllegalStateException("Null Module for loader " + cl);
- }
- if (domain instanceof JBossClClassPoolDomain == false)
- {
- throw new IllegalArgumentException("Domain was not instance of JBossClClassPoolDomain: " + domain.getClass().getName());
- }
- this.module = new WeakReference<Module>(module);
- this.callback = callback;
- toClassInvoker = new ToClassInvoker(module == null ? null : module.getDynamicClassRoot());
- if (logger.isTraceEnabled()) logger.trace(this + " module");
- ((JBossClClassPoolDomain)domain).setupPoolsByPackage(this);
- }
-
- Module getModule()
- {
- if (module != null)
- {
- return module.get();
- }
- return null;
- }
-
- public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
- }
-
- public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return super.toClass(cc, loader, domain);
- }
-
- @Override
- public void close()
- {
- super.close();
- callback.removeModule(getModule());
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,177 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Set;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classloading.spi.dependency.ClassLoading;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.AbstractJBossDelegatingClassPoolFactory;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomainRegistry;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdapter;
-import org.jboss.classpool.NonDelegatingClassPool;
-import org.jboss.classpool.jboss5.DomainRegistry;
-import org.jboss.classpool.jboss5.RegisterModuleCallback;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBossClDelegatingClassPoolFactory extends AbstractJBossDelegatingClassPoolFactory implements ScopedClassPoolFactory
-{
- private final DomainRegistry registry;
-
- private final RegisterModuleCallback registerModuleCallback;
-
- public JBossClDelegatingClassPoolFactory(DomainRegistry registry, RegisterModuleCallback registerModuleCallback)
- {
- this.registry = registry;
- this.registerModuleCallback = registerModuleCallback;
- }
-
- public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = getCreateParentClassPools(cl, src, repository);
-
- if (cl instanceof RealClassLoader)
- {
- Module module = registry.getModule(cl);
- if (module == null)
- {
- module = getModuleForClassLoader(cl);
- }
- registerModuleCallback.registerModule(module);
- registerBootstrapLoaders();
- ClassPoolDomain domain = getDomain(module, cl);
- return new JBossClDelegatingClassPool(domain, cl, parent, repository, module, registerModuleCallback);
- }
-
- return new NonDelegatingClassPool(cl, parent, repository, true);
- }
-
- private synchronized ClassPoolDomain getDomain(Module module, ClassLoader cl)
- {
- ClassLoaderDomain domain = null;
- ClassLoaderSystem sys = registry.getSystem();
- if (module != null && module.getDeterminedParentDomainName() != null)
- {
- //It is scoped
- domain = sys.getDomain(module.getDeterminedDomainName());
- }
-
- if (domain == null)
- {
- domain = registry.getDefaultDomain();
- }
-
- ClassPoolDomain poolDomain = ClassPoolDomainRegistry.getInstance().getDomain(domain);
- if (poolDomain == null)
- {
- String parentDomainName = domain.getParentDomainName();
- ClassPoolDomain parentPoolDomain = null;
- if (parentDomainName != null)
- {
- ClassLoaderDomain parentDomain = sys.getDomain(parentDomainName);
- if (parentDomain == null)
- {
- throw new RuntimeException("No domain found called: " + parentDomainName);
- }
- parentPoolDomain = ClassPoolDomainRegistry.getInstance().getDomain(parentDomain);
- }
- if (parentDomainName == null)
- {
- ClassLoader parentUnitLoader = registry.getParentUnitLoader(cl);
- if (parentUnitLoader != null)
- {
- ClassPool parentUnitPool = ClassPoolRepository.getInstance().registerClassLoader(parentUnitLoader);
- parentPoolDomain = new ClassPoolToClassPoolDomainAdapter(parentUnitPool);
- }
- }
- poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
-
- ClassPoolDomainRegistry.getInstance().addClassPoolDomain(domain, poolDomain);
- }
- return poolDomain;
- }
-
- @Override
- protected ClassPool getCreateParentClassPools(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = super.getCreateParentClassPools(cl, src, repository);
- if (parent == ClassPool.getDefault())
- {
- //In AS BaseClassLoader seems to normally have a null parent
- return null;
- }
- return parent;
- }
-
- private void registerBootstrapLoaders()
- {
- Set<Module> unregistered = registerModuleCallback.getUnregisteredModules();
- if (unregistered.size() > 0)
- {
- for (Module module : unregistered)
- {
- ClassLoader loader = getClassLoaderForModule(module);
- log.debug("Registering loader for module " + module + ": " + loader);
- ClassPoolRepository.getInstance().registerClassLoader(loader);
- }
- }
- }
-
- private ClassLoader getClassLoaderForModule(final Module module)
- {
- return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
- {
-
- public ClassLoader run()
- {
- return ClassLoading.getClassLoaderForModule(module);
- }
- });
- }
-
- private Module getModuleForClassLoader(final ClassLoader classLoader)
- {
- return AccessController.doPrivileged(new PrivilegedAction<Module>()
- {
- public Module run()
- {
- return ClassLoading.getModuleForClassLoader(classLoader);
- }
- });
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClParentDelegationStrategy.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,65 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import org.jboss.classloader.spi.ParentPolicy;
-import org.jboss.classloader.spi.filter.ClassFilter;
-import org.jboss.classpool.AbstractParentDelegationStrategy;
-import org.jboss.classpool.ClassLoaderUtils;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdaptorFactory;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class JBossClParentDelegationStrategy extends AbstractParentDelegationStrategy
-{
- ParentPolicy parentPolicy;
-
- JBossClParentDelegationStrategy(ClassPoolDomain parent, ParentPolicy parentPolicy, ClassPoolToClassPoolDomainAdaptorFactory adaptorFactory)
- {
- super(parent, adaptorFactory);
- if (parentPolicy == null)
- {
- throw new IllegalStateException("Null parent policy");
- }
- this.parentPolicy = parentPolicy;
- }
-
- public boolean isParentAfter(String classname)
- {
- ClassFilter filter = parentPolicy.getAfterFilter();
- boolean isParentAfter = filter.matchesClassName(ClassLoaderUtils.stripArrayFromClassName(classname));
- if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentAfter " + isParentAfter);
- return isParentAfter;
- }
-
- public boolean isParentBefore(String classname)
- {
- ClassFilter filter = parentPolicy.getBeforeFilter();
- boolean isParentBefore = filter.matchesClassName(ClassLoaderUtils.stripArrayFromClassName(classname));
- if (logger.isTraceEnabled()) logger.trace(this + " " + getDomain() + " isParentBefore " + isParentBefore);
- return isParentBefore;
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/SecurityActions.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,90 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-class SecurityActions
-{
-
- interface GetClassLoaderAction
- {
- ClassLoader getClassLoader(Class<?> clazz);
-
- GetClassLoaderAction NON_PRIVILEGED = new GetClassLoaderAction() {
-
- public ClassLoader getClassLoader(Class<?> clazz)
- {
- return clazz.getClassLoader();
- }};
-
- GetClassLoaderAction PRIVILEGED = new GetClassLoaderAction() {
-
- public ClassLoader getClassLoader(final Class<?> clazz)
- {
- return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
-
- public ClassLoader run()
- {
- return clazz.getClassLoader();
- }});
- }};
- }
-
- static ClassLoader getClassLoader(Class<?> clazz)
- {
- if (System.getSecurityManager() == null)
- {
- return GetClassLoaderAction.NON_PRIVILEGED.getClassLoader(clazz);
- }
- else
- {
- return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
- }
- }
-
- public static class GetContextClassLoaderAction implements PrivilegedAction<ClassLoader>
- {
- public static GetContextClassLoaderAction INSTANCE = new GetContextClassLoaderAction();
-
- public ClassLoader run()
- {
- return Thread.currentThread().getContextClassLoader();
- }
- }
-
- static ClassLoader getContextClassLoader()
- {
- if (System.getSecurityManager() == null)
- return Thread.currentThread().getContextClassLoader();
- else
- return AccessController.doPrivileged(GetContextClassLoaderAction.INSTANCE);
- }
-
-}
Added: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/AbstractJBossClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,63 @@
+/*
+* 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.classpool.plugins.as;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.AbstractClassPoolFactory;
+import org.jboss.classpool.temp.TempJBossClassPool;
+import org.jboss.logging.Logger;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class AbstractJBossClassPoolFactory extends AbstractClassPoolFactory
+{
+ protected final Logger log = Logger.getLogger(this.getClass().getName());
+
+ protected ClassPool getCreateParentClassPools(final ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ //Make sure that we get classpools for all the parent classloaders
+ if (cl == null)
+ {
+ return ClassPool.getDefault();
+ }
+ ClassLoader parent = SecurityActions.getParent(cl);
+
+ if (parent != null)
+ {
+ return repository.registerClassLoader(parent);
+ }
+ return src;
+ }
+
+ public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ return new TempJBossClassPool(src, repository);
+ }
+
+
+}
Added: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/DelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,135 @@
+/*
+* 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.classpool.plugins.as;
+
+
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.domain.AbstractClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.helpers.ClassLoaderUtils;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+/**
+ * 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 BaseClassPool
+{
+ private final ClassPoolDomain domain;
+
+ private boolean closed;
+
+ public DelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent, ScopedClassPoolRepository repository)
+ {
+ super(cl, parent, repository);
+ if (domain == null)
+ {
+ throw new IllegalArgumentException("Domain was null");
+ }
+ if (domain instanceof AbstractClassPoolDomain == false)
+ {
+ throw new IllegalArgumentException("Domain must implement AbstractClassPoolDomain");
+ }
+ if (logger.isTraceEnabled()) logger.trace(this + " domain:" + this);
+ this.domain = domain;
+ this.domain.addClassPool(this);
+ }
+
+ public CtClass loadLocally(String classname, String resourceName, boolean create)
+ {
+ boolean trace = logger.isTraceEnabled();
+ if (trace) logger.trace(this + " attempt to load locally " + classname);
+
+ CtClass clazz = null;
+ if (isLocalResource(resourceName, trace))
+ {
+ clazz = getCachedLocally(classname);
+ if (clazz == null && create)
+ {
+ clazz = createCtClass(classname, true);
+ }
+ }
+ if (trace) logger.trace(this + " loaded locally " + classname + " " + getClassPoolLogStringForClass(clazz));
+ return clazz;
+ }
+
+ /**
+ * Overrides ClassPool.get0() so that we can look up classes without caching them in the initiating pool.
+ * The DelgatingClassPool + DomainClassPool handle the caching in the correct pool + handles the
+ * parentFirst functionality
+ */
+ @Override
+ public synchronized CtClass get0(String classname, boolean useCache) throws NotFoundException
+ {
+ if (isGeneratedClass(classname))
+ {
+ return null;
+ }
+ CtClass clazz = domain.getCachedOrCreate(this, classname, true);
+ if (clazz == null)
+ {
+ //It is probably a generated proxy. The package name can be different (for example if it is
+ //a proxy for a java system class) than the package names exported by the loaders.
+ //TODO It should be possible to remove this once these have been done:
+ //https://jira.jboss.org/jira/browse/JBCL-25
+ //https://jira.jboss.org/jira/browse/JBCL-92
+ clazz = loadLocally(classname, ClassLoaderUtils.getResourceName(classname), true);
+ }
+ return clazz;
+ }
+
+ @Override
+ public boolean isUnloadedClassLoader()
+ {
+ return closed;
+ }
+
+ @Override
+ public void close()
+ {
+ closed = true;
+ super.close();
+ domain.removeClassPool(this);
+ }
+
+ @Override
+ public CtClass getCached(String classname)
+ {
+ if (isGeneratedClass(classname))
+ {
+ return null;
+ }
+ return domain.getCachedOrCreate(this, classname, false);
+ }
+
+ @Override
+ public String toString()
+ {
+ return "[" + super.toString() + " domain: " + domain + "]";
+ }
+}
Added: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/NonDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,69 @@
+/*
+* 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.classpool.plugins.as;
+
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.spi.AbstractClassPool;
+
+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, AbstractClassPool.SEARCH_LOCAL_ONLY_STRATEGY);
+ super.childFirstLookup = !parentFirst;
+ }
+
+ @Override
+ public CtClass createCtClass(String classname, boolean useCache)
+ {
+ boolean trace = logger.isTraceEnabled();
+ CtClass clazz = null;
+ if (!childFirstLookup)
+ {
+ if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentFirst)");
+ clazz = createParentCtClass(classname, useCache, trace);
+ }
+ if (clazz == null && isLocalResource(getResourceName(classname), trace))
+ {
+ clazz = super.createCtClass(classname, useCache);
+ }
+ if (childFirstLookup && clazz == null)
+ {
+ if (trace)logger.trace(this + " attempting to create " + classname + " in parent pool (parentLast)");
+ clazz = createParentCtClass(classname, useCache, trace);
+ }
+
+ if (trace)logger.trace(this + " created " + classname + " " + getClassPoolLogStringForClass(clazz));
+ return clazz;
+ }
+}
Added: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,87 @@
+/*
+* 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.classpool.plugins.as;
+
+import java.beans
+.PropertyEditorManager;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+
+import org.jboss.util.propertyeditor.ClassArrayEditor;
+import org.jboss.util.propertyeditor.IntArrayEditor;
+import org.jboss.util.propertyeditor.StringArrayEditor;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+class SecurityActions
+{
+ interface GetParentAction
+ {
+ ClassLoader getParent(ClassLoader loader);
+
+ GetParentAction NON_PRIVILEGED = new GetParentAction()
+ {
+ public ClassLoader getParent(ClassLoader loader)
+ {
+ return loader.getParent();
+ }
+ };
+
+ GetParentAction PRIVILEGED = new GetParentAction()
+ {
+ public ClassLoader getParent(final ClassLoader loader)
+ {
+ try
+ {
+ return AccessController.doPrivileged(new PrivilegedExceptionAction<ClassLoader>()
+ {
+ public ClassLoader run() throws Exception
+ {
+ return loader.getParent();
+ }
+ });
+ }
+ catch (PrivilegedActionException e)
+ {
+ throw new RuntimeException(e.getException());
+ }
+ }
+ };
+ }
+
+ public static ClassLoader getParent(ClassLoader loader)
+ {
+ if (System.getSecurityManager() == null)
+ {
+ return GetParentAction.NON_PRIVILEGED.getParent(loader);
+ }
+ else
+ {
+ return GetParentAction.PRIVILEGED.getParent(loader);
+ }
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4 (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4)
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPool.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss4;
+package org.jboss.classpool.plugins.as4;
import java.io.File;
import java.net.URL;
@@ -30,7 +30,7 @@
import javassist.CtClass;
import javassist.scopedpool.ScopedClassPoolRepository;
-import org.jboss.classpool.AbstractClassPool;
+import org.jboss.classpool.spi.AbstractClassPool;
import org.jboss.mx.loading.RepositoryClassLoader;
/**
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPoolFactory.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,130 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss4;
-
-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.classpool.AbstractClassPool;
-import org.jboss.classpool.AbstractJBossClassPoolFactory;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision: 70841 $
- **/
-public class JBossClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
-{
- protected File tmpClassesDir;
-
- public JBossClassPoolFactory(File tmpClassesDir) throws IOException
- {
- this.tmpClassesDir = tmpClassesDir;
-
- }
- public ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = getCreateParentClassPools(cl, src, repository);
- if (cl instanceof RepositoryClassLoader)
- {
- File tempdir = getTempDirectory(cl);
- URL tmpCP;
- try
- {
- tmpCP = createURLAndAddToLoader(cl, tempdir);
- }
- catch (IOException e)
- {
- throw new RuntimeException(e);
- }
- if (ScopedRepositoryClassLoaderHelper.isScopedClassLoader(cl))
- {
- //It is scoped
- return new ScopedJBossClassPool(cl, parent, repository, tempdir, tmpCP);
- }
- return new JBossClassPool(cl, parent, repository, tempdir, tmpCP);
- }
- return new AbstractClassPool(cl, parent, repository);
- }
-
- 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) throws IOException
- {
- 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;
- }
-
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java (from rev 92349, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/JBossClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/JBossClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,129 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.classpool.plugins.as4;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.plugins.as.AbstractJBossClassPoolFactory;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.AbstractClassPoolFactory;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author adrian at jboss.org
+ * @version $Revision: 70841 $
+ **/
+public class JBossClassPoolFactory extends AbstractJBossClassPoolFactory
+{
+ protected File tmpClassesDir;
+
+ public JBossClassPoolFactory(File tmpClassesDir) throws IOException
+ {
+ this.tmpClassesDir = tmpClassesDir;
+
+ }
+ public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ ClassPool parent = getCreateParentClassPools(cl, src, repository);
+ if (cl instanceof RepositoryClassLoader)
+ {
+ File tempdir = getTempDirectory(cl);
+ URL tmpCP;
+ try
+ {
+ tmpCP = createURLAndAddToLoader(cl, tempdir);
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ if (ScopedRepositoryClassLoaderHelper.isScopedClassLoader(cl))
+ {
+ //It is scoped
+ return new ScopedJBossClassPool(cl, parent, repository, tempdir, tmpCP);
+ }
+ return new JBossClassPool(cl, parent, repository, tempdir, tmpCP);
+ }
+ return new AbstractClassPool(cl, parent, repository);
+ }
+
+ 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) throws IOException
+ {
+ 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;
+ }
+
+}
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/LoaderRepositoryUrlUtil.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/LoaderRepositoryUrlUtil.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss4;
+package org.jboss.classpool.plugins.as4;
import java.net.URL;
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedJBossClassPool.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedJBossClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss4;
+package org.jboss.classpool.plugins.as4;
import java.io.File;
import java.net.URL;
@@ -30,9 +30,9 @@
import javassist.NotFoundException;
import javassist.scopedpool.ScopedClassPoolRepository;
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.jboss4.LoaderRepositoryUrlUtil.UrlInfo;
+import org.jboss.classpool.plugins.as4.LoaderRepositoryUrlUtil.UrlInfo;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
import org.jboss.mx.loading.LoaderRepository;
import org.jboss.mx.loading.RepositoryClassLoader;
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ScopedRepositoryClassLoaderHelper.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ScopedRepositoryClassLoaderHelper.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss4;
+package org.jboss.classpool.plugins.as4;
import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
import org.jboss.mx.loading.LoaderRepository;
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/SecurityActions.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss4;
+package org.jboss.classpool.plugins.as4;
import java.security.AccessController;
import java.security.PrivilegedActionException;
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvoker.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,103 +0,0 @@
-/*
-* 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.classpool.jboss4;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-import org.jboss.logging.Logger;
-import org.jboss.mx.loading.RepositoryClassLoader;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class ToClassInvoker
-{
- Logger logger = Logger.getLogger(this.getClass());
-
- public File tmpDir;
-
- public Object tmplock = new Object();
-
- public ToClassInvoker(File tmpDir)
- {
- this.tmpDir = tmpDir;
- }
-
- public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain)
- throws CannotCompileException
- {
- boolean trace = logger.isTraceEnabled();
- pool.lockInCache(cc);
- final ClassLoader myloader = pool.getClassLoader();
- if (myloader == null || tmpDir == null)
- {
- if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tmpDir:" + tmpDir + " default to superPool.toClass for " + cc.getName());
- Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
- if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
- return clazz;
- }
- Class<?> dynClass = null;
- try
- {
- File classFile = null;
- // Write the clas file to the tmpdir
- synchronized (tmplock)
- {
- classFile = new File(tmpDir, classFileName);
- if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + classFile);
- 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)myloader;
- rcl.clearClassBlackList();
- rcl.clearResourceBlackList();
-
- // Now load the class through the cl
- dynClass = myloader.loadClass(cc.getName());
- if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + dynClass);
- return dynClass;
- }
- catch (Exception ex)
- {
- ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName());
- cfe.initCause(ex);
- throw cfe;
- }
- }
-
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvoker.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvoker.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,103 @@
+/*
+* 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.classpool.plugins.as4;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.CtClass;
+
+import org.jboss.logging.Logger;
+import org.jboss.mx.loading.RepositoryClassLoader;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class ToClassInvoker
+{
+ Logger logger = Logger.getLogger(this.getClass());
+
+ public File tmpDir;
+
+ public Object tmplock = new Object();
+
+ public ToClassInvoker(File tmpDir)
+ {
+ this.tmpDir = tmpDir;
+ }
+
+ public Class<?> toClass(ToClassInvokerPoolReference pool, CtClass cc, String classFileName, ClassLoader loader, ProtectionDomain domain)
+ throws CannotCompileException
+ {
+ boolean trace = logger.isTraceEnabled();
+ pool.lockInCache(cc);
+ final ClassLoader myloader = pool.getClassLoader();
+ if (myloader == null || tmpDir == null)
+ {
+ if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " tmpDir:" + tmpDir + " default to superPool.toClass for " + cc.getName());
+ Class<?> clazz = pool.superPoolToClass(cc, loader, domain);
+ if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + clazz);
+ return clazz;
+ }
+ Class<?> dynClass = null;
+ try
+ {
+ File classFile = null;
+ // Write the clas file to the tmpdir
+ synchronized (tmplock)
+ {
+ classFile = new File(tmpDir, classFileName);
+ if (trace) logger.trace(this + " " + pool + ".toClass() myloader:" + myloader + " writing bytes to " + classFile);
+ 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)myloader;
+ rcl.clearClassBlackList();
+ rcl.clearResourceBlackList();
+
+ // Now load the class through the cl
+ dynClass = myloader.loadClass(cc.getName());
+ if (trace) logger.trace(this + " " + pool + " myloader:" + myloader + " created class:" + dynClass);
+ return dynClass;
+ }
+ catch (Exception ex)
+ {
+ ClassFormatError cfe = new ClassFormatError("Failed to load dyn class: " + cc.getName());
+ cfe.initCause(ex);
+ throw cfe;
+ }
+ }
+
+}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvokerPoolReference.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,39 +0,0 @@
-/*
-* 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.classpool.jboss4;
-
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.CtClass;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface ToClassInvokerPoolReference
-{
- Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
- ClassLoader getClassLoader();
- void lockInCache(CtClass clazz);
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss4/ToClassInvokerPoolReference.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ToClassInvokerPoolReference.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.plugins.as4;
+
+import java.security.ProtectionDomain;
+
+import javassist.CannotCompileException;
+import javassist.CtClass;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ToClassInvokerPoolReference
+{
+ Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException;
+ ClassLoader getClassLoader();
+ void lockInCache(CtClass clazz);
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl)
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPool.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.ucl;
+package org.jboss.classpool.plugins.as4.ucl;
import java.io.File;
import java.net.URL;
@@ -30,16 +30,17 @@
import javassist.CtClass;
import javassist.scopedpool.ScopedClassPoolRepository;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.DelegatingClassPool;
-import org.jboss.classpool.jboss4.ToClassInvoker;
-import org.jboss.classpool.jboss4.ToClassInvokerPoolReference;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.as4.ToClassInvoker;
+import org.jboss.classpool.plugins.as4.ToClassInvokerPoolReference;
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
+ at Deprecated
public class JBossUclDelegatingClassPool extends DelegatingClassPool implements ToClassInvokerPoolReference
{
ToClassInvoker toClassInvoker = null;
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPoolFactory.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,166 +0,0 @@
-/*
-* 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.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.classpool.AbstractJBossDelegatingClassPoolFactory;
-import org.jboss.classpool.BaseClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomainRegistry;
-import org.jboss.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 JBossUclDelegatingClassPoolFactory extends AbstractJBossDelegatingClassPoolFactory implements ScopedClassPoolFactory
-{
- private ClassPoolDomain mainDomain;
- protected File tmpClassesDir;
-
- public JBossUclDelegatingClassPoolFactory(File tmpClassesDir) throws IOException
- {
- System.out.println("TMP CLASSES DIR: " + tmpClassesDir);
- 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)
- {
-
- boolean parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
- domain = new BaseClassPoolDomain("Scoped" + System.identityHashCode(loaderRepository), mainDomain, parentFirst);
- }
- else
- {
- if (mainDomain == null)
- {
- domain = new BaseClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null, false);
- 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);
- }
- }
-
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java (from rev 92349, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as4/ucl/JBossUclDelegatingClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,167 @@
+/*
+* 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.classpool.plugins.as4.ucl;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.base.BaseClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomainRegistry;
+import org.jboss.classpool.plugins.as.NonDelegatingClassPool;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.AbstractClassPoolFactory;
+import org.jboss.classpool.temp.TempClassPoolFactory;
+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 $
+ */
+ at Deprecated
+public class JBossUclDelegatingClassPoolFactory extends TempClassPoolFactory
+{
+ private ClassPoolDomain mainDomain;
+ protected File tmpClassesDir;
+
+ public JBossUclDelegatingClassPoolFactory(File tmpClassesDir) throws IOException
+ {
+ System.out.println("TMP CLASSES DIR: " + tmpClassesDir);
+ this.tmpClassesDir = tmpClassesDir;
+ }
+
+ public synchronized AbstractClassPool 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)
+ {
+
+ boolean parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
+ domain = new BaseClassPoolDomain("Scoped" + System.identityHashCode(loaderRepository), mainDomain, parentFirst);
+ }
+ else
+ {
+ if (mainDomain == null)
+ {
+ domain = new BaseClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null, false);
+ 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);
+ }
+ }
+
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5 (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5)
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/DomainRegistry.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/DomainRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,4 +1,4 @@
-package org.jboss.classpool.jboss5;
+package org.jboss.classpool.plugins.as5;
/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
@@ -48,8 +48,4 @@
Module getModule(ClassLoader loader);
ClassLoader getClassLoader(Module module);
-
- //List<ScopedVFSClassLoaderDomain> getAOPDomainsForClassLoaderDomain(ClassLoaderDomain domain);
-
- //ReadWriteLock getAOPDomainsLockForClassLoaderDomain(ClassLoaderDomain domain);
}
\ No newline at end of file
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPool.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss5;
+package org.jboss.classpool.plugins.as5;
import java.net.URL;
import java.security.ProtectionDomain;
@@ -29,14 +29,14 @@
import javassist.CtClass;
import javassist.scopedpool.ScopedClassPoolRepository;
-import org.jboss.classpool.AbstractClassPool;
+import org.jboss.classpool.spi.AbstractClassPool;
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JBoss5ClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
+class JBoss5ClassPool extends AbstractClassPool implements ToClassInvokerPoolReference
{
protected ToClassInvoker toClassInvoker = null;
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPoolFactory.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,102 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt 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.classpool.jboss5;
-
-import java.net.URL;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.AbstractJBossClassPoolFactory;
-import org.jboss.classpool.ClassPoolRepository;
-
-/**
- * Comment
- *
- * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
- * @author adrian at jboss.org
- * @version $Revision: 64815 $
- **/
-public class JBoss5ClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
-{
- private DomainRegistry registry;
-
- public JBoss5ClassPoolFactory(DomainRegistry registry)
- {
- this.registry = registry;
- }
-
- public ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = getCreateParentClassPools(cl, src, repository);
-
- ScopedClassPool pool = null;
-
- if (cl instanceof RealClassLoader)
- {
- Module module = registry.getModule(cl);
- if (module != null && module.getDeterminedParentDomainName() != null)
- {
- //It is scoped
- ClassLoaderSystem sys = registry.getSystem();
- ClassLoaderDomain domain = sys.getDomain(module.getDeterminedDomainName());
- boolean parentFirst = module.isJ2seClassLoadingCompliance();
- ClassPool parentDomainPool = getParentUnitClassPool(cl);
- pool = new ScopedJBoss5ClassPool(cl, parent, parentDomainPool, repository, getTempURL(module), parentFirst, domain);
- }
- else
- {
- pool = new JBoss5ClassPool(cl, parent, repository, getTempURL(module));
- }
- }
-
- if (pool == null)
- {
- pool = new AbstractClassPool(cl, parent, repository);
- }
- log.debug("Created pool " + pool + " for loader " + cl);
-
- return pool;
- }
-
- private ClassPool getParentUnitClassPool(ClassLoader cl)
- {
- ClassLoader parent = registry.getParentUnitLoader(cl);
- return ClassPoolRepository.getInstance().registerClassLoader(parent);
- }
-
-
- private URL getTempURL(Module module)
- {
- if (module == null)
- return null;
-
- return module.getDynamicClassRoot();
- }
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java (from rev 92349, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/JBoss5ClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/JBoss5ClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,101 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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.classpool.plugins.as5;
+
+import java.net.URL;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classpool.plugins.as.AbstractJBossClassPoolFactory;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author adrian at jboss.org
+ * @version $Revision: 64815 $
+ **/
+public class JBoss5ClassPoolFactory extends AbstractJBossClassPoolFactory implements ScopedClassPoolFactory
+{
+ private DomainRegistry registry;
+
+ public JBoss5ClassPoolFactory(DomainRegistry registry)
+ {
+ this.registry = registry;
+ }
+
+ public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ ClassPool parent = getCreateParentClassPools(cl, src, repository);
+
+ AbstractClassPool pool = null;
+
+ if (cl instanceof RealClassLoader)
+ {
+ Module module = registry.getModule(cl);
+ if (module != null && module.getDeterminedParentDomainName() != null)
+ {
+ //It is scoped
+ ClassLoaderSystem sys = registry.getSystem();
+ ClassLoaderDomain domain = sys.getDomain(module.getDeterminedDomainName());
+ boolean parentFirst = module.isJ2seClassLoadingCompliance();
+ ClassPool parentDomainPool = getParentUnitClassPool(cl);
+ pool = new ScopedJBoss5ClassPool(cl, parent, parentDomainPool, repository, getTempURL(module), parentFirst, domain);
+ }
+ else
+ {
+ pool = new JBoss5ClassPool(cl, parent, repository, getTempURL(module));
+ }
+ }
+
+ if (pool == null)
+ {
+ pool = new AbstractClassPool(cl, parent, repository);
+ }
+ log.debug("Created pool " + pool + " for loader " + cl);
+
+ return pool;
+ }
+
+ private ClassPool getParentUnitClassPool(ClassLoader cl)
+ {
+ ClassLoader parent = registry.getParentUnitLoader(cl);
+ return ClassPoolRepository.getInstance().registerClassLoader(parent);
+ }
+
+
+ private URL getTempURL(Module module)
+ {
+ if (module == null)
+ return null;
+
+ return module.getDynamicClassRoot();
+ }
+}
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/RegisterModuleCallback.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/RegisterModuleCallback.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss5;
+package org.jboss.classpool.plugins.as5;
import java.util.Collections;
import java.util.HashSet;
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ScopedJBoss5ClassPool.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ScopedJBoss5ClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss5;
+package org.jboss.classpool.plugins.as5;
import java.lang.ref.WeakReference;
import java.net.URL;
@@ -33,8 +33,8 @@
import org.jboss.classloader.spi.ClassLoaderDomain;
import org.jboss.classloader.spi.Loader;
import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.ClassPoolRepository;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
/**
*
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/SecurityActions.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss5;
+package org.jboss.classpool.plugins.as5;
import java.security.AccessController;
import java.security.PrivilegedActionException;
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvoker.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvoker.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss5;
+package org.jboss.classpool.plugins.as5;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/ToClassInvokerPoolReference.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/ToClassInvokerPoolReference.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jboss5;
+package org.jboss.classpool.plugins.as5;
import java.security.ProtectionDomain;
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/VFSClassLoaderDomainRegistry.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,285 +0,0 @@
-package org.jboss.classpool.jboss5;
-/*
-* 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.
-*/
-
-
-import java.lang.ref.WeakReference;
-import java.util.Map;
-import java.util.WeakHashMap;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.dependency.Module;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class VFSClassLoaderDomainRegistry implements DomainRegistry
-{
- final static ClassLoaderDomain domain = new ClassLoaderDomain("NOT_USED_PLACEHOLDER");
-
- private ClassLoaderSystem system;
-
- private ClassLoaderDomain defaultDomain;
-
- /** classloader domains by their classloaders */
- private Map<ClassLoader, WeakReference<ClassLoaderDomain>> classLoaderDomainsByLoader = new WeakHashMap<ClassLoader, WeakReference<ClassLoaderDomain>>();
-
- /** aopDomains by classloader */
- //private Map<ClassLoader, ScopedVFSClassLoaderDomain> aopDomainsByClassLoader = new WeakHashMap<ClassLoader, ScopedVFSClassLoaderDomain>();
-
- /** aopDomains by classloader domain */
- //private Map<ClassLoaderDomain, List<ScopedVFSClassLoaderDomain>> aopDomainsByClassLoaderDomain = new WeakHashMap<ClassLoaderDomain, List<ScopedVFSClassLoaderDomain>>();
-
- //private Map<ClassLoaderDomain, ReadWriteLock> aopDomainsLocksByClassLoaderDomain = new WeakHashMap<ClassLoaderDomain, ReadWriteLock>();
-
-
- /** parent deployment unit classloaders indexed by children */
- private Map<ClassLoader, WeakReference<ClassLoader>> classLoaderUnitParents = new WeakHashMap<ClassLoader, WeakReference<ClassLoader>>();
-
- /** Modules by classloader */
- private Map<ClassLoader, WeakReference<Module>> classLoaderModules = new WeakHashMap<ClassLoader, WeakReference<Module>>();
-
- /** classloaders by module */
- private Map<Module, WeakReference<ClassLoader>> moduleClassLoaders = new WeakHashMap<Module, WeakReference<ClassLoader>>();
-
- private Map<ClassLoaderDomain, Integer> classLoaderDomainReferenceCounts = new WeakHashMap<ClassLoaderDomain, Integer>();
-
- /**
- * Needed for the tests, not expected to be needed in production
- */
- public void setSystem(ClassLoaderSystem system)
- {
- this.system = system;
- }
-
- /**
- * Needed for the tests, not expected to be needed in production
- */
- public void setDefaultDomain(ClassLoaderDomain domain)
- {
- this.defaultDomain = domain;
- }
-
- public synchronized ClassLoaderSystem getSystem()
- {
- if (system == null)
- {
- system = ClassLoaderSystem.getInstance();
- }
- return system;
- }
-
- public synchronized ClassLoaderDomain getDefaultDomain()
- {
- if (defaultDomain == null)
- {
- defaultDomain = getSystem().getDefaultDomain();
- }
- return defaultDomain;
- }
-
- public synchronized boolean initMapsForLoader(ClassLoader loader, Module module, ClassLoader parentUnitLoader)
- {
- if (loader == parentUnitLoader)
- {
- throw new IllegalArgumentException("initMapsForLoader() should only be called if parentUnitLoader is different from loader");
- }
- ClassLoaderSystem system = getSystem();
-
- String domainName = module.getDeterminedDomainName();
- ClassLoaderDomain clDomain = system.getDomain(domainName);
- if (clDomain == null && domain != null)
- {
- throw new IllegalStateException("Have " + domain + " but no classloader domain");
- }
-
- boolean ret = false;
- if (!classLoaderDomainsByLoader.containsKey(loader))
- {
- Integer count = classLoaderDomainReferenceCounts.get(clDomain);
- int cnt = count == null ? 0 : count.intValue();
- classLoaderDomainReferenceCounts.put(clDomain, cnt);
-
- classLoaderDomainsByLoader.put(loader, new WeakReference<ClassLoaderDomain>(clDomain));
- classLoaderUnitParents.put(loader, new WeakReference<ClassLoader>(parentUnitLoader));
- classLoaderModules.put(loader, new WeakReference<Module>(module));
- moduleClassLoaders.put(module, new WeakReference<ClassLoader>(loader));
- ret = true;
- if (domain != null)
- {
-
-
- /*ReadWriteLock lock = aopDomainsLocksByClassLoaderDomain.get(clDomain);
- if (lock == null)
- {
- lock = new ReentrantReadWriteLock();
- aopDomainsLocksByClassLoaderDomain.put(clDomain, lock);
- }
-
- lock.writeLock().lock();
- try
- {
- List<ScopedVFSClassLoaderDomain> aopDomains = aopDomainsByClassLoaderDomain.get(clDomain);
- if (aopDomains == null)
- {
- synchronized (aopDomainsByClassLoaderDomain)
- {
- aopDomains = new CopyOnWriteArrayList<ScopedVFSClassLoaderDomain>();
- if (!aopDomains.contains(clDomain))
- {
- aopDomainsByClassLoaderDomain.put(clDomain, aopDomains);
- }
- }
- }
- aopDomains.add(domain);
- }
- finally
- {
- lock.writeLock().unlock();
- }*/
- }
- }
-
-
- return ret;
- }
-
- public synchronized void cleanupLoader(ClassLoader loader)
- {
- WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.remove(loader);
- ClassLoaderDomain clDomain = clDomainRef == null ? null : clDomainRef.get();
- if (clDomain != null)
- {
- Integer count = classLoaderDomainReferenceCounts.get(clDomain);
- int cnt = count == null ? 0 : count.intValue();
- if (cnt > 0)
- {
- cnt--;
- }
- if (cnt == 0)
- {
- //aopDomainsByClassLoaderDomain.remove(clDomain);
- classLoaderDomainReferenceCounts.remove(clDomain);
- }
- else
- {
- classLoaderDomainReferenceCounts.put(clDomain, ++cnt);
- }
- //ScopedVFSClassLoaderDomain aopDomain = aopDomainsByClassLoader.remove(loader);
- classLoaderUnitParents.remove(loader);
- WeakReference<Module> moduleRef = classLoaderModules.remove(loader);
- if (moduleRef != null)
- {
- Module module = moduleRef.get();
- if (module != null)
- {
- moduleClassLoaders.remove(module);
- }
- }
-
- /*List<ScopedVFSClassLoaderDomain> aopDomains = aopDomainsByClassLoaderDomain.get(clDomain);
- if (aopDomains != null)
- {
- aopDomains.remove(aopDomain);
- }
- if (aopDomain != null)
- {
- aopDomain.getParent().unsubscribeSubDomain(aopDomain);
- }*/
- }
- //aopDomainsByClassLoader.remove(loader);
- }
-
- /*public synchronized Domain getRegisteredDomain(ClassLoader cl)
- {
- return aopDomainsByClassLoader.get(cl);
- }*/
-
- public synchronized ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl)
- {
- WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.get(cl);
- if (clDomainRef != null)
- {
- return clDomainRef.get();
- }
-
- ClassLoader parent = SecurityActions.getParent(cl);
- if (parent != null)
- {
- ClassLoaderDomain domain = getClassLoaderDomainForLoader(parent);
- if (domain != null)
- {
- classLoaderDomainsByLoader.put(parent, new WeakReference<ClassLoaderDomain>(domain));
- return domain;
- }
- }
- return null;
- }
-
- public synchronized ClassLoader getParentUnitLoader(ClassLoader loader)
- {
- WeakReference<ClassLoader> parentRef = classLoaderUnitParents.get(loader);
- if (parentRef != null)
- {
- return parentRef.get();
- }
- return null;
- }
-
- public synchronized Module getModule(ClassLoader loader)
- {
- WeakReference<Module> moduleRef = classLoaderModules.get(loader);
- if (moduleRef != null)
- {
- return moduleRef.get();
- }
- return null;
- }
-
- public synchronized ClassLoader getClassLoader(Module module)
- {
- WeakReference<ClassLoader> loaderRef = moduleClassLoaders.get(module);
- if (loaderRef != null)
- {
- return loaderRef.get();
- }
- return null;
- }
-
- /*public List<ScopedVFSClassLoaderDomain> getAOPDomainsForClassLoaderDomain(ClassLoaderDomain domain)
- {
- List<ScopedVFSClassLoaderDomain> domains = aopDomainsByClassLoaderDomain.get(domain);
- if (domains != null)
- {
- return domains;
- }
- return Collections.emptyList();
- }
-
- public ReadWriteLock getAOPDomainsLockForClassLoaderDomain(ClassLoaderDomain domain)
- {
- return aopDomainsLocksByClassLoaderDomain.get(domain);
- }*/
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java (from rev 92349, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jboss5/VFSClassLoaderDomainRegistry.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/VFSClassLoaderDomainRegistry.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,239 @@
+package org.jboss.classpool.plugins.as5;
+/*
+* 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.
+*/
+
+
+import java.lang.ref.WeakReference;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.dependency.Module;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class VFSClassLoaderDomainRegistry implements DomainRegistry
+{
+ protected final static ClassLoaderDomain domain = new ClassLoaderDomain("NOT_USED_PLACEHOLDER");
+
+ private ClassLoaderSystem system;
+
+ private ClassLoaderDomain defaultDomain;
+
+ /** classloader domains by their classloaders */
+ protected Map<ClassLoader, WeakReference<ClassLoaderDomain>> classLoaderDomainsByLoader = new WeakHashMap<ClassLoader, WeakReference<ClassLoaderDomain>>();
+
+ /** parent deployment unit classloaders indexed by children */
+ private Map<ClassLoader, WeakReference<ClassLoader>> classLoaderUnitParents = new WeakHashMap<ClassLoader, WeakReference<ClassLoader>>();
+
+ /** Modules by classloader */
+ private Map<ClassLoader, WeakReference<Module>> classLoaderModules = new WeakHashMap<ClassLoader, WeakReference<Module>>();
+
+ /** classloaders by module */
+ private Map<Module, WeakReference<ClassLoader>> moduleClassLoaders = new WeakHashMap<Module, WeakReference<ClassLoader>>();
+
+ protected Map<ClassLoaderDomain, Integer> classLoaderDomainReferenceCounts = new WeakHashMap<ClassLoaderDomain, Integer>();
+
+ /**
+ * Needed for the tests, not expected to be needed in production
+ */
+ public void setSystem(ClassLoaderSystem system)
+ {
+ this.system = system;
+ }
+
+ /**
+ * Needed for the tests, not expected to be needed in production
+ */
+ public void setDefaultDomain(ClassLoaderDomain domain)
+ {
+ this.defaultDomain = domain;
+ }
+
+ public synchronized ClassLoaderSystem getSystem()
+ {
+ if (system == null)
+ {
+ system = ClassLoaderSystem.getInstance();
+ }
+ return system;
+ }
+
+ public synchronized ClassLoaderDomain getDefaultDomain()
+ {
+ if (defaultDomain == null)
+ {
+ defaultDomain = getSystem().getDefaultDomain();
+ }
+ return defaultDomain;
+ }
+
+ public synchronized boolean initMapsForLoader(ClassLoader loader, Module module, ClassLoader parentUnitLoader)
+ {
+ if (loader == parentUnitLoader)
+ {
+ throw new IllegalArgumentException("initMapsForLoader() should only be called if parentUnitLoader is different from loader");
+ }
+ ClassLoaderSystem system = getSystem();
+
+ String domainName = module.getDeterminedDomainName();
+ ClassLoaderDomain clDomain = system.getDomain(domainName);
+ this.validateInitMaps(loader, clDomain, module, parentUnitLoader);
+
+ boolean ret = false;
+ if (!classLoaderDomainsByLoader.containsKey(loader))
+ {
+ Integer count = classLoaderDomainReferenceCounts.get(clDomain);
+ int cnt = count == null ? 0 : count.intValue();
+ classLoaderDomainReferenceCounts.put(clDomain, cnt);
+
+ classLoaderDomainsByLoader.put(loader, new WeakReference<ClassLoaderDomain>(clDomain));
+ classLoaderUnitParents.put(loader, new WeakReference<ClassLoader>(parentUnitLoader));
+ classLoaderModules.put(loader, new WeakReference<Module>(module));
+ moduleClassLoaders.put(module, new WeakReference<ClassLoader>(loader));
+ ret = true;
+ this.initMapsDone(loader, clDomain, module, parentUnitLoader);
+ }
+
+
+ return ret;
+ }
+
+ protected void validateInitMaps(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
+ {
+
+ }
+
+ protected void initMapsDone(ClassLoader loader, ClassLoaderDomain loaderDomain, Module module, ClassLoader parentUnitLoader)
+ {
+
+ }
+
+ public synchronized void cleanupLoader(ClassLoader loader)
+ {
+ validateCleanupLoader(loader);
+ WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.remove(loader);
+ ClassLoaderDomain clDomain = clDomainRef == null ? null : clDomainRef.get();
+ int cnt = 0;
+ if (clDomain != null)
+ {
+ Integer count = classLoaderDomainReferenceCounts.get(clDomain);
+ cnt = count == null ? 0 : count.intValue();
+ if (cnt > 0)
+ {
+ cnt--;
+ }
+ if (cnt == 0)
+ {
+ //aopDomainsByClassLoaderDomain.remove(clDomain);
+ classLoaderDomainReferenceCounts.remove(clDomain);
+ }
+ else
+ {
+ classLoaderDomainReferenceCounts.put(clDomain, ++cnt);
+ }
+ //ScopedVFSClassLoaderDomain aopDomain = aopDomainsByClassLoader.remove(loader);
+ classLoaderUnitParents.remove(loader);
+ WeakReference<Module> moduleRef = classLoaderModules.remove(loader);
+ if (moduleRef != null)
+ {
+ Module module = moduleRef.get();
+ if (module != null)
+ {
+ moduleClassLoaders.remove(module);
+ }
+ }
+
+
+ /*List<ScopedVFSClassLoaderDomain> aopDomains = aopDomainsByClassLoaderDomain.get(clDomain);
+ if (aopDomains != null)
+ {
+ aopDomains.remove(aopDomain);
+ }
+ if (aopDomain != null)
+ {
+ aopDomain.getParent().unsubscribeSubDomain(aopDomain);
+ }*/
+ }
+ cleanupLoaderDone(loader, clDomain, cnt);
+ //aopDomainsByClassLoader.remove(loader);
+ }
+
+ protected void validateCleanupLoader(ClassLoader loader) {}
+
+ protected void cleanupLoaderDone(ClassLoader loader, ClassLoaderDomain loaderDomain, int domainReferences) {}
+
+ public synchronized ClassLoaderDomain getClassLoaderDomainForLoader(ClassLoader cl)
+ {
+ WeakReference<ClassLoaderDomain> clDomainRef = classLoaderDomainsByLoader.get(cl);
+ if (clDomainRef != null)
+ {
+ return clDomainRef.get();
+ }
+
+ ClassLoader parent = SecurityActions.getParent(cl);
+ if (parent != null)
+ {
+ ClassLoaderDomain domain = getClassLoaderDomainForLoader(parent);
+ if (domain != null)
+ {
+ classLoaderDomainsByLoader.put(parent, new WeakReference<ClassLoaderDomain>(domain));
+ return domain;
+ }
+ }
+ return null;
+ }
+
+ public synchronized ClassLoader getParentUnitLoader(ClassLoader loader)
+ {
+ WeakReference<ClassLoader> parentRef = classLoaderUnitParents.get(loader);
+ if (parentRef != null)
+ {
+ return parentRef.get();
+ }
+ return null;
+ }
+
+ public synchronized Module getModule(ClassLoader loader)
+ {
+ WeakReference<Module> moduleRef = classLoaderModules.get(loader);
+ if (moduleRef != null)
+ {
+ return moduleRef.get();
+ }
+ return null;
+ }
+
+ public synchronized ClassLoader getClassLoader(Module module)
+ {
+ WeakReference<ClassLoader> loaderRef = moduleClassLoaders.get(module);
+ if (loaderRef != null)
+ {
+ return loaderRef.get();
+ }
+ return null;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl)
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolDomain.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolDomain.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jbosscl;
+package org.jboss.classpool.plugins.as5.jbosscl;
import java.security.AccessController;
import java.security.PrivilegedActionException;
@@ -38,20 +38,20 @@
import org.jboss.classloader.spi.ParentPolicy;
import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.BaseClassPool;
-import org.jboss.classpool.BaseClassPoolDomain;
-import org.jboss.classpool.ClassLoaderUtils;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.DelegatingClassPool;
-import org.jboss.classpool.jboss5.DomainRegistry;
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.base.BaseClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.helpers.ClassLoaderUtils;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.as5.DomainRegistry;
+import org.jboss.classpool.spi.ClassPoolRepository;
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JBossClClassPoolDomain extends BaseClassPoolDomain
+class JBossClClassPoolDomain extends BaseClassPoolDomain
{
Map<String, Set<DelegatingClassPool>> poolsByPackage = new HashMap<String, Set<DelegatingClassPool>>();
final static List<DelegatingClassPool> EMPTY_LIST = Collections.unmodifiableList(Collections.EMPTY_LIST);
@@ -93,7 +93,7 @@
}
@Override
- protected synchronized void removeClassPool(DelegatingClassPool pool)
+ public synchronized void removeClassPool(DelegatingClassPool pool)
{
super.removeClassPool(pool);
@@ -116,7 +116,7 @@
}
@Override
- protected CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
+ public CtClass getCachedOrCreate(DelegatingClassPool initiatingPool, String classname, String resourceName, boolean create, boolean trace)
{
if (trace) logger.trace(this + " looking for " + classname);
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdapter.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,20 +19,20 @@
* 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.classpool.jbosscl;
+package org.jboss.classpool.plugins.as5.jbosscl;
import javassist.ClassPool;
import org.jboss.classloader.spi.base.BaseClassLoaderDomain;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classpool.spi.ClassPoolRepository;
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JBossClClassPoolToClassPoolDomainAdapter extends ClassPoolToClassPoolDomainAdapter
+class JBossClClassPoolToClassPoolDomainAdapter extends ClassPoolToClassPoolDomainAdapter
{
@Override
public ClassPool initialiseParentClassLoader()
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClClassPoolToClassPoolDomainAdaptorFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,17 +19,17 @@
* 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.classpool.jbosscl;
+package org.jboss.classpool.plugins.as5.jbosscl;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdapter;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdaptorFactory;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JBossClClassPoolToClassPoolDomainAdaptorFactory implements ClassPoolToClassPoolDomainAdaptorFactory
+class JBossClClassPoolToClassPoolDomainAdaptorFactory implements ClassPoolToClassPoolDomainAdaptorFactory
{
private static final JBossClClassPoolToClassPoolDomainAdaptorFactory INSTANCE = new JBossClClassPoolToClassPoolDomainAdaptorFactory();
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPool.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jbosscl;
+package org.jboss.classpool.plugins.as5.jbosscl;
import java.lang.ref.WeakReference;
import java.security.ProtectionDomain;
@@ -30,18 +30,18 @@
import javassist.scopedpool.ScopedClassPoolRepository;
import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.DelegatingClassPool;
-import org.jboss.classpool.jboss5.RegisterModuleCallback;
-import org.jboss.classpool.jboss5.ToClassInvoker;
-import org.jboss.classpool.jboss5.ToClassInvokerPoolReference;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.plugins.as5.RegisterModuleCallback;
+import org.jboss.classpool.plugins.as5.ToClassInvoker;
+import org.jboss.classpool.plugins.as5.ToClassInvokerPoolReference;
/**
*
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class JBossClDelegatingClassPool extends DelegatingClassPool implements ToClassInvokerPoolReference
+class JBossClDelegatingClassPool extends DelegatingClassPool implements ToClassInvokerPoolReference
{
private WeakReference<Module> module;
private RegisterModuleCallback callback;
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,177 +0,0 @@
-/*
-* 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.classpool.jbosscl;
-
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.Set;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPool;
-import javassist.scopedpool.ScopedClassPoolFactory;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classloader.spi.ClassLoaderDomain;
-import org.jboss.classloader.spi.ClassLoaderSystem;
-import org.jboss.classloading.spi.RealClassLoader;
-import org.jboss.classloading.spi.dependency.ClassLoading;
-import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.AbstractJBossDelegatingClassPoolFactory;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomainRegistry;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdapter;
-import org.jboss.classpool.NonDelegatingClassPool;
-import org.jboss.classpool.jboss5.DomainRegistry;
-import org.jboss.classpool.jboss5.RegisterModuleCallback;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBossClDelegatingClassPoolFactory extends AbstractJBossDelegatingClassPoolFactory implements ScopedClassPoolFactory
-{
- private final DomainRegistry registry;
-
- private final RegisterModuleCallback registerModuleCallback;
-
- public JBossClDelegatingClassPoolFactory(DomainRegistry registry, RegisterModuleCallback registerModuleCallback)
- {
- this.registry = registry;
- this.registerModuleCallback = registerModuleCallback;
- }
-
- public ScopedClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = getCreateParentClassPools(cl, src, repository);
-
- if (cl instanceof RealClassLoader)
- {
- Module module = registry.getModule(cl);
- if (module == null)
- {
- module = getModuleForClassLoader(cl);
- }
- registerModuleCallback.registerModule(module);
- registerBootstrapLoaders();
- ClassPoolDomain domain = getDomain(module, cl);
- return new JBossClDelegatingClassPool(domain, cl, parent, repository, module, registerModuleCallback);
- }
-
- return new NonDelegatingClassPool(cl, parent, repository, true);
- }
-
- private synchronized ClassPoolDomain getDomain(Module module, ClassLoader cl)
- {
- ClassLoaderDomain domain = null;
- ClassLoaderSystem sys = registry.getSystem();
- if (module != null && module.getDeterminedParentDomainName() != null)
- {
- //It is scoped
- domain = sys.getDomain(module.getDeterminedDomainName());
- }
-
- if (domain == null)
- {
- domain = registry.getDefaultDomain();
- }
-
- ClassPoolDomain poolDomain = ClassPoolDomainRegistry.getInstance().getDomain(domain);
- if (poolDomain == null)
- {
- String parentDomainName = domain.getParentDomainName();
- ClassPoolDomain parentPoolDomain = null;
- if (parentDomainName != null)
- {
- ClassLoaderDomain parentDomain = sys.getDomain(parentDomainName);
- if (parentDomain == null)
- {
- throw new RuntimeException("No domain found called: " + parentDomainName);
- }
- parentPoolDomain = ClassPoolDomainRegistry.getInstance().getDomain(parentDomain);
- }
- if (parentDomainName == null)
- {
- ClassLoader parentUnitLoader = registry.getParentUnitLoader(cl);
- if (parentUnitLoader != null)
- {
- ClassPool parentUnitPool = ClassPoolRepository.getInstance().registerClassLoader(parentUnitLoader);
- parentPoolDomain = new ClassPoolToClassPoolDomainAdapter(parentUnitPool);
- }
- }
- poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
-
- ClassPoolDomainRegistry.getInstance().addClassPoolDomain(domain, poolDomain);
- }
- return poolDomain;
- }
-
- @Override
- protected ClassPool getCreateParentClassPools(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
- {
- ClassPool parent = super.getCreateParentClassPools(cl, src, repository);
- if (parent == ClassPool.getDefault())
- {
- //In AS BaseClassLoader seems to normally have a null parent
- return null;
- }
- return parent;
- }
-
- private void registerBootstrapLoaders()
- {
- Set<Module> unregistered = registerModuleCallback.getUnregisteredModules();
- if (unregistered.size() > 0)
- {
- for (Module module : unregistered)
- {
- ClassLoader loader = getClassLoaderForModule(module);
- log.debug("Registering loader for module " + module + ": " + loader);
- ClassPoolRepository.getInstance().registerClassLoader(loader);
- }
- }
- }
-
- private ClassLoader getClassLoaderForModule(final Module module)
- {
- return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
- {
-
- public ClassLoader run()
- {
- return ClassLoading.getClassLoaderForModule(module);
- }
- });
- }
-
- private Module getModuleForClassLoader(final ClassLoader classLoader)
- {
- return AccessController.doPrivileged(new PrivilegedAction<Module>()
- {
- public Module run()
- {
- return ClassLoading.getModuleForClassLoader(classLoader);
- }
- });
- }
-}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java (from rev 92349, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClDelegatingClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,178 @@
+/*
+* 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.classpool.plugins.as5.jbosscl;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.Set;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classloader.spi.ClassLoaderDomain;
+import org.jboss.classloader.spi.ClassLoaderSystem;
+import org.jboss.classloading.spi.RealClassLoader;
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomainRegistry;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdapter;
+import org.jboss.classpool.plugins.as.NonDelegatingClassPool;
+import org.jboss.classpool.plugins.as5.DomainRegistry;
+import org.jboss.classpool.plugins.as5.RegisterModuleCallback;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
+import org.jboss.classpool.temp.TempClassPoolFactory;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ at Deprecated
+public class JBossClDelegatingClassPoolFactory extends TempClassPoolFactory implements ScopedClassPoolFactory
+{
+ private final DomainRegistry registry;
+
+ private final RegisterModuleCallback registerModuleCallback;
+
+ public JBossClDelegatingClassPoolFactory(DomainRegistry registry, RegisterModuleCallback registerModuleCallback)
+ {
+ this.registry = registry;
+ this.registerModuleCallback = registerModuleCallback;
+ }
+
+ public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ ClassPool parent = getCreateParentClassPools(cl, src, repository);
+
+ if (cl instanceof RealClassLoader)
+ {
+ Module module = registry.getModule(cl);
+ if (module == null)
+ {
+ module = getModuleForClassLoader(cl);
+ }
+ registerModuleCallback.registerModule(module);
+ registerBootstrapLoaders();
+ ClassPoolDomain domain = getDomain(module, cl);
+ return new JBossClDelegatingClassPool(domain, cl, parent, repository, module, registerModuleCallback);
+ }
+
+ return new NonDelegatingClassPool(cl, parent, repository, true);
+ }
+
+ private synchronized ClassPoolDomain getDomain(Module module, ClassLoader cl)
+ {
+ ClassLoaderDomain domain = null;
+ ClassLoaderSystem sys = registry.getSystem();
+ if (module != null && module.getDeterminedParentDomainName() != null)
+ {
+ //It is scoped
+ domain = sys.getDomain(module.getDeterminedDomainName());
+ }
+
+ if (domain == null)
+ {
+ domain = registry.getDefaultDomain();
+ }
+
+ ClassPoolDomain poolDomain = ClassPoolDomainRegistry.getInstance().getDomain(domain);
+ if (poolDomain == null)
+ {
+ String parentDomainName = domain.getParentDomainName();
+ ClassPoolDomain parentPoolDomain = null;
+ if (parentDomainName != null)
+ {
+ ClassLoaderDomain parentDomain = sys.getDomain(parentDomainName);
+ if (parentDomain == null)
+ {
+ throw new RuntimeException("No domain found called: " + parentDomainName);
+ }
+ parentPoolDomain = ClassPoolDomainRegistry.getInstance().getDomain(parentDomain);
+ }
+ if (parentDomainName == null)
+ {
+ ClassLoader parentUnitLoader = registry.getParentUnitLoader(cl);
+ if (parentUnitLoader != null)
+ {
+ ClassPool parentUnitPool = ClassPoolRepository.getInstance().registerClassLoader(parentUnitLoader);
+ parentPoolDomain = new ClassPoolToClassPoolDomainAdapter(parentUnitPool);
+ }
+ }
+ poolDomain = new JBossClClassPoolDomain(domain.getName(), parentPoolDomain, domain.getParentPolicy(), registry);
+
+ ClassPoolDomainRegistry.getInstance().addClassPoolDomain(domain, poolDomain);
+ }
+ return poolDomain;
+ }
+
+ @Override
+ protected ClassPool getCreateParentClassPools(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ ClassPool parent = super.getCreateParentClassPools(cl, src, repository);
+ if (parent == ClassPool.getDefault())
+ {
+ //In AS BaseClassLoader seems to normally have a null parent
+ return null;
+ }
+ return parent;
+ }
+
+ private void registerBootstrapLoaders()
+ {
+ Set<Module> unregistered = registerModuleCallback.getUnregisteredModules();
+ if (unregistered.size() > 0)
+ {
+ for (Module module : unregistered)
+ {
+ ClassLoader loader = getClassLoaderForModule(module);
+ log.debug("Registering loader for module " + module + ": " + loader);
+ ClassPoolRepository.getInstance().registerClassLoader(loader);
+ }
+ }
+ }
+
+ private ClassLoader getClassLoaderForModule(final Module module)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+ {
+
+ public ClassLoader run()
+ {
+ return ClassLoading.getClassLoaderForModule(module);
+ }
+ });
+ }
+
+ private Module getModuleForClassLoader(final ClassLoader classLoader)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<Module>()
+ {
+ public Module run()
+ {
+ return ClassLoading.getModuleForClassLoader(classLoader);
+ }
+ });
+ }
+}
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/JBossClParentDelegationStrategy.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/JBossClParentDelegationStrategy.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,14 +19,14 @@
* 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.classpool.jbosscl;
+package org.jboss.classpool.plugins.as5.jbosscl;
import org.jboss.classloader.spi.ParentPolicy;
import org.jboss.classloader.spi.filter.ClassFilter;
-import org.jboss.classpool.AbstractParentDelegationStrategy;
-import org.jboss.classpool.ClassLoaderUtils;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolToClassPoolDomainAdaptorFactory;
+import org.jboss.classpool.base.AbstractParentDelegationStrategy;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolToClassPoolDomainAdaptorFactory;
+import org.jboss.classpool.helpers.ClassLoaderUtils;
/**
*
Modified: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/jbosscl/SecurityActions.java 2009-07-23 18:49:50 UTC (rev 91617)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/plugins/as5/jbosscl/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -19,7 +19,7 @@
* 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.classpool.jbosscl;
+package org.jboss.classpool.plugins.as5.jbosscl;
import java.security.AccessController;
import java.security.PrivilegedAction;
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPool.java (from rev 91980, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPool.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,428 @@
+package org.jboss.classpool.spi;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+import org.jboss.classpool.helpers.ClassLoaderUtils;
+import org.jboss.logging.Logger;
+
+/**
+ * @author <a href="mailto:bill at jboss.org">Bill Burke</a>
+ * @author <a href="mailto:flavia.rainone at jboss.com">Flavia Rainone</a>
+ * @version $Revision: 86930 $
+ */
+public class AbstractClassPool extends ScopedClassPool
+{
+ protected final Logger logger = Logger.getLogger(this.getClass());
+
+ /** Classnames of classes that will be created - we do not want to look for these in other pools.
+ * The main use for this is when a class is created in a parent pool, and we then want to
+ * create a class with the same name in a parent-last child pool. As part of the create process
+ * javassist.ClassPool will check if that class is frozen (which in turn will call getCached()
+ * and get0()). If the classname exists in this map, get0() and getCached() should return null;
+ */
+ protected final ConcurrentHashMap<String, String> generatedClasses = new ConcurrentHashMap<String, String>();
+
+ protected final ConcurrentHashMap<String, Boolean> localResources = new ConcurrentHashMap<String, Boolean>();
+
+ /** Classnames of classes that have been loaded, but were not woven */
+ protected final ConcurrentHashMap<String, Boolean> loadedButNotWovenClasses = new ConcurrentHashMap<String, Boolean>();
+
+ /** Causes the AbstractClassPool.getCached() method to search all ClassPools registered in the repository */
+ public static final Class<SearchAllRegisteredLoadersSearchStrategy> SEARCH_ALL_STRATEGY = SearchAllRegisteredLoadersSearchStrategy.class;
+
+ /** Causes the AbstractClassPool.getCached() method to search only itself */
+ public static final Class<SearchLocalLoaderLoaderSearchStrategy> SEARCH_LOCAL_ONLY_STRATEGY = SearchLocalLoaderLoaderSearchStrategy.class;
+
+ private final ClassPoolSearchStrategy searchStrategy;
+
+ private final Map<AbstractClassPool, Boolean> children = new WeakHashMap<AbstractClassPool, Boolean>();
+
+ static
+ {
+ ClassPool.doPruning = false;
+ ClassPool.releaseUnmodifiedClassFile = false;
+ }
+
+ public AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ this(cl, src, repository, false);
+ }
+
+ protected AbstractClassPool(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ this(null, src, repository, true);
+ }
+
+ private AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, boolean isTemp)
+ {
+ this(cl, src, repository, SEARCH_ALL_STRATEGY, isTemp);
+ }
+
+ public AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
+ {
+ this(cl, src, repository, searchStrategy, false);
+ }
+
+ public AbstractClassPool(ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> searchStrategy)
+ {
+ this(null, src, repository, searchStrategy, true);
+ }
+
+ private AbstractClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository, Class<? extends ClassPoolSearchStrategy> 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);
+ }
+ }
+ if (logger.isTraceEnabled()) logger.trace(this + " creating pool for loader " + cl + " searchStrategy:" + this.searchStrategy + " isTemp:" + isTemp);
+
+ registerWithParent();
+ }
+
+ private void registerWithParent()
+ {
+ if (parent != null && parent instanceof AbstractClassPool)
+ {
+ ((AbstractClassPool)parent).children.put(this, Boolean.TRUE);
+ }
+ }
+
+ private void unregisterWithParent()
+ {
+ if (parent != null && parent instanceof AbstractClassPool)
+ {
+ ((AbstractClassPool)parent).children.remove(this);
+ }
+ }
+
+ public void registerGeneratedClass(String className)
+ {
+ generatedClasses.put(className, className);
+ }
+
+ public boolean isGeneratedClass(String className)
+ {
+ return generatedClasses.containsKey(className);
+ }
+
+ public void doneGeneratingClass(String className)
+ {
+ generatedClasses.remove(className);
+ }
+
+ public void close()
+ {
+ super.close();
+ unregisterWithParent();
+ repository.unregisterClassLoader(getClassLoader());
+
+ for (Iterator<AbstractClassPool> childIterator = children.keySet().iterator(); childIterator.hasNext();)
+ {
+ AbstractClassPool child = childIterator.next();
+ childIterator.remove();
+ if (child.getClassLoader() != null)
+ {
+ child.close();
+ }
+ }
+// for (Iterator<AbstractClassPool> it = children.keySet().iterator() ; it.hasNext() ; )
+// {
+// AbstractClassPool child = it.next();
+// it.remove();
+// ClassLoader loader = child.getClassLoader();
+// if (loader != null)
+// {
+// AspectManager.instance().unregisterClassLoader(loader);
+// }
+// }
+ }
+
+ public CtClass getCached(String classname)
+ {
+ return searchStrategy.getCached(classname);
+ }
+
+ /**
+ * Make createCtClass public so that we can override it
+ */
+// @Override
+// public CtClass createCtClass(String classname, boolean useCache)
+// {
+// boolean trace = logger.isTraceEnabled();
+//
+// if (trace) logger.trace(this + " attempting to create CtClass " + classname);
+// CtClass clazz = super.createCtClass(classname, useCache);
+// if (trace) logger.trace(this + " created CtClass " + getClassPoolLogStringForClass(clazz));
+//
+// return clazz;
+// }
+
+ @Override
+ public void cacheCtClass(String classname, CtClass c, boolean dynamic)
+ {
+ boolean trace = logger.isTraceEnabled();
+ if (trace) logger.trace(this + " caching " + classname);
+ // TODO remove this true when ready
+ super.cacheCtClass(classname, c, true);
+ if (dynamic)
+ {
+ if (trace) logger.trace(this + " registering dynamic class " + classname);
+ doneGeneratingClass(classname);
+ String resourcename = getResourceName(classname);
+ localResources.put(resourcename, Boolean.TRUE);
+ }
+ }
+
+ protected boolean includeInGlobalSearch()
+ {
+ return true;
+ }
+
+ protected String getResourceName(String classname)
+ {
+ return ClassLoaderUtils.getResourceName(classname);
+ }
+
+ protected final boolean isLocalResource(String resourceName, boolean trace)
+ {
+ String classResourceName = resourceName;
+ Boolean isLocal = localResources.get(classResourceName);
+ if (isLocal != null)
+ {
+ if (trace) logger.trace(this + " " + resourceName + " is local " + isLocal);
+
+ return isLocal.booleanValue();
+ }
+ boolean localResource = isLocalClassLoaderResource(classResourceName);
+ localResources.put(classResourceName, localResource ? Boolean.TRUE : Boolean.FALSE);
+
+ if (trace) logger.trace(this + " " + resourceName + " is local " + localResource);
+
+ return localResource;
+ }
+
+ protected boolean isLocalClassLoaderResource(String classResourceName)
+ {
+ return getClassLoader().getResource(classResourceName) != null;
+ }
+
+// @Override
+// public synchronized CtClass getLocally(String classname)
+// throws NotFoundException
+// {
+// boolean trace = logger.isTraceEnabled();
+// if (trace) logger.trace(this + " attempting local get for " + classname);
+// softcache.remove(classname);
+// CtClass clazz = (CtClass) classes.get(classname);
+// if (trace && clazz != null)
+// {
+// logger.trace(this + " found " + classname + " in cache");
+// }
+// if (clazz == null)
+// {
+// clazz = createCtClass(classname, true);
+// if (clazz == null) throw new NotFoundException(classname);
+// lockInCache(clazz);//Avoid use of the softclasscache
+// }
+//
+// return clazz;
+// }
+
+// @Override
+// protected CtClass getCachedLocally(String classname)
+// {
+// if (logger.isTraceEnabled()) logger.trace(this + " checking local cache for " + classname);
+// return super.getCachedLocally(classname);
+// }
+
+// @Override
+// public void lockInCache(CtClass c)
+// {
+// if (logger.isTraceEnabled()) logger.trace(this + " locking in cache " + c.getName());
+// super.lockInCache(c);
+// }
+
+// public void setClassLoadedButNotWoven(String classname)
+// {
+// loadedButNotWovenClasses.put(classname, Boolean.TRUE);
+// }
+//
+// public boolean isClassLoadedButNotWoven(String classname)
+// {
+// return loadedButNotWovenClasses.get(classname) == Boolean.TRUE;
+// }
+
+// public static AbstractClassPool createAOPClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+// {
+// return (AbstractClassPool)AspectManager.getClassPoolFactory().create(cl, src, repository);
+// }
+//
+// public static AbstractClassPool createAOPClassPool(ClassPool src, ScopedClassPoolRepository repository)
+// {
+// return (AbstractClassPool)AspectManager.getClassPoolFactory().create(src, repository);
+// }
+
+ public String toString()
+ {
+ ClassLoader cl = null;
+ try
+ {
+ cl = getClassLoader();
+ }
+ catch(IllegalStateException ignore)
+ {
+ }
+ return this.getClass().getName() + "@" + System.identityHashCode(this) + " " + super.toString() + " - dcl:" + cl;
+ }
+
+ /* public CtClass getClass(String classname) {
+ CtClass clazz;
+ if (classname.charAt(0) == '[')
+ {
+ try
+ {
+ return Descriptor.toCtClass(classname, this);
+ }
+ catch (NotFoundException nfe)
+ {
+ throw new UnreachableStatementException(nfe.getMessage());
+ }
+ }
+ if (classname == null)
+ return null;
+ else
+ clazz = get0(classname, true);
+
+ if (clazz != null)
+ {
+ //clazz.incGetCounter();
+ }
+ return clazz;
+ }*/
+
+
+// public CtClass internalGet0(String classname, boolean useCache) throws NotFoundException
+// {
+// return super.get0(classname, useCache);
+// }
+
+ protected String getClassPoolLogStringForClass(CtClass clazz)
+ {
+ if (clazz == null)
+ {
+ return null;
+ }
+ if (clazz.getClassPool() == null)
+ {
+ return null;
+ }
+ return clazz.getClassPool().toString();
+ }
+
+ /**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+ public interface ClassPoolSearchStrategy
+ {
+ CtClass getCached(String classname);
+ }
+
+ /**
+ * Contains the original AbstractClassPool.getCached()
+ *
+ */
+ // NOTE: identical to ScopedClassPoolRepository, with two differences:
+ // 1. This method uses the shortcuts isLocalResource and getResourceName
+ // 2. This method uses the Repository.includeInGlobalSearch method
+ private class SearchAllRegisteredLoadersSearchStrategy implements ClassPoolSearchStrategy
+ {
+ Logger logger = Logger.getLogger(this.getClass());
+ public CtClass getCached(String classname)
+ {
+ boolean trace = logger.isTraceEnabled();
+
+ if (trace) logger.trace(this + " " + AbstractClassPool.this + " searching all pools for " + classname);
+
+ CtClass clazz = getCachedLocally(classname);
+ if (clazz == null && getClassLoader0() != null &&
+ !isLocalResource(getResourceName(classname), trace) &&
+ !generatedClasses.containsKey(classname))
+ {
+ Map<ClassLoader, ClassPool> registeredCLs = repository.getRegisteredCLs();
+ synchronized (registeredCLs)
+ {
+ for(ClassPool pl : registeredCLs.values())
+ {
+ AbstractClassPool pool = (AbstractClassPool) pl;
+ if (pool.isUnloadedClassLoader())
+ {
+ if (trace) logger.trace(this + " pool is unloaded " + pool);
+ repository.unregisterClassLoader(pool.getClassLoader());
+ continue;
+ }
+
+ //Do not check classpools for scoped classloaders
+ if (!pool.includeInGlobalSearch())
+ {
+ if (trace) logger.trace(this + " pool is scoped " + pool);
+ continue;
+ }
+
+ if (trace) logger.trace(this + " " + AbstractClassPool.this + " searching for " + classname + " in " + pool);
+ clazz = pool.getCachedLocally(classname);
+ if (clazz != null)
+ {
+ break;
+ }
+ }
+ }
+ }
+ if (trace) logger.trace(this + " " + AbstractClassPool.this + " found " + classname + " in pool" + getClassPoolLogStringForClass(clazz));
+ return clazz;
+ }
+ }
+
+ /**
+ * Checks only the ClassPool's cache
+ */
+ private class SearchLocalLoaderLoaderSearchStrategy implements ClassPoolSearchStrategy
+ {
+ Logger logger = Logger.getLogger(this.getClass());
+
+ public CtClass getCached(String classname)
+ {
+ boolean trace = logger.isTraceEnabled();
+
+ if (trace) logger.trace(this + " " + AbstractClassPool.this + " searching just this pool for " + classname);
+ CtClass clazz = getCachedLocally(classname);
+ if (trace) logger.trace(this + " " + AbstractClassPool.this + " found " + classname + " in pool" + getClassPoolLogStringForClass(clazz));
+ return clazz;
+ }
+ }
+}
\ No newline at end of file
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java (from rev 91980, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/AbstractClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,21 @@
+package org.jboss.classpool.spi;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+// TODO: check why ScopedClassPoolRepository and not AbstractClassPoolRepository
+public class AbstractClassPoolFactory implements ScopedClassPoolFactory
+{
+
+ public AbstractClassPool create(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ return new AbstractClassPool(cl, src, repository);
+ }
+
+ public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ return new AbstractClassPool(src, repository);
+ }
+
+}
\ No newline at end of file
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java (from rev 91980, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepository.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepository.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,185 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.classpool.spi;
+
+import java.util.Map;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPool;
+import javassist.scopedpool.ScopedClassPoolFactory;
+import javassist.scopedpool.ScopedClassPoolRepository;
+import javassist.scopedpool.ScopedClassPoolRepositoryImpl;
+
+
+/**
+ * Singleton classpool repository
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 87799 $
+ */
+public class ClassPoolRepository implements ScopedClassPoolRepository
+{
+ //private static final Logger logger = Logger.getLogger(ClassPoolRepository.class);
+
+ private final static ClassPoolRepository instance = new ClassPoolRepository();
+
+ /** The classes per classppol */
+ //protected final HashMap<ClassLoader, HashSet<Class<?>>> ucl2classes = new HashMap<ClassLoader, HashSet<Class<?>>>();
+
+ private ScopedClassPoolRepository delegate;
+ private ClassPoolRepositoryCallback callback;
+
+ public static ClassPoolRepository getInstance()
+ {
+ return instance;
+ }
+
+ private ClassPoolRepository()
+ {
+ this.delegate = ScopedClassPoolRepositoryImpl.getInstance();
+ //This was needed when jboss-aop.jar was deployed in the jboss/lib directory since the AspectManager bean had no chance to initialise it
+ delegate.setClassPoolFactory(new AbstractClassPoolFactory());
+ // if (!setJBossSpecificStartupVariables())
+// {
+// delegate.setClassPoolFactory(new AbstractClassPoolFactory());
+// }
+ }
+
+// private boolean setJBossSpecificStartupVariables()
+// {
+// //We are running within JBoss 5, let's default to the JBossClassPoolFactory and set the ScopedClassPoolHelper
+// //so that we get correct behaviour before the AspectManager service has been deployed
+// try
+// {
+// Class jbcpf = Class.forName("org.jboss.aop.deployment.JBossClassPoolFactory");
+// ScopedClassPoolFactory factory = (ScopedClassPoolFactory)jbcpf.newInstance();
+//
+// Class hlpr = Class.forName("org.jboss.aop.deployment.JBossScopedClassLoaderHelper");
+// AOPScopedClassLoaderHelper helper = (AOPScopedClassLoaderHelper)hlpr.newInstance();
+// delegate.setClassPoolFactory(factory);
+// AspectManager.scopedCLHelper = helper;
+// return true;
+// }
+// catch (Exception e)
+// {
+// }
+// return false;//Not running in JBoss probably
+// }
+
+ public void setClassPoolFactory(ScopedClassPoolFactory factory)
+ {
+ delegate.setClassPoolFactory(factory);
+ }
+
+ public ScopedClassPoolFactory getClassPoolFactory()
+ {
+ return delegate.getClassPoolFactory();
+ }
+
+ public void setClassPoolRepositoryCallback(ClassPoolRepositoryCallback callback)
+ {
+ this.callback = callback;
+ }
+
+ public ClassPoolRepositoryCallback getClassPoolRepositoryCallback()
+ {
+ return this.callback;
+ }
+
+ public boolean isPrune()
+ {
+ return delegate.isPrune();
+ }
+
+ public void setPrune(boolean prune)
+ {
+ delegate.setPrune(prune);
+ }
+
+ public ScopedClassPool createScopedClassPool(ClassLoader cl, ClassPool src)
+ {
+ return delegate.createScopedClassPool(cl, src);
+ }
+
+ public ClassPool findClassPool(ClassLoader cl)
+ {
+ return delegate.findClassPool(cl);
+ }
+
+ /**
+ * Get the registered classloaders
+ *
+ * @return the registered classloaders
+ */
+ public Map<ClassLoader, ClassPool> getRegisteredCLs()
+ {
+ return delegate.getRegisteredCLs();
+ }
+
+ /**
+ * This method will check to see if a register classloader has been undeployed (as in JBoss)
+ */
+ public void clearUnregisteredClassLoaders()
+ {
+ delegate.clearUnregisteredClassLoaders();
+ }
+
+ public ClassPool registerClassLoader(ClassLoader classLoader)
+ {
+ if (classLoader == null)
+ {
+ classLoader = SecurityActions.getContextClassLoader();
+ }
+ ClassPool classPool = delegate.registerClassLoader(classLoader);
+ if (callback != null)
+ {
+ callback.classLoaderRegistered(classLoader);
+ }
+ return classPool;
+ }
+
+ public void unregisterClassLoader(ClassLoader classLoader)
+ {
+ delegate.unregisterClassLoader(classLoader);
+ if (callback != null)
+ {
+ callback.classLoaderUnregistered(classLoader);
+ }
+ }
+
+ /*public void registerClass(Class<?> clazz)
+ {
+ ClassLoader classLoader = SecurityActions.getClassLoader(clazz);
+ HashSet<Class<?>> classes = ucl2classes.get(classLoader);
+ if (classes == null)
+ {
+ classes = new HashSet<Class<?>>();
+ ucl2classes.put(classLoader, classes);
+ }
+ classes.add(clazz);
+ }*/
+
+ /*public void perfomUnregisterClassLoader(ClassLoader cl)
+ {
+ ucl2classes.remove(cl);
+ }*/
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepositoryCallback.java (from rev 91980, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ClassPoolRepositoryCallback.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepositoryCallback.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/ClassPoolRepositoryCallback.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,34 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt 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.classpool.spi;
+
+
+/**
+ * Singleton classpool repository
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 87799 $
+ */
+public interface ClassPoolRepositoryCallback {
+ public void classLoaderRegistered(ClassLoader classLoader);
+ public void classLoaderUnregistered(ClassLoader classLoader);
+}
\ No newline at end of file
Added: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/SecurityActions.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/SecurityActions.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/spi/SecurityActions.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -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.classpool.spi;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+class SecurityActions
+{
+ public static class GetContextClassLoaderAction implements PrivilegedAction<ClassLoader>
+ {
+ public static GetContextClassLoaderAction INSTANCE = new GetContextClassLoaderAction();
+
+ public ClassLoader run()
+ {
+ return Thread.currentThread().getContextClassLoader();
+ }
+ }
+
+ static ClassLoader getContextClassLoader()
+ {
+ if (System.getSecurityManager() == null)
+ return Thread.currentThread().getContextClassLoader();
+ else
+ return AccessController.doPrivileged(GetContextClassLoaderAction.INSTANCE);
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempClassPoolFactory.java (from rev 92349, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/AbstractJBossDelegatingClassPoolFactory.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempClassPoolFactory.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,58 @@
+/*
+* 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.classpool.temp;
+
+import org.jboss.classpool.plugins.as.AbstractJBossClassPoolFactory;
+import org.jboss.classpool.spi.AbstractClassPool;
+
+import javassist.ClassPool;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class TempClassPoolFactory extends AbstractJBossClassPoolFactory
+{
+ // TODO: check if this is needed
+ /*protected ClassPool getCreateParentClassPools(final ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ //Make sure that we get classpools for all the parent classloaders
+ if (cl == null)
+ {
+ return ClassPool.getDefault();
+ }
+ ClassLoader parent = SecurityActions.getParent(cl);
+
+ if (parent != null)
+ {
+ return repository.registerClassLoader(parent);
+ }
+ return src;
+ }*/
+
+ public AbstractClassPool create(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ return new TempJBossDelegatingClassPool(src, repository);
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossClassPool.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossClassPool.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,71 @@
+/*
+* 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.classpool.temp;
+
+import org.jboss.classpool.spi.AbstractClassPool;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+
+/**
+ * The temporary classpool used by the instrumentor. It's main job is to delegate to the parent classpool
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TempJBossClassPool extends AbstractClassPool
+{
+ boolean isParentAbstractPool;
+ public TempJBossClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ super(cl, src, repository);
+ if (src instanceof AbstractClassPool)
+ {
+ isParentAbstractPool = true;
+ }
+ }
+
+ public TempJBossClassPool(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ super(src, repository);
+ if (src instanceof AbstractClassPool)
+ {
+ isParentAbstractPool = true;
+ }
+ }
+
+ public CtClass getCached(String classname)
+ {
+ CtClass clazz = null;
+ if (isParentAbstractPool)
+ {
+ clazz = ((AbstractClassPool)parent).getCached(classname);
+ }
+ if (clazz == null)
+ {
+ clazz = super.getCached(classname);
+ }
+ return clazz;
+ }
+}
Copied: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossDelegatingClassPool.java (from rev 91617, projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/TempJBossDelegatingClassPool.java)
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossDelegatingClassPool.java (rev 0)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/temp/TempJBossDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -0,0 +1,72 @@
+/*
+* 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.classpool.temp;
+
+import org.jboss.classpool.base.BaseClassPool;
+import org.jboss.classpool.spi.AbstractClassPool;
+
+import javassist.ClassPool;
+import javassist.CtClass;
+import javassist.NotFoundException;
+import javassist.scopedpool.ScopedClassPoolRepository;
+
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class TempJBossDelegatingClassPool extends AbstractClassPool
+{
+ boolean isParentPoolDelegating;
+ public TempJBossDelegatingClassPool(ClassLoader cl, ClassPool src, ScopedClassPoolRepository repository)
+ {
+ super(cl, src, repository);
+ if (src instanceof BaseClassPool)
+ {
+ isParentPoolDelegating = true;
+ }
+ }
+
+ public TempJBossDelegatingClassPool(ClassPool src, ScopedClassPoolRepository repository)
+ {
+ super(src, repository);
+ if (src instanceof BaseClassPool)
+ {
+ isParentPoolDelegating = true;
+ }
+ }
+ @Override
+ public CtClass get0(String classname, boolean useCache) throws NotFoundException
+ {
+ CtClass clazz = null;
+ if (isParentPoolDelegating)
+ {
+ clazz = ((BaseClassPool)parent).get0(classname, useCache);
+ }
+ if (clazz == null)
+ {
+ clazz = super.get0(classname, useCache);
+ }
+ return clazz;
+ }
+}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPool.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPool.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPool.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,70 +0,0 @@
-/*
-* 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.classpool.ucl;
-
-import java.io.File;
-import java.net.URL;
-import java.security.ProtectionDomain;
-
-import javassist.CannotCompileException;
-import javassist.ClassPool;
-import javassist.CtClass;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.DelegatingClassPool;
-import org.jboss.classpool.jboss4.ToClassInvoker;
-import org.jboss.classpool.jboss4.ToClassInvokerPoolReference;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class JBossUclDelegatingClassPool extends DelegatingClassPool implements ToClassInvokerPoolReference
-{
- ToClassInvoker toClassInvoker = null;
-
- public JBossUclDelegatingClassPool(ClassPoolDomain domain, ClassLoader cl, ClassPool parent,
- ScopedClassPoolRepository repository, File tmpDir, URL tmpURL)
- {
- super(domain, cl, parent, repository);
- toClassInvoker = new ToClassInvoker(tmpDir);
- }
-
- public Class<?> toClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return toClassInvoker.toClass(this, cc, getResourceName(cc.getName()), loader, domain);
- }
-
- public Class<?> superPoolToClass(CtClass cc, ClassLoader loader, ProtectionDomain domain) throws CannotCompileException
- {
- return super.toClass(cc, loader, domain);
- }
-
- @Override
- public void lockInCache(CtClass clazz)
- {
- super.lockInCache(clazz);
- localResources.put(getResourceName(clazz.getName()), Boolean.TRUE);
- }
-}
Deleted: projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPoolFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPoolFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/main/java/org/jboss/classpool/ucl/JBossUclDelegatingClassPoolFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -1,166 +0,0 @@
-/*
-* 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.classpool.ucl;
-
-import java.io.File;
-import java.io.IOException;
-import java.net.URL;
-
-import javassist.ClassPool;
-import javassist.scopedpool.ScopedClassPoolRepository;
-
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.AbstractClassPoolFactory;
-import org.jboss.classpool.AbstractJBossDelegatingClassPoolFactory;
-import org.jboss.classpool.BaseClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomainRegistry;
-import org.jboss.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 JBossUclDelegatingClassPoolFactory extends AbstractJBossDelegatingClassPoolFactory implements AbstractClassPoolFactory
-{
- private ClassPoolDomain mainDomain;
- protected File tmpClassesDir;
-
- public JBossUclDelegatingClassPoolFactory(File tmpClassesDir) throws IOException
- {
- System.out.println("TMP CLASSES DIR: " + tmpClassesDir);
- this.tmpClassesDir = tmpClassesDir;
- }
-
- public synchronized AbstractClassPool 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)
- {
-
- boolean parentFirst = ((HeirarchicalLoaderRepository3)loaderRepository).getUseParentFirst();
- domain = new BaseClassPoolDomain("Scoped" + System.identityHashCode(loaderRepository), mainDomain, parentFirst);
- }
- else
- {
- if (mainDomain == null)
- {
- domain = new BaseClassPoolDomain(ServerConstants.DEFAULT_LOADER_NAME, null, false);
- 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);
- }
- }
-
-}
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/common/ClassFactory.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/common/ClassFactory.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/common/ClassFactory.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -26,8 +26,8 @@
import javassist.CtClass;
import junit.framework.Assert;
-import org.jboss.classpool.AbstractClassPool;
-import org.jboss.classpool.ClassPoolRepository;
+import org.jboss.classpool.spi.AbstractClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
/**
* @author <a href="flavia.rainone at jboss.com">Flavia Rainone</a>
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithUsesPackageSanityTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithUsesPackageSanityTestCase.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassLoaderWithUsesPackageSanityTestCase.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -27,6 +27,7 @@
import org.jboss.test.classpool.support.BundleInfoBuilder;
import org.jboss.test.classpool.support.Result;
+import org.jboss.test.classpool.support.SupportClasses;
/**
* Tests the behaviour of the new classloaders so that we can get the same in the new classpools
@@ -87,6 +88,7 @@
unregisterClassLoader(clA1);
}
assertNoClassLoader(rA1);
+ //assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_A);
}
public void testUsesNoImport() throws Exception
@@ -106,6 +108,7 @@
unregisterClassLoader(clA1);
}
assertNoClassLoader(rA1);
+ //assertCannotLoadClass(this.getClass().getClassLoader(), SupportClasses.CLASS_A);
}
}
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/ClassPoolWithReplaceReferencesTestCase.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -42,7 +42,7 @@
import junit.framework.Test;
import org.jboss.classloading.spi.DomainClassLoader;
-import org.jboss.classpool.ClassPoolRepository;
+import org.jboss.classpool.spi.ClassPoolRepository;
import org.jboss.test.AbstractTestDelegate;
import org.jboss.util.loading.Translator;
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/jbosscl/test/JBossClClassPoolTest.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -47,10 +47,10 @@
import org.jboss.classloader.test.support.IsolatedClassLoaderTestHelper;
import org.jboss.classloading.spi.dependency.ClassLoading;
import org.jboss.classloading.spi.dependency.Module;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.jboss5.RegisterModuleCallback;
-import org.jboss.classpool.jboss5.VFSClassLoaderDomainRegistry;
-import org.jboss.classpool.jbosscl.JBossClDelegatingClassPoolFactory;
+import org.jboss.classpool.plugins.as5.RegisterModuleCallback;
+import org.jboss.classpool.plugins.as5.VFSClassLoaderDomainRegistry;
+import org.jboss.classpool.plugins.as5.jbosscl.JBossClDelegatingClassPoolFactory;
+import org.jboss.classpool.spi.ClassPoolRepository;
import org.jboss.kernel.plugins.deployment.AbstractKernelDeployment;
import org.jboss.kernel.spi.deployment.KernelDeployment;
import org.jboss.test.AbstractTestCaseWithSetup;
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ClassPoolTest.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -29,11 +29,11 @@
import javassist.ClassPool;
-import org.jboss.classpool.AbstractClassPoolDomain;
-import org.jboss.classpool.BaseClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.DelegatingClassPool;
+import org.jboss.classpool.base.BaseClassPoolDomain;
+import org.jboss.classpool.domain.AbstractClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
import org.jboss.test.AbstractTestCaseWithSetup;
import org.jboss.test.AbstractTestDelegate;
import org.jboss.test.classpool.support.SupportClasses;
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/IsLocalResourcePluginFactoryTestCase.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -30,19 +30,19 @@
import junit.framework.TestCase;
import junit.framework.TestSuite;
-import org.jboss.classpool.BaseClassPoolDomain;
-import org.jboss.classpool.ClassPoolDomain;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.DefaultClassLoaderIsLocalResourcePlugin;
-import org.jboss.classpool.DefaultClassLoaderIsLocalResourcePluginFactory;
-import org.jboss.classpool.DelegatingClassPool;
-import org.jboss.classpool.IsLocalResourcePlugin;
-import org.jboss.classpool.IsLocalResourcePluginFactory;
-import org.jboss.classpool.IsLocalResourcePluginFactoryRegistry;
-import org.jboss.classpool.TranslatableClassLoaderIsLocalResourcePlugin;
-import org.jboss.classpool.TranslatableClassLoaderIsLocalResourcePluginFactory;
-import org.jboss.classpool.URLClassLoaderIsLocalResourcePlugin;
-import org.jboss.classpool.URLClassLoaderIsLocalResourcePluginFactory;
+import org.jboss.classpool.base.BaseClassPoolDomain;
+import org.jboss.classpool.base.DefaultClassLoaderIsLocalResourcePlugin;
+import org.jboss.classpool.base.DefaultClassLoaderIsLocalResourcePluginFactory;
+import org.jboss.classpool.base.IsLocalResourcePlugin;
+import org.jboss.classpool.base.IsLocalResourcePluginFactory;
+import org.jboss.classpool.base.IsLocalResourcePluginFactoryRegistry;
+import org.jboss.classpool.base.TranslatableClassLoaderIsLocalResourcePlugin;
+import org.jboss.classpool.base.TranslatableClassLoaderIsLocalResourcePluginFactory;
+import org.jboss.classpool.base.URLClassLoaderIsLocalResourcePlugin;
+import org.jboss.classpool.base.URLClassLoaderIsLocalResourcePluginFactory;
+import org.jboss.classpool.domain.ClassPoolDomain;
+import org.jboss.classpool.plugins.as.DelegatingClassPool;
+import org.jboss.classpool.spi.ClassPoolRepository;
import org.jboss.util.loading.Translatable;
/**
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentFirstDelegatingClassPoolTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentFirstDelegatingClassPoolTestCase.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentFirstDelegatingClassPoolTestCase.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -8,7 +8,7 @@
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.jboss.classpool.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
import org.jboss.test.classpool.common.ClassFactory;
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentLastDelegatingClassPoolTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentLastDelegatingClassPoolTestCase.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ParentLastDelegatingClassPoolTestCase.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -7,7 +7,7 @@
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.jboss.classpool.AbstractClassPoolDomain;
+import org.jboss.classpool.domain.AbstractClassPoolDomain;
import org.jboss.test.classpool.common.ClassFactory;
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ScopedSiblingDelegatingClassPoolTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ScopedSiblingDelegatingClassPoolTestCase.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/ScopedSiblingDelegatingClassPoolTestCase.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -7,7 +7,7 @@
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.jboss.classpool.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
/*
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/SimpleDelegatingClassPoolTestCase.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/SimpleDelegatingClassPoolTestCase.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/test/SimpleDelegatingClassPoolTestCase.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -7,7 +7,7 @@
import junit.framework.Test;
import junit.framework.TestSuite;
-import org.jboss.classpool.ClassPoolDomain;
+import org.jboss.classpool.domain.ClassPoolDomain;
/*
* JBoss, Home of Professional Open Source.
Modified: projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java
===================================================================
--- projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java 2009-08-21 11:58:47 UTC (rev 92661)
+++ projects/jboss-classpool/trunk/src/test/java/org/jboss/test/classpool/ucl/test/UclClassPoolTest.java 2009-08-21 12:57:00 UTC (rev 92662)
@@ -35,8 +35,8 @@
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
-import org.jboss.classpool.ClassPoolRepository;
-import org.jboss.classpool.ucl.JBossUclDelegatingClassPoolFactory;
+import org.jboss.classpool.plugins.as4.ucl.JBossUclDelegatingClassPoolFactory;
+import org.jboss.classpool.spi.ClassPoolRepository;
import org.jboss.mx.loading.HeirarchicalLoaderRepository3;
import org.jboss.mx.loading.LoaderRepository;
import org.jboss.mx.loading.RepositoryClassLoader;
More information about the jboss-cvs-commits
mailing list