[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [aspectj-dev] Getting a local variable from the caller to the advice
|
Hi Dean,
Indeed. The wormhole pattern solve the problem. Following is the code which does the trick. Need to run more testcases though ...
public aspect ServiceUtilAspect {
pointcut CommandExecute(Map CacheManager):
execution(public void execute(Map)) &&
args(CacheManager);
pointcut callServiceUtil():
withincode(public void execute(Map ))&&
call (public static String
ServiceUtil.getService(String));
pointcut wormhole(Map CacheManager):
cflow(CommandExecute(CacheManager))
&& callServiceUtil();
before(Map CacheManager) :wormhole(CacheManager)
{
System.out.println("I am before CallService Aspect");
Class Command = thisJoinPoint.getSourceLocation().getWithinType();
IPreProcessor preprocessor = (IPreProcessor)PrePostProcessorResolver.getPreProcessor(Command);
//Map cachmanager = new HashMap();
preprocessor.preprocess(CacheManager);
//System.out.println("I got Cachemanager -->"+CacheManager.toString());
}
}
Thanks a lot.
Ingudam Manoranjan
On 5/31/07, Dean Wampler <dean@xxxxxxxxxxxxxxxxxxxxx> wrote:
Would after advice work? An alternative is the "wormhole pattern" that Ramnivas Laddad documented in his book.
dean
On May 31, 2007, at 8:57 AM, Ingudam Manoranjan wrote:
Thanks Dean. But guess this would not solve the problem because the code injection is before the execute method. I guess I could still achieve without using AspectJ by using a decorator pattern where the code injection is before the execute method call.
Something like:
MyCommandWithPreProcessor{
MyCommand cmd = new MyCommand();
execute(Map CacheManager)
{
preProcessor(CacheManager);
cmd.execute(CacheManager);
}
private void preProcessor(Map CacheManager){
//Do Preprocessing logic here...
}
}
Problem is when I want to inject code just before the Service Call through the ServiceUtil.getService
(). All my commands extend an interface Command with an execute(Map) method.
public class MyCommand implements Command{
public void execute(Map CacheManager)
{
//code for getting objects, values from cache
......
.....
CallHookerPreProcessor(
this.class, CacheManager ); //Need to inject this PreProcessor
//Code for calling service .Invoke EJB etc.
Service ser = (Service)ServiceUtil.getService("Name");
ser.MYServiceMethod
(Param1, Param2);
...
...
...
}
}
On 5/31/07, Dean Wampler <
dean@xxxxxxxxxxxxxxxxxxxxx > wrote:How about this; change you pointcut to match calls to execute, then you can add the cachemanager as an argument to the pointcut and the advice. Something like
pointcut callExecuteThatCallsGetServiceUtil(Map cacheManager):
call (public void MyCommand.execute(Map)) && args(cacheManager);
before (Map cacheManager): callExecuteThatCallsGetServiceUtil(cacheManager) {
Class Command = thisJoinPoint.getSourceLocation ().getWithinType();
IPreProcessor preprocessor = (IPreProcessor)PrePostProcessorResolver.getPreProcessor(Command);
preprocessor.preprocess( cachmanager);
}
dean
On May 31, 2007, at 3:56 AM, Ingudam Manoranjan wrote:
I have the following scenario:
public class MyCommand {
public void execute(Map cachmanager) {
System.out.println
("I am in MyCommand: Before Service Call");
ServiceUtil.getService ("MyService");
System.out.println("I am in MyCommand: After Service Call");
}
public class ServiceUtil {
public static String getService(String serviceName){
String serviceObject = "Static Service";
System.out.println("Service invoked is : "+ serviceName);
return serviceObject;
}
}
I want to add Preprocessing beforethe Service Call.
public aspect ServiceUtilAspect {
pointcut callServiceUtil():
call (public static String ServiceUtil.getService(String));
before() :callServiceUtil()
{
Class Command = thisJoinPoint.getSourceLocation ().getWithinType();
IPreProcessor preprocessor = (IPreProcessor)PrePostProcessorResolver.getPreProcessor(Command);
//Map cachmanager = new HashMap();
preprocessor.preprocess( cachmanager);
}
}
I want to be get the cachmanager from the Command. Is it possible using Aspectj? Can anyone help?
_______________________________________________
aspectj-dev mailing list
Dean Wampler, Ph.D.
I want my tombstone to say:
Unknown Application Error in Dean Wampler.exe.
Application Terminated.
[Okay] [Cancel]
_______________________________________________
aspectj-dev mailing list
aspectj-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-dev
_______________________________________________
aspectj-dev mailing list
Dean Wampler, Ph.D.
I want my tombstone to say:
Unknown Application Error in Dean Wampler.exe.
Application Terminated.
[Okay] [Cancel]
_______________________________________________
aspectj-dev mailing list
aspectj-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/aspectj-dev