xml version="1.0" encoding="UTF-8"
<!DOCTYPE aop PUBLIC
"-//JBoss//DTD JBOSS AOP 1.0//EN"
"http://www.jboss.org/aop/dtd/jboss-aop_1_0.dtd">
<aop>
<introduction expr="class(@pat.root)">
<mixin transient="false">
<interfaces>
org.prevayler.PrevalentSystem
</interfaces>
<class>org.nthx.pat.PrevalentSystemMixin</class>
<construction>new org.nthx.pat.PrevalentSystemMixin()</construction>
</mixin>
</introduction>
<introduction expr="class(@pat.root)">
<mixin transient="false">
<interfaces>
org.nthx.pat.IdentityMap
</interfaces>
<class>org.nthx.pat.IdentityMapMixin</class>
<construction>new org.nthx.pat.IdentityMapMixin()</construction>
</mixin>
</introduction>
<introduction expr="class(@pat.root)">
<interfaces>
org.nthx.pat.Persisteble
</interfaces>
</introduction>
<introduction expr="class(@pat.bo)">
<mixin transient="false">
<interfaces>
org.nthx.pat.BusinessObject, org.nthx.pat.Identifiable
</interfaces>
<class>org.nthx.pat.IdentifiableMixin</class>
<construction>new org.nthx.pat.IdentifiableMixin()</construction>
</mixin>
</introduction>
<introduction expr="class(@pat.root)">
<mixin transient="false">
<interfaces>
org.nthx.pat.BusinessObject, org.nthx.pat.Identifiable
</interfaces>
<class>org.nthx.pat.IdentifiableMixin</class>
<construction>new org.nthx.pat.IdentifiableMixin()</construction>
</mixin>
</introduction>
<typedef name="pat_rootTD" expr="class(@pat.root)" />
<typedef name="pat_boTD" expr="class(@pat.bo)" />
<cflow-stack name="whenNotRecoveringCommands">
<not-called expr="* *->recoverCommands(..)"/>
</cflow-stack>
<cflow-stack name="whenNotInside_NestedTransaction">
<not-called expr="java.lang.Object org.nthx.pat.CommandInterceptor->invoke(..)"/>
</cflow-stack>
<cflow-stack name="whenNotInside_NestedBOConstructor">
<not-called expr="java.lang.Object org.nthx.pat.TopBusinessObjectCreationInterceptor->invoke(..)"/>
</cflow-stack>
<bind pointcut="execution($typedef{pat_rootTD}->new(..))">
<interceptor class="org.nthx.pat.RootCreationInterceptor"
scope="PER_CLASS"/>
</bind>
<bind pointcut="execution($typedef{pat_boTD}->new(..))"
cflow="(whenNotRecoveringCommands AND whenNotInside_NestedTransaction AND whenNotInside_NestedBOConstructor)" >
<interceptor class="org.nthx.pat.TopBusinessObjectCreationInterceptor"
scope="PER_CLASS"/>
</bind>
<bind pointcut="execution($typedef{pat_boTD}->new(..))">
<interceptor class="org.nthx.pat.BusinessObjectCreationInterceptor"
scope="PER_CLASS"/>
</bind>
<bind pointcut="execution(* *->@pat.transaction(..))"
cflow="(whenNotRecoveringCommands AND whenNotInside_NestedTransaction AND whenNotInside_NestedBOConstructor)" >
<interceptor class="org.nthx.pat.CommandInterceptor" />
</bind>
<aspect class="org.nthx.pat.PersistebleAspect" scope="PER_CLASS"/>
<bind pointcut="execution(void $instanceof{org.nthx.pat.Persisteble}->takeSnapshot())">
<advice aspect="org.nthx.pat.PersistebleAspect" name="takeSnapshot"/>
</bind>
<bind pointcut="execution(void $instanceof{org.nthx.pat.Persisteble}->removeBO(..))">
<advice aspect="org.nthx.pat.PersistebleAspect" name="removeBO"/>
</bind>
<bind pointcut="get(* *->@pat.root_injected)">
<advice aspect="org.nthx.pat.PersistebleAspect" name="injectRoot" />
</bind>
</aop>