I've tried to write a pointcut that combines a couple of different
cflow()/cflowbelow() together, but it does not seem to work as expected.
That is, the advise is still being executed even though one of the cflow()
pointcuts is clearly in the stacktrace.

My pointcut in question is:

@Pointcut("get(* model.UserAccount.accountOwner)")
public void userAccountOwner(){}


I then use the defined pointcut as:

@Before( "aspectInitialized() && cflowbelow(ejbMethods()) &&
!cflowbelow(userAccountOwner()) && (newModelsWhichReferenceUserA() ||
(userAccountAccessibleMethods() ))")
public void preventConstructorsForRelatedObjects(JoinPoint joinPoint)
throws SecurityAccessTableDataException{

// some logic

throw new RuntimeException( "USERA tables not yet ready");

}


And in my stack trace in which the advice is clearly being executed (the
GeneralException is being triggered by an exception thrown in the advice),
I can observe the UserAccount.getAccountOwner() method being called.

Caused by: <0|false|0.9.5-incubating> kodo.jdo.GeneralException: USERA
tables are not yet ready
        at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:852)
        at org.apache.openjpa.kernel.BrokerImpl.find(BrokerImpl.java:749)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.find(JDBCStoreManager.java:746)
        at
org.apache.openjpa.jdbc.meta.strats.RelationFieldStrategy.load(RelationFieldStrategy.java:550)
        at
org.apache.openjpa.jdbc.meta.FieldMapping.load(FieldMapping.java:791)
        at
org.apache.openjpa.jdbc.kernel.JDBCStoreManager.load(JDBCStoreManager.java:483)
        at
org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:113)
        at
org.apache.openjpa.datacache.DataCacheStoreManager.load(DataCacheStoreManager.java:363)
        at
org.apache.openjpa.kernel.DelegatingStoreManager.load(DelegatingStoreManager.java:113)
        at
org.apache.openjpa.kernel.ROPStoreManager.load(ROPStoreManager.java:75)
        at
org.apache.openjpa.kernel.StateManagerImpl.loadFields(StateManagerImpl.java:2742)
        at
org.apache.openjpa.kernel.StateManagerImpl.loadField(StateManagerImpl.java:2820)
        at
kodo.kernel.ProfilingStateManager.loadField(ProfilingStateManager.java:68)
        at
org.apache.openjpa.kernel.StateManagerImpl.beforeAccessField(StateManagerImpl.java:1337)
        at
kodo.kernel.ProfilingStateManager.beforeAccessField(ProfilingStateManager.java:49)
        at
org.apache.openjpa.kernel.StateManagerImpl.accessingField(StateManagerImpl.java:1322)
        at model.UserAccount.pcGetaccountOwner(UserAccount.java:1)
====>   at model.UserAccount.getAccountOwner(UserAccount.java:500)
        at
business.impl.PersistentManipulationUtil.findAccountablePersonWithUserName(PersistentManipulationUtil.java:991)
        at business.impl.EJBUtil.createBusinessContext(EJBUtil.java:120)
        at business.impl.EJBUtil.createBusinessContext(EJBUtil.java:78)
        at
business.ejb3.base.BaseManagerBean.getBusinessContext(BaseManagerBean.java:410)
        at
business.ejb3.EnterpriseManagerBean.getEnterpriseWindowThresholds(EnterpriseManagerBean.java:1680)


Changing the userAccountOwner() pointcut to read:

@Pointcut("execution(* model.UserAccount.getAccountOwner(..))")
public void userAccountOwner(){}


And the cflow() works as expected.

Is this behaviour expected based on the way field getter/setter pointcuts
are designed to work or is this a bug in my code (or my use of the field
getter) or AspectJ?

This is with AspectJ 1.8.13.

Thanks,

Eric
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://www.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to