javaagent引发的ClassDefNotFoundException

想用Instrumentation监控cache的实际消耗内存,结果手贱,图方便把Instrumentation类和cache的spring配置文件打到了一个包里,通过在jboss启动脚本里增加 -javaagent:xxx.jar生效

Instrumentation本身没问题,结果是spring里的一些aop类找不到,报“org/aspectj/lang/ProceedingJoinPoint.class”这个类找不到,肯定是spring动态加载找不到这个文件,但奇怪的是lib里明明有这个类。。。

郁闷了半天,重要想到可能和javaagent配置有关,于是豁然开朗了

由于加载xxx.jar的classloader比jboss的classloader更底层,spring先加载了xxx.jar里的xml配置,而不是jboss里配的WIN-INF/lib里的jar,同时这个xml里用到的class也都会从根classloader加载,当然找不到了

解决方法很简单,把Instrumentation单独打个包,别搅合在一起就行了

猜你喜欢

转载自nightlee.iteye.com/blog/1774376