Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[aspectj-users] Core dumps with aspectjweaver 1.8.13 LTW

I'm using aspectj 1.8.13 LTW'ing with Wildfly 10.  Generally speaking, everything is working as expected.  However, I have recently added in a new Pointcut which is causing  core dumps by the weaver:

2018-11-15 14:56:30,033 SEVERE [org.aspectj.weaver.loadtime.Aj]   izone/adams/model/messaging/SMSMessageAbstract: java.lang.IllegalStateException: Unexpected problem whilst preparing bytecode for model.messaging.SMSMessa
geAbstract.pcNewInstance(Lorg/apache/openjpa/enhance/StateManager;Ljava/lang/Object;Z)Lorg/apache/openjpa/enhance/PersistenceCapable;
        at org.aspectj.apache.bcel.generic.MethodGen.getMethod(MethodGen.java:699)
        at org.aspectj.weaver.bcel.LazyMethodGen.getMethod(LazyMethodGen.java:498)
        at org.aspectj.weaver.bcel.LazyClassGen.writeBack(LazyClassGen.java:515)
        at org.aspectj.weaver.bcel.LazyClassGen.getJavaClassBytesIncludingReweavable(LazyClassGen.java:697)
        at org.aspectj.weaver.bcel.BcelWeaver.getClassFilesFor(BcelWeaver.java:1443)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1405)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1183)
        at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:527)
        at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:363)
        at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:121)
        at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54)
...
...
        at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.jrGetDeclaredMethods(DeploymentReflectionIndex.java:46001)
        at org.jboss.as.server.deployment.reflect.ClassReflectionIndex.<init>(ClassReflectionIndex.java:80)
        at org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex.getClassIndex(DeploymentReflectionIndex.java:66)
        at org.jboss.as.ee.metadata.MethodAnnotationAggregator.runtimeAnnotationInformation(MethodAnnotationAggregator.java:57)
        at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.handleAnnotations(InterceptorAnnotationProcessor.java:106)
        at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:91)
        at org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:76)
        at org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:165)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:2032)
        at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1955)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
        at org.aspectj.apache.bcel.generic.InstructionList.setPositions(InstructionList.java:892)
        at org.aspectj.apache.bcel.generic.InstructionList.setPositions(InstructionList.java:863)
        at org.aspectj.apache.bcel.generic.InstructionList.getByteCode(InstructionList.java:981)
        at org.aspectj.apache.bcel.generic.MethodGen.getMethod(MethodGen.java:697)


I've traced it down to my new cflow pointcut which targets a method in classes implementating a specific interface, but the weaver throws the exception if it tries to weave an abstract class implementing this interface.

My pointcut:

/**
* Execution of any pcClearFields() methods within a newInstance as injected by Kodo Enhancer
*/
@Pointcut("cflow(execution(* org.apache.openjpa.enhance.PersistenceCapable+.pcNewInstance(..))) && execution(* org.apache.openjpa.enhance.PersistenceCapable+.pcClearFields(..))")
public void kodoNewObject(){}


The weaver fails whenever it encounters an abstract class implementing PersistenceCabaple without the pcNewInstance() method.

I'm not sure how to handle this.  There is no functional failure with the LTW failing as a non-abstract class gets properly woven.  However, my logs get polluted everytime the weaver tries to weave a such class and generates a new ajcore.<timestamp>.txt file everytime which will quickly fill my directory.

AspectJ LTW is being used with LTW enabled (<weaver options="-Xlint:ignore -Xset:overWeaving=true" >).  

Given that I'm running the latest of the 1.8 branch, is there a way I can simply tell me pointcut to not target abstract classes?  Is this even feasible?

Thanks,

Eric


Back to the top