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 <[email protected]>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 <[email protected]> wrote:
>
>> Hi,
>>
>> I'm using AspectJ LTW and having the trouble with the following Aspect/P
>> ointcut:
>>
>> @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
>> [email protected]
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>
> _______________________________________________
> aspectj-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users