Kabir Khan [
http://community.jboss.org/people/kabir.khan%40jboss.com] replied to the
discussion
"JBoss Reflect Performance Javassist vs Introspection"
To view the discussion, visit:
http://community.jboss.org/message/538809#538809
--------------------------------------------------------------
Kabir Khan wrote:
I have modified the bootstrap project as shown in the attached patch to set
JavassistTypeInfoFactoryImpl's classPoolFactory to be RepositoryClassPoolFactory. A
quick check in the debugger shows this to kick in.
I am now getting some exceptions on startup that I need to look into.
I modified JavassistTypeInfoFactoryImpl to give some extra output. When a class can not be
found it ends up in this method:
private TypeInfo delegateToIntrospectionImplementation(ClassLoader cl, String name)
throws ClassNotFoundException
{
System.out.println("======> " + name + " " + cl);
//Extra code just for debugging
ClassPool pool = poolFactory.getPoolForLoader(cl);
try
{
CtClass ct = pool.get(name);
}
catch(Exception alreadyHandled)
{
System.out.println("---> Not found in " + pool);
}
Class<?> clazz = cl.loadClass(name);
System.out.println("---> Loaded real class from " +
clazz.getClassLoader());
try
{
CtClass ct = pool.get(name);
}
catch(Exception alreadyHandled)
{
System.out.println("---> Not found again in " + pool);
}
pool = poolFactory.getPoolForLoader(clazz.getClassLoader());
try
{
CtClass ct = pool.get(name);
System.out.println("---> Found in actual pool " + pool);
}
catch(Exception alreadyHandled)
{
System.out.println("---> Not found in actual pool " + pool);
}
//Extra code - END
IntrospectionTypeInfoFactory factory = new IntrospectionTypeInfoFactory();
return factory.getTypeInfo(name, cl);
}
Here is the output, this is during installing the beans from conf/bootstrap
17:16:06,954 INFO [JMXKernel] Legacy JMX core initialized
17:16:07,009 INFO [STDOUT] ======> org.jboss.aop.deployers.AspectManagerJMXRegistrar
BaseClassLoader@47ac1adf{jmx-classloader:0.0.0$MODULE}
17:16:08,927 INFO [STDOUT] ---> Not found in
[org.jboss.classpool.plugins.jbosscl.JBossClDelegatingClassPool@2002512083 [class path:
BaseClassLoader@47ac1adf{jmx-classloader:0.0.0$MODULE}:] -
dcl:BaseClassLoader@47ac1adf{jmx-classloader:0.0.0$MODULE} domain:
[org.jboss.classpool.plugins.jbosscl.JBossClClassPoolDomain@101ebf5c name:DefaultDomain]]
17:16:08,930 INFO [STDOUT] ---> Loaded real class from
BaseClassLoader@8a85268{aop-classloader:0.0.0$MODULE}
17:16:08,931 INFO [STDOUT] ---> Not found again in
[org.jboss.classpool.plugins.jbosscl.JBossClDelegatingClassPool@2002512083 [class path:
BaseClassLoader@47ac1adf{jmx-classloader:0.0.0$MODULE}:] -
dcl:BaseClassLoader@47ac1adf{jmx-classloader:0.0.0$MODULE} domain:
[org.jboss.classpool.plugins.jbosscl.JBossClClassPoolDomain@101ebf5c name:DefaultDomain]]
17:16:08,931 INFO [STDOUT] ---> Found in actual pool
org.jboss.classpool.spi.AbstractClassPool@697579067 [class path:
BaseClassLoader@8a85268{aop-classloader:0.0.0$MODULE}:] -
dcl:BaseClassLoader@8a85268{aop-classloader:0.0.0$MODULE}
17:16:09,563 INFO [STDOUT] ======>
org.jboss.aop.asintegration.jboss5.AOPAnnotationMetaDataParserDeployer
BaseClassLoader@280bca{deployers-classloader:0.0.0$MODULE}
17:16:10,283 INFO [STDOUT] ---> Not found in
[org.jboss.classpool.plugins.jbosscl.JBossClDelegatingClassPool@404225673 [class path:
BaseClassLoader@280bca{deployers-classloader:0.0.0$MODULE}:] -
dcl:BaseClassLoader@280bca{deployers-classloader:0.0.0$MODULE} domain:
[org.jboss.classpool.plugins.jbosscl.JBossClClassPoolDomain@101ebf5c name:DefaultDomain]]
17:16:10,287 INFO [STDOUT] ---> Loaded real class from
BaseClassLoader@8a85268{aop-classloader:0.0.0$MODULE}
17:16:10,289 INFO [STDOUT] ---> Not found again in
[org.jboss.classpool.plugins.jbosscl.JBossClDelegatingClassPool@404225673 [class path:
BaseClassLoader@280bca{deployers-classloader:0.0.0$MODULE}:] -
dcl:BaseClassLoader@280bca{deployers-classloader:0.0.0$MODULE} domain:
[org.jboss.classpool.plugins.jbosscl.JBossClClassPoolDomain@101ebf5c name:DefaultDomain]]
17:16:10,289 INFO [STDOUT] ---> Found in actual pool
org.jboss.classpool.spi.AbstractClassPool@697579067 [class path:
BaseClassLoader@8a85268{aop-classloader:0.0.0$MODULE}:] -
dcl:BaseClassLoader@8a85268{aop-classloader:0.0.0$MODULE}
As you can see AspectManagerJMXRegistrar is loaded from the classloader used to install
jmx.xml, and AOPAnnotationMetaDataParserDeployer from deployers.xml's classloader. If
I use the pools for those loaders directly I get a NotFoundException. If I try to load the
class from the loader directly it works, and in both cases the classes returned are loaded
from the classloader used for aop.xml (AspectManagerJMXRegistrar comes from
jboss-aop-asintegration-core.jar, and AOPAnnotationMetaDataParserDeployer comes from
jboss-aop-deployers.jar).
Next I get an error that brings everything to a halt (with some extra debug information
compared to the error message that is in svn):
17:16:13,036 ERROR [AbstractKernelController] Error installing to PreInstall:
name=AOPClassLoaderDeployer state=Real: java.lang.NoClassDefFoundError: Unable to find
class org.jboss.aop.asintegration.jboss5.AOPClassLoaderDeployer from
org.jboss.osgi.integration.jbossas.AOPClassLoaderDeployerJBAS7909 in pool
[org.jboss.classpool.plugins.jbosscl.JBossClDelegatingClassPool@404225673 [class path:
BaseClassLoader@280bca{deployers-classloader:0.0.0$MODULE}:] -
dcl:BaseClassLoader@280bca{deployers-classloader:0.0.0$MODULE} domain:
[org.jboss.classpool.plugins.jbosscl.JBossClClassPoolDomain@101ebf5c name:DefaultDomain]]
at
org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactoryImpl.raiseClassNotFound(JavassistTypeInfoFactoryImpl.java:104)
[jboss-reflect.jar:2.2.0-SNAPSHOT]
at
org.jboss.reflect.plugins.javassist.JavassistTypeInfo.getSuperclass(JavassistTypeInfo.java:235)
[jboss-reflect.jar:2.2.0-SNAPSHOT]
at
org.jboss.beans.info.plugins.AbstractBeanInfoFactory.getMethods(AbstractBeanInfoFactory.java:262)
[jboss-reflect.jar:2.2.0-SNAPSHOT]
at
org.jboss.beans.info.plugins.AbstractBeanInfoFactory.getBeanInfo(AbstractBeanInfoFactory.java:152)
[jboss-reflect.jar:2.2.0-SNAPSHOT]
at
org.jboss.config.plugins.AbstractConfiguration.getBeanInfo(AbstractConfiguration.java:87)
[jboss-reflect.jar:2.2.0-SNAPSHOT]
at
org.jboss.kernel.plugins.config.AbstractKernelConfig.getBeanInfo(AbstractKernelConfig.java:80)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.config.AbstractKernelConfigurator.getBeanInfo(AbstractKernelConfigurator.java:78)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.config.AbstractKernelConfigurator.getBeanInfo(AbstractKernelConfigurator.java:97)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.dependency.PreInstallAction.installActionInternal(PreInstallAction.java:88)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:54)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.dependency.InstallsAwareAction.installAction(InstallsAwareAction.java:42)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.action.SimpleControllerContextAction.simpleInstallAction(SimpleControllerContextAction.java:62)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.action.AccessControllerContextAction.install(AccessControllerContextAction.java:71)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractControllerContextActions.install(AbstractControllerContextActions.java:51)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:377)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2042)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1081)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1320)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1244)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1137)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:892)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:639)
[jboss-dependency.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.deployBean(AbstractKernelDeployer.java:319)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.deployBeans(AbstractKernelDeployer.java:297)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.deployment.AbstractKernelDeployer.deploy(AbstractKernelDeployer.java:130)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.kernel.plugins.deployment.BasicKernelDeployer.deploy(BasicKernelDeployer.java:76)
[jboss-kernel.jar:2.2.0.Alpha9]
at
org.jboss.bootstrap.impl.mc.deployer.TempBasicXMLDeployer.deploy(TempBasicXMLDeployer.java:92)
[jboss-bootstrap-impl-mc.jar:2.1.0-SNAPSHOT]
at
org.jboss.bootstrap.impl.mc.deployer.TempBasicXMLDeployer.deploy(TempBasicXMLDeployer.java:193)
[jboss-bootstrap-impl-mc.jar:2.1.0-SNAPSHOT]
at
org.jboss.bootstrap.impl.mc.server.AbstractMCServerBase.bootstrapMcAndDescriptors(AbstractMCServerBase.java:318)
[jboss-bootstrap-impl-mc.jar:2.1.0-SNAPSHOT]
at
org.jboss.bootstrap.impl.mc.server.AbstractMCServerBase.doStart(AbstractMCServerBase.java:265)
[jboss-bootstrap-impl-mc.jar:2.1.0-SNAPSHOT]
at
org.jboss.bootstrap.impl.as.server.AbstractJBossASServerBase.doStart(AbstractJBossASServerBase.java:381)
[jboss-bootstrap-impl-as.jar:2.1.0-SNAPSHOT]
at
org.jboss.bootstrap.impl.base.server.AbstractServer$StartServerTask.run(AbstractServer.java:413)
[jboss-bootstrap-impl-base.jar:2.1.0-SNAPSHOT]
at java.lang.Thread.run(Thread.java:637) [:1.6.0_17]
This is caused by a call to CtClass.getSuperClass() for
org.jboss.osgi.integration.jbossas.AOPClassLoaderDeployerJBAS7909 which has the
deployers.xml classpool, but the superclass lives in the aop.xml classpool.
So something is going wrong during bootstrap, and it looks like the classpools can't
see classes from the other pools within the domain, while the classloaders can see classes
from the other loaders in the domain. What is weird is that from bootstrap.xml it looks
like the RegisterModuleCallback (from aop.xml) should be deployed before jmx.xml and
deployers.xml, but could there be anything else missing at this stage?
<bootstrap xmlns="urn:jboss:bootstrap:1.0">
<url>bootstrap/vfs.xml</url>
<url>bootstrap/classloader.xml</url>
<url>bootstrap/stdio.xml</url>
<url>bootstrap/kernel.xml</url>
<url>bootstrap/aop.xml</url>
<url>bootstrap/jmx.xml</url>
<url>bootstrap/deployers.xml</url>
<url>bootstrap/profile.xml</url>
</bootstrap>
--------------------------------------------------------------
Reply to this message by going to Community
[
http://community.jboss.org/message/538809#538809]
Start a new discussion in JBoss Microcontainer Development at Community
[
http://community.jboss.org/choose-container!input.jspa?contentType=1&...]