Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-dev] A little help with perthis/pertarget ...

1) The methods are not static.

2) I am using a named point cut called "services()". Not sure if that matters at all or not. I was actually expecting / wondering why I not have tired something like:

aspect ProfileAspect perthis(execution(services())) {

instead of

aspect ProfileAspect perthis(execution(* *Service.* (..))) {

3) The methods I am point cutting are EJB methods. So there are multiple threads of execution hitting them sanctimoniously. That's why I can't use the singleton aspect. The start time gets stomped on ... I am just detailing the actual scenario in case you thing there would be something special about it which precluded the advice from kicking in there since it obviously works as expected in your test.

On Thu, Jul 10, 2008 at 1:14 PM, Eric Bodden <eric.bodden@xxxxxxxxxxxxxx> wrote:
So do your *Service classes actually have non-static methods?

I just tried the following example, and that works for me. It prints
"execution(void A.foo())".


public aspect Test perthis(execution(* *(..))){

       before(): execution(* *(..)) {
               System.err.println(thisJoinPointStaticPart);
       }

       public static void main(String[] args) {
               A a = new A();
               a.foo();
               A.bar();
       }


}

class A{

       void foo(){};
       static void bar(){};

}

Eric




2008/7/10 Dan Bush <dan.bush@xxxxxxxxx>:
> Ok tried it again:
>
> package com.xxx.aspect;
>
> import org.slf4j.*;
> import javax.ejb.*;
> import com.xxx.ejb.stateless.*;
> import java.util.*;
>
> /**
> * Profiles
> */
> aspect ProfileAspect perthis(execution(* *Service.* (..))) {
>
>     private long start;
>
>         private static final Logger LOG = LoggerFactory
>         .getLogger("com.ing.uds.aspect.ProfileAspect");
>
>                 pointcut services(): (execution(* *Service.* (..)));
>
>     before(): services() {
>      start =System.currentTimeMillis();
>     }
>
>     after(): services() {
>         LOG.debug("{}|{}", thisJoinPoint,
> Long.toString(System.currentTimeMillis()-start));
>         }
>
> }
>
> The advise is no longer executing.
>
> On Thu, Jul 10, 2008 at 11:20 AM, Eric Bodden <eric.bodden@xxxxxxxxxxxxxx>
> wrote:
>>
>> aspect ProfileAspect perthis(execution(* *Service.* (..))) {...
>>
>> does not work for you?
>>
>> Eric
>>
>> 2008/7/10 Dan Bush <dan.bush@xxxxxxxxx>:
>> > Can anyone help me refactor this aspect so that it's not a singleton? I
>> > have
>> > attempted to use both perthis and pertarget but when I do, the advice no
>> > longer kicks in. The aspect is actually picking out all the methods on
>> > my
>> > EJB tier so there are multiple threads in flight here. I want an
>> > instance of
>> > the aspect per each thread. I was and want to simply have a "private
>> > long
>> > start;" instead of a "private Hashtable ht = new Hashtable();" but, I
>> > had to
>> > introduce the Hashtable so my singleton aspect would work properly. Here
>> > is
>> > my aspect as it currently exists. Again it works as expected but, I want
>> > to
>> > utilize perthis or pertarget as opposed to incurring the overhead with
>> > the
>> > Hashmap approach.
>> >
>> >
>> > package com.xxx.aspect;
>> >
>> > import org.slf4j.*;
>> > import javax.ejb.*;
>> > import com.xxx.ejb.stateless.*;
>> > import java.util.*;
>> >
>> > /**
>> > * Profiles
>> > */
>> > aspect ProfileAspect {
>> >
>> >     private Hashtable ht = new Hashtable();
>> >
>> >     private static final Logger LOG = LoggerFactory
>> >     .getLogger("com.ing.uds.
>> > aspect.ProfileAspect");
>> >
>> >         pointcut services(): (execution(* *Service.* (..)));
>> >
>> >     before(): services() {
>> >         ht.put(thisJoinPoint.getThis(), new
>> > Long(System.currentTimeMillis()));
>> >     }
>> >
>> >     after(): services() {
>> >         LOG.debug("{}|{}", thisJoinPoint,
>> >
>> > Long.toString(System.currentTimeMillis()-((Long)ht.get(thisJoinPoint.getThis())).longValue()));
>> >       }
>> >
>> > }
>> > _______________________________________________
>> > aspectj-dev mailing list
>> > aspectj-dev@xxxxxxxxxxx
>> > https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>> >
>> >
>>
>>
>>
>> --
>> Eric Bodden
>> Sable Research Group
>> McGill University, Montréal, Canada
>> _______________________________________________
>> aspectj-dev mailing list
>> aspectj-dev@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>
>
> _______________________________________________
> aspectj-dev mailing list
> aspectj-dev@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-dev
>
>



--
Eric Bodden
Sable Research Group
McGill University, Montréal, Canada
_______________________________________________
aspectj-dev mailing list
aspectj-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-dev


Back to the top