JBoss Community

Re: Jboss AOP classloading bug

created by ud1 in JBoss AOP - View the full discussion

I just sichronized calls of registerClassLoader():

I have created class:

 

 

package myapp.aop;

 

import javassist.ClassPool;

 

import org.jboss.classpool.plugins.jbosscl.JBossClClassPoolConfig;

import org.jboss.classpool.plugins.jbosscl.JBossClDelegatingClassPoolFactory;

import org.jboss.classpool.spi.ClassLoaderRegistryHandler;

import org.jboss.classpool.spi.ClassPoolRepository;

 

import org.jboss.logging.Logger;

 

public class ClassPoolFactory extends JBossClDelegatingClassPoolFactory

{

private final Logger log = Logger.getLogger(ClassPoolFactory.class);

 

private class Handler implements ClassLoaderRegistryHandler

{

private ClassLoaderRegistryHandler successor;

 

public ClassPool registerClassLoader(ClassLoader classLoader)

{

ClassPool result;

synchronized(successor)

{

result = successor.registerClassLoader(classLoader);

}

 

if (result == null)

log.debug("registerClassLoader() returned null, " + classLoader);

 

return result;

}

 

public void unregisterClassLoader(ClassLoader classLoader)

{

successor.unregisterClassLoader(classLoader);

}

 

public void setSuccessor(ClassLoaderRegistryHandler handler)

{

successor = handler;

}

}

 

public ClassPoolFactory(JBossClClassPoolConfig config)

{

super(config.getDomainRegistry(), config.getRegisterModuleCallback());

config.setClassPoolFactory(this);

ClassPoolRepository.getInstance().setClassPoolFactory(this);

}

 

public ClassLoaderRegistryHandler create(ClassLoaderRegistryHandler successor)

{

ClassLoaderRegistryHandler handler = new Handler();

handler.setSuccessor(super.create(successor));

return handler;

}

}

 

and add these lines to the aop.xml file:

 

...

   <classloader name="aop-classloader" xmlns="urn:jboss:classloader:1.0" export-all="NON_EMPTY" import-all="true">

      ...

      <root>${jboss.server.home.url}/lib/myapp-aop.jar</root>

   </classloader>

 

...

   <bean name="MyAppClassPoolFactory" class="myapp.ClassPoolFactory">

      <constructor>

         <parameter>

            <inject bean="JBossClClassPoolConfig"/>

         </parameter>

      </constructor>

   </bean>

 

...

 

 

Probably it should work.

Reply to this message by going to Community

Start a new discussion in JBoss AOP at Community