[jboss-cvs] JBossAS SVN: r85651 - in projects/aop/trunk/asintegration-mc/src: main/java/org/jboss/aop/classpool/jbosscl and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Mar 9 13:43:09 EDT 2009
Author: kabir.khan at jboss.com
Date: 2009-03-09 13:43:09 -0400 (Mon, 09 Mar 2009)
New Revision: 85651
Added:
projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/RegisterModuleCallback.java
Modified:
projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java
projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java
projects/aop/trunk/asintegration-mc/src/resources/META-INF/aop.xml
projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
Log:
[JBAOP-666] Register bootstrap classloaders in AS
Added: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/RegisterModuleCallback.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/RegisterModuleCallback.java (rev 0)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/asintegration/jboss5/RegisterModuleCallback.java 2009-03-09 17:43:09 UTC (rev 85651)
@@ -0,0 +1,68 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.aop.asintegration.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.aop.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);
+ }
+}
Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java 2009-03-09 15:55:05 UTC (rev 85650)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPool.java 2009-03-09 17:43:09 UTC (rev 85651)
@@ -51,7 +51,7 @@
super(domain, cl, parent, repository);
if (module == null)
{
- throw new IllegalStateException("Null Module");
+ throw new IllegalStateException("Null Module for loader " + cl);
}
if (domain instanceof JBossClClassPoolDomain == false)
{
Modified: projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java 2009-03-09 15:55:05 UTC (rev 85650)
+++ projects/aop/trunk/asintegration-mc/src/main/java/org/jboss/aop/classpool/jbosscl/JBossClDelegatingClassPoolFactory.java 2009-03-09 17:43:09 UTC (rev 85651)
@@ -21,6 +21,10 @@
*/
package org.jboss.aop.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;
@@ -28,6 +32,7 @@
import org.jboss.aop.AspectManager;
import org.jboss.aop.asintegration.jboss5.DomainRegistry;
+import org.jboss.aop.asintegration.jboss5.RegisterModuleCallback;
import org.jboss.aop.classpool.AbstractJBossDelegatingClassPoolFactory;
import org.jboss.aop.classpool.ClassPoolDomain;
import org.jboss.aop.classpool.ClassPoolDomainRegistry;
@@ -36,6 +41,7 @@
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;
/**
@@ -45,11 +51,14 @@
*/
public class JBossClDelegatingClassPoolFactory extends AbstractJBossDelegatingClassPoolFactory implements ScopedClassPoolFactory
{
- private DomainRegistry registry;
+ private final DomainRegistry registry;
- public JBossClDelegatingClassPoolFactory(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)
@@ -59,6 +68,12 @@
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);
}
@@ -122,4 +137,41 @@
}
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);
+ AspectManager.instance().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/aop/trunk/asintegration-mc/src/resources/META-INF/aop.xml
===================================================================
--- projects/aop/trunk/asintegration-mc/src/resources/META-INF/aop.xml 2009-03-09 15:55:05 UTC (rev 85650)
+++ projects/aop/trunk/asintegration-mc/src/resources/META-INF/aop.xml 2009-03-09 17:43:09 UTC (rev 85651)
@@ -18,7 +18,10 @@
<bean name="AOPClassLoaderScopingPolicy" class="org.jboss.aop.asintegration.jboss5.VFSClassLoaderScopingPolicy"/>
<bean name="AOPClassPoolFactory" class="org.jboss.aop.classpool.jbosscl.JBossClDelegatingClassPoolFactory">
- <constructor><parameter><inject bean="AOPClassLoaderScopingPolicy" property="registry"/></parameter></constructor>
+ <constructor>
+ <parameter><inject bean="AOPClassLoaderScopingPolicy" property="registry"/></parameter>
+ <parameter><inject bean="AOPRegisterModuleCallback"/></parameter>
+ </constructor>
</bean>
<bean name="AOPJBossIntegration" class="org.jboss.aop.asintegration.jboss5.JBoss5Integration">
@@ -31,12 +34,17 @@
<property name="managerProperty">aspectManager</property>
</bean>
- <bean name="AOPBootstrap" class="org.jboss.aop.asintegration.jboss5.AOPBootstrap">
+ <!-- bean name="AOPBootstrap" class="org.jboss.aop.asintegration.jboss5.AOPBootstrap" -->
<!-- This one lives in AS 5 source tree -->
- <property name="policy"><inject bean="AOPClassLoaderScopingPolicy"/></property>
+ <!-- property name="policy"><inject bean="AOPClassLoaderScopingPolicy"/></property>
<property name="manager"><inject bean="AspectManager" property="aspectManager"/></property>
+ </bean-->
+
+ <bean name="AOPRegisterModuleCallback" class="org.jboss.aop.asintegration.jboss5.RegisterModuleCallback">
+ <!-- classloader><null/></classloader -->
+ <incallback method="addModule" state="Installed"/>
+ <uncallback method="removeModule" state="Installed"/>
</bean>
-
<!--
Valid values for the AspectManager bean for use with enableTransformer=true are:
* org.jboss.aop.deployers.AspectManagerJDK5 - works with the -javaagent:pluggable-instrumentor.jar switch
Modified: projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java
===================================================================
--- projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java 2009-03-09 15:55:05 UTC (rev 85650)
+++ projects/aop/trunk/asintegration-mc/src/test/java/org/jboss/test/aop/classpool/jbosscl/test/JBossClClassPoolTest.java 2009-03-09 17:43:09 UTC (rev 85651)
@@ -36,6 +36,7 @@
import junit.framework.Test;
import org.jboss.aop.AspectManager;
+import org.jboss.aop.asintegration.jboss5.RegisterModuleCallback;
import org.jboss.aop.asintegration.jboss5.VFSClassLoaderDomainRegistry;
import org.jboss.aop.classpool.jbosscl.JBossClDelegatingClassPoolFactory;
import org.jboss.beans.metadata.spi.BeanMetaDataFactory;
@@ -122,7 +123,7 @@
{
domainRegistry = new VFSClassLoaderDomainRegistry();
- AspectManager.setClassPoolFactory(new JBossClDelegatingClassPoolFactory(domainRegistry));
+ AspectManager.setClassPoolFactory(new JBossClDelegatingClassPoolFactory(domainRegistry, new RegisterModuleCallback()));
VFS.init();
}
More information about the jboss-cvs-commits
mailing list