[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
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
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.
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
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-users