package examples.proxy.tracing;
import org.codehaus.aspectwerkz.proxy.Proxy;
import org.codehaus.aspectwerkz.intercept.Advisable;
import org.codehaus.aspectwerkz.intercept.AroundAdvice;
import org.codehaus.aspectwerkz.joinpoint.JoinPoint;
public class TraceMe1 {
public void step1() {
System.out.println(" - TraceMe1.step1");
step2();
}
protected void step2() {
System.out.println(" - TraceMe1.step2");
step3();
}
void step3() {
System.out.println(" - TraceMe1.step3");
}
public static void main(String[] args) {
// get a proxy instance of the TraceMe1 class
// this class will have been weaved with all AW aspects on the classpath
System.out.println("\nINFO:: ------ get a weaved proxy to the TraceMe1 class -----");
TraceMe1 traceMe1 = (TraceMe1) Proxy.newInstance(TraceMe1.class, false, true);
// invoke the method - trigger deployed matched aspects (one around, one before and one after)
System.out.println("\nINFO:: ------ run method chain with only regular AW aspects -----");
traceMe1.step1();
// adding around interceptor using Advisble API
System.out.println("\nINFO:: ------ adding an around per instance interceptor on the fly -----");
((Advisable) traceMe1).aw_addAdvice(
"execution(* *.step3())",
new AroundAdvice() {
public Object invoke(JoinPoint jp) throws Throwable {
System.out.println("Interceptor::ENTERING - step3()");
Object result = jp.proceed();
System.out.println("Interceptor::EXITING - step3()");
return result;
}
}
);
// invoking the method chain with the added around interceptor
System.out.println(
"\nINFO:: ------ run method chain with the added per instance runtime added around interceptor -----"
);
traceMe1.step1();
}
}