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

2012-11-06 Thread Romain Muller
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



smime.p7s
Description: S/MIME cryptographic signature
___
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 Alexander Kriegisch
As an alternative if you do not lile the Map idea, you might want to use a 
non-singleton instantiation model like perthis or pertarget in combination 
with a normal (non-static) member variable for the Timer.

Alexander Kriegisch
http://scrum-master.de


Am 06.11.2012 um 11:31 schrieb Romain Muller romain.mul...@esial.net:

 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


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


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

2012-11-06 Thread Romain Muller
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 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.net 
 wrote:
 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



smime.p7s
Description: S/MIME cryptographic signature
___
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 Brett Randall
Hi,

It may or may not be useful to you, but the Perf4j project[1] uses
AspectJ to instrument code with stopwatches, providing generic
around-method timing via an @Profiled annotation.  There's also an
unreleased enhancement in github which allows methods to be timed
without annotating them (by completing an abstract pointcut), so no
source-changes requires.

Best
Brett

[1] http://perf4j.codehaus.org/

On 6 November 2012 21:29, Reik Schatz reik.sch...@gmail.com wrote:
 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