[jboss-user] [Javassist] - How to manage instrumentation in application deployed on JBoss?

adesanctis do-not-reply at jboss.com
Thu Feb 9 04:09:37 EST 2012


adesanctis [https://community.jboss.org/people/adesanctis] created the discussion

"How to manage instrumentation in application deployed on JBoss?"

To view the discussion, visit: https://community.jboss.org/message/715422#715422

--------------------------------------------------------------
Hello everybody,

I'm trying to instrument classes in JBoss Enterprise application on JBoss EA5.0

Using this code:

|  | public byte[] transform(ClassLoader loader, |
|          | String className, |
|          | Class classBeingRedefined, |
|          | ProtectionDomain protectionDomain, |
|          | byte[] classfileBuffer) throws IllegalClassFormatException { |
|      | // The class name contains slashes instead of periods, so use transform those to |
|      | // dots for readability within the trace |
|      | String dotClassName = className.replace('/', '.'); |


|      | if (className.startsWith("$")) { |
|          | return null; |
|      | } |

|      | // Only instrument a class once |
|      | if (instrumentedClasses.contains(className)) { |
|          | return null; |
|      | } |
|      | instrumentedClasses.add(className); |

|      | // Skip in the list of class prefixes to skip |
|      | for (MethodSelector classToSkip : classesToSkip) { |
|          | if (dotClassName.startsWith(classToSkip.getPackageName())) { |
|              | return null; |
|          | } |
|      | } |

|      | if (logger.isInfoEnabled()) { |
|          | logger.info("Checking class: " + className); |
|      | } |
|      |  |
|      | try { |
|          | classPool.insertClassPath(new ByteArrayClassPath(className, classfileBuffer)); |
| //         | classPool.insertClassPath(new ClassClassPath(this.getClass())); |
|          |  |
| //         | classPool.insertClassPath(new ClassClassPath(classBeingRedefined.getClass())); |
|          | *CtClass cc = classPool.get(dotClassName);* |
| //         | CtClass cc = classPool.makeClass(new ByteArrayInputStream(classfileBuffer));         |  |
//

In bold line where exception is raised.
I suppose that arror is related to specific class loader used for load class.
The question is: how to manage classes independently from class loader used? Is there a way to manage all possible case when working on JBoss?

Thank you

Alessandro

09:37:59,040 ERROR [STDERR] javassist.NotFoundException: com.arjuna.ats.internal.jta.recovery.arjunacore.RecoveryXids
09:37:59,040 ERROR [STDERR]     at javassist.ClassPool.get(ClassPool.java:436)
09:37:59,040 ERROR [STDERR]     at by.concept.applicationtracer.AdvancedTransformer.transform(AdvancedTransformer.java:163)
09:37:59,040 ERROR [STDERR]     at sun.instrument.TransformerManager.transform(TransformerManager.java:169)
09:37:59,040 ERROR [STDERR]     at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:365)
09:37:59,040 ERROR [STDERR]     at java.lang.ClassLoader.defineClass1(Native Method)
09:37:59,040 ERROR [STDERR]     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
09:37:59,040 ERROR [STDERR]     at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:67)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:633)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:592)
09:37:59,040 ERROR [STDERR]     at java.security.AccessController.doPrivileged(Native Method)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:591)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:568)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:135)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.filter.FilteredDelegateLoader.loadClass(FilteredDelegateLoader.java:131)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:455)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:267)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:166)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:276)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1138)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:862)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader.doLoadClass(BaseClassLoader.java:502)
09:37:59,040 ERROR [STDERR]     at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:447)
--------------------------------------------------------------

Reply to this message by going to Community
[https://community.jboss.org/message/715422#715422]

Start a new discussion in Javassist at Community
[https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2062]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20120209/000c72b5/attachment-0001.html 


More information about the jboss-user mailing list