Skip to main content

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

Sorry for being too busy to really investigate this report, but as a side
note to Andy I want to mention that currently there is not way to express
something like

  !within(* && is(AbstractType))

Since 1.6.9 [1] we have
   -- ClassType,
   -- AspectType,
   -- InterfaceType,
   -- InnerType,
   -- AnonymousType,
   -- EnumType.

Since 1.8.4 [2] we have
  -- FinalType.

According to [3] this still seems to be the current status. Maybe Andy wants to think about adding support for 'AbstractType', independently of how Eric's issue here is to be resolved.

[1] https://www.eclipse.org/aspectj/doc/released/README-169.html
[2] https://www.eclipse.org/aspectj/doc/released/README-184.html
[3] http://git.eclipse.org/c/aspectj/org.aspectj.git/tree/org.aspectj.matcher/src/org/aspectj/weaver/patterns/TypeCategoryTypePattern.java#n35  

--
Alexander Kriegisch
https://scrum-master.de


Eric B schrieb am 15.11.2018 21:11:
> 
> 
> 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