[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] How to access "withincode" type

Thanks Ramnivas.  It works now.  I can see my advice being called. However, I seems like it introduced a new problem.

 

In my around advice, "thisJointPoint" gives me an instance of my aspect which doesn't have all the JointPoint interface methods.

 

@Pointcut("call(* java.sql.Statement+.execute* (..)) && @withincode(profiling)")

void profilingSQLExecute(com.xyz.Profiling profiling) {}

 

@Around("profilingSQLExecute(profiling)")

public Object profilingSQLExecute(final ProceedingJoinPoint thisJoinPoint, final com.xyz.Profiling profiling)  throws Throwable

 

Sorry if I'm missing something obvious as I recently started working on AspectJ.

 

DP

 


From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Ramnivas Laddad
Sent: Thursday, January 24, 2008 5:03 PM
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] How to access "withincode" type

 

Dipak,

Since the @Profiling annotation is on the caller method (i.e. not on the call join point itself), you will need the following pointcut:
@Pointcut("call(* java.sql.Statement+.execute*(..)) && withincode(@com.xyz.Profiling * *(..)) && @withincode(profiling)")
void profilingSQLExecute(com.xyz.Profiling profiling) {}

Even the following pointcut should work:
@Pointcut("call(* java.sql.Statement+.execute* (..)) && @withincode(profiling)")
void profilingSQLExecute(com.xyz.Profiling profiling) {}


-Ramnivas

On Jan 24, 2008 4:02 PM, Parmar, Dipak (IS Consultant) <DParmar@xxxxxxxxxxxxxxxxxxx> wrote:

Thanks Dean.

 

With your suggested pointcut definition, I get a compilation error -- name pattern expected.

 

I don't want the object of the class, what I want is an instance of the Profiling annotation.  I have tried the below but didn't execute my Advice.          

 

@Pointcut("call(* java.sql.Statement+.execute*(..)) && withincode(@com.xyz.Profiling * *(..)) && @annotation(profiling)")void profilingSQLExecute(com.xyz.Profiling profiling) {}

Dipak

 


From: aspectj-users-bounces@xxxxxxxxxxx [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Dean Wampler
Sent: Thursday, January 24, 2008 3:11 PM
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] How to access "withincode" type

 

I presume you want the object of the class that implements "makeProfileDataBaseCall".  I'll call the interface that declares it "ProfileMaker", since I don't know what it's really called. Try this pointcut:

 

@Pointcut("call(* java.sql.Statement+.execute*(..)) && withincode(@com.xyz.Profiling * ..ProfileMaker+.*(..)) && target(profileMaker) && @annotation(profiling)")

void profilingSQLExecute(ProfileMaker profileMaker, com.xyz.Profiling profiling) {}

(I forgot what you called the pointcut method before, so I just made up a name). Note that you use "target()" and "@annotation" to bind the object and annotation, respectively, to variables declared in the method. These variables will then be available in the advice, so you can get the value of the annotation, etc.  The advice method would require the same argument signature.

 

Notice also that I used "..ProfileMaker+" to refer to any subclass (i.e., implementer) of the interface and I used ".." before the name, which is the package wildcard with arbitrarily-deep nesting.

 

HTH,

dean

 

 

On Jan 24, 2008, at 12:48 PM, Parmar, Dipak (IS Consultant) wrote:

 

Here is my pointcut definition

@Pointcut("call(* java.sql.Statement+.execute*(..)) && withincode(@com.xyz.Profiling * *(..)) ")

Here is my sample mathod

        @Profiling(type=ProfilingType.JDBC)

            public void makeProfileDataBaseCall() {

                        .............

                CallableStatement statement = connection.prepareCall("{ call PACKAGE.PROCEDURE(?) }");

                statement.execute();

                        ........................

            }

How I can get an instance of "makeProfileDataBaseCall" method and its annotation?  "joinPoint.getSignature()" gives the "execute" method but not "makeProfileDataBaseCall" method.

If this can't be possible, then is there a way to re-write the above pointcut that limit only JDBC type of profiling.

Thanks,

DP

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

 

Dean Wampler, Ph.D.

See also:

http://www.aspectprogramming.com  AOP advocacy site

http://aquarium.rubyforge.org     AOP for Ruby

http://www.contract4j.org         Design by Contract for Java5

 

 

 


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