Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Unable to find class

hi, andy 

thanks for the answer, 
 
we change the approach of perthis instantiation to a mixin, this is the new code and all works fine:

thanks,

Diego



trait ActorCellMetrics {
  var metricIdentity: ActorMetrics = _
  var actorMetricsRecorder: Option[ActorMetricRecorder] = _
}

@Aspect
class ActorCellMetricsMixin {

  @DeclareMixin("akka.actor.ActorCell")
  def mixinActorCellMetricsToActorCell: ActorCellMetrics = new ActorCellMetrics {}
}



@Aspect
class BehaviourInvokeTracing {

  @Pointcut("execution(akka.actor.ActorCell.new(..)) && this(cell) && args(system, ref, props, dispatcher, parent)")
  def actorCellCreation(cell: ActorCell, system: ActorSystem, ref: ActorRef, props: Props, dispatcher: MessageDispatcher, parent: ActorRef): Unit = {}

  @After("actorCellCreation(cell, system, ref, props, dispatcher, parent)")
  def afterCreation(cell: ActorCell, system: ActorSystem, ref: ActorRef, props: Props, dispatcher: MessageDispatcher, parent: ActorRef): Unit = {
    val metricsExtension = Kamon(Metrics)(system)
    val metricIdentity = ActorMetrics(ref.path.elements.mkString("/"))
    val cellWithMetrics = cell.asInstanceOf[ActorCellMetrics]

    cellWithMetrics.metricIdentity = metricIdentity
    cellWithMetrics.actorMetricsRecorder = metricsExtension.register(metricIdentity, ActorMetrics.Factory)
  }
}



On Fri, Mar 21, 2014 at 5:06 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
It is the perthis instantiation model that causes the marker interface to get generated 'BehaviourInvokeTracing$ajcMightHaveAspect', and as a generated interface it should be getting defined directly - is there anything that could be preventing AspectJ dynamically defining classes on the fly? (Funky class loader in the mix or some such?). Are you able to try compile time weaving? (weave into the akka jar you are modifying). Something like compile the scala and then:

ajc -inpath akkajar.jar -aspectpath mycompiledscalacode.jar -outjar wovenakkajar.jar

and then use the wovenakkajar.jar?

Andy


On 20 March 2014 17:15, Diego Parra <diegolparra@xxxxxxxxx> wrote:
Hi,

I'm using AspectJ LTW and having the trouble with the following Aspect/Pointcut:

@Aspect("perthis(actorCellCreation(*, *, *, *, *))")
class BehaviourInvokeTracing {
  var metricIdentity: ActorMetrics = _
  var actorMetrics: Option[ActorMetricRecorder] = None

  @Pointcut("execution(akka.actor.ActorCell.new(..)) && args(system, ref, props, dispatcher, parent)")
  def actorCellCreation(system: ActorSystem, ref: ActorRef, props: Props, dispatcher: MessageDispatcher, parent: ActorRef): Unit = {}

  @After("actorCellCreation(system, ref, props, dispatcher, parent)")
  def afterCreation(system: ActorSystem, ref: ActorRef, props: Props, dispatcher: MessageDispatcher, parent: ActorRef): Unit = {
    val metricsExtension = Kamon(Metrics)(system)

    metricIdentity = ActorMetrics(ref.path.elements.mkString("/"))
    actorMetrics = metricsExtension.register(metricIdentity, ActorMetrics.Factory)
  }

For some reason if I change the Aspect Instantiation to singleton all works fine, otherwise throws an exception that i've included at the bottom.

Thanks,
-Diego

undefined][] [specs2.DefaultExecutionStrategy1] org.aspectj.weaver.bcel.BcelWorld - Unable to find class 'akka.instrumentation.BehaviourInvokeTracing$ajcMightHaveAspect' in repository
java.lang.ClassNotFoundException: akka.instrumentation.BehaviourInvokeTracing$ajcMightHaveAspect not found - unable to determine URL
at org.aspectj.apache.bcel.util.ClassLoaderRepository.loadClass(ClassLoaderRepository.java:292) ~[aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelWorld.lookupJavaClass(BcelWorld.java:418) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelWorld.resolveDelegate(BcelWorld.java:392) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.ltw.LTWWorld.resolveDelegate(LTWWorld.java:107) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.World.resolveToReferenceType(World.java:477) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.World.resolve(World.java:318) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.World.resolve(World.java:228) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.UnresolvedType.resolve(UnresolvedType.java:616) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelTypeMunger.mungePerObjectInterface(BcelTypeMunger.java:796) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelTypeMunger.munge(BcelTypeMunger.java:116) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:516) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:101) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1691) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1635) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1400) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1186) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:527) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:363) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:121) [aspectjweaver-1.7.4.jar:1.7.4]
at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:54) [aspectjweaver-1.7.4.jar:1.7.4]
at sun.instrument.TransformerManager.transform(TransformerManager.java:188) [na:1.7.0_45]
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:424) [na:1.7.0_45]
at java.lang.ClassLoader.defineClass1(Native Method) [na:1.7.0_45]
at java.lang.ClassLoader.defineClass(ClassLoader.java:800) [na:1.7.0_45]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) [na:1.7.0_45]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449) [na:1.7.0_45]
at java.net.URLClassLoader.access$100(URLClassLoader.java:71) [na:1.7.0_45]
at java.net.URLClassLoader$1.run(URLClassLoader.java:361) [na:1.7.0_45]
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) [na:1.7.0_45]
at java.security.AccessController.doPrivileged(Native Method) [na:1.7.0_45]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) [na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) [na:1.7.0_45]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) [na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) [na:1.7.0_45]
at java.lang.Class.getDeclaredFields0(Native Method) [na:1.7.0_45]
at java.lang.Class.privateGetDeclaredFields(Class.java:2397) [na:1.7.0_45]
at java.lang.Class.getDeclaredField(Class.java:1946) [na:1.7.0_45]


_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users



_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users



Back to the top