JBoss.org Community Documentation
Control flow is a runtime construct. It allows you to specify pointcut parameters revolving around the call stack of a Java program. You can do stuff like, if method A calls method B calls Method C calls Method D from Constructor A, trigger this advice. In defining a control flow, you must first paint a picture of what the Java call stack should look like. This is the responsibility of the cflow-stack.
<cflow-stack name="recursive2"> <called expr="void POJO->recursive(int)"/> <called expr="void POJO->recursive(int)"/> <not-called expr="void POJO->recursive(int)"/> </cflow-stack>
A
cflow-stack
has a name and a bunch of
called
and
not-called
elements that define individual constructor or method calls with a Java call stack. The
expr
attribute must be a method or constructor expression.
called
states that the expr must be in the
call stack.
not-called
states that there should not be any more of the expression within the stack.
In the above example, the
cflow-stack
will be triggered if there are two and only two calls
to the
recursive
method within the stack.
Once the
cflow-stack
has been defined, it can then be referenced within a
bind
element through the
cflow
attribute. Boolean expressions are allowed here as well.
<bind pointcut="execution(void POJO->recursive(int))" cflow="recursive2 AND !cflow2"> <interceptor class="SimpleInterceptor"/> </bind>