Yes. And for non-static members you ought not to forget the use of volatile for 
the member... ;)

[ Romain Muller | Software Development Engineer | +33 (0)6 48 25 66 70 | 
romain.mul...@esial.net ]

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

> 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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

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

Reply via email to