[aspectj-users] context information in aspect fields

2012-11-06 Thread Reik Schatz
Hi,

I am working on a timer example using AspectJ similar to this logging
example:
http://adamgent.com/post/5479576926/the-python-decorator-pattern-for-java-using-aspectj

However the Timer (not Logger) I am using takes among others a String
argument which describes the context of the place where you are timing
(i.e. if you are timing a save method in a DAO class, the argument would be
save). Now that the Timer is defined in the Aspect, is it possible to
retrieve some context information outside of the pointcut or advice
definition? Ideally I want to do something like:

public aspect TimedAspect {

private final Timer TIMER = Metrics.newTimer(getClass(), TARGET METHOD
NAME HERE);

pointcut timedExecution() : execution(@Timed * * (..)); // execution of
a annotated method

Object around() : timedExecution() {
final TimerContext context = TIMER.time();
try {
return proceed();
} finally {
context.stop();
}
}
}

For me it looks like the only way is to create the Timer object inside the
advice and use the context information available.
___
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users


Re: [aspectj-users] context information in aspect fields

2012-11-06 Thread Reik Schatz
Thanks, both approaches are good i think. However if you want to code this
really clean, I guess even with a ConcurrentHashMap in the Map approach
you'd still have to do some locking for the situation where 2 threads are
calling the annotated method and MapString, Timer is still empty. Same
goes for the perthis approach if the non-static member is created inside
the advice, correct?


On Tue, Nov 6, 2012 at 11:31 AM, Romain Muller romain.mul...@esial.netwrote:

 You can't do this with a final TIMER field. You may want to have a
 private final MapString, Timer timers in which you'd associate Timers
 to MethodNames.

 The MethodName you can get from thisJoinPoint(StaticPart) - you may even
 be able to use thisJoinPointStaticPart.toString() for that purpose.
 *
 [* *Romain Muller* *| *Software Development Engineer *|* +33 *(0)6* 48 *25
 * 66 *70* *|* romain.mul...@esial.net *]*

 Le 6 nov. 2012 à 11:29, Reik Schatz reik.sch...@gmail.com a écrit :

 Hi,

 I am working on a timer example using AspectJ similar to this logging
 example:
 http://adamgent.com/post/5479576926/the-python-decorator-pattern-for-java-using-aspectj

 However the Timer (not Logger) I am using takes among others a String
 argument which describes the context of the place where you are timing
 (i.e. if you are timing a save method in a DAO class, the argument would be
 save). Now that the Timer is defined in the Aspect, is it possible to
 retrieve some context information outside of the pointcut or advice
 definition? Ideally I want to do something like:

 public aspect TimedAspect {

 private final Timer TIMER = Metrics.newTimer(getClass(), TARGET
 METHOD NAME HERE);

 pointcut timedExecution() : execution(@Timed * * (..)); // execution
 of a annotated method

 Object around() : timedExecution() {
 final TimerContext context = TIMER.time();
 try {
 return proceed();
 } finally {
 context.stop();
 }
 }
 }

 For me it looks like the only way is to create the Timer object inside the
 advice and use the context information available.
 ___
 aspectj-users mailing list
 aspectj-users@eclipse.org
 https://dev.eclipse.org/mailman/listinfo/aspectj-users



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


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