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 Map<String, 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.net>wrote:

> You can't do this with a "final" TIMER field. You may want to have a
> "private final Map<String, 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

Reply via email to