Hi Franceso, As I'd mentioned in my previous message, it is my understanding that an Aspect can not extend a concrete Aspect. I tried doing as you suggested and extended the *LogicInvocationHandler* to *CustomLogicInvocationHandler* and I see the following error:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0': BeanPostProcessor before instantiation of bean failed; *nested exception is org.springframework.aop.framework.AopConfigException*: [org.apache.syncope.core.logic.CustomLogicInvocationHandler] *cannot extend concrete aspect* [org.apache.syncope.core.logic.LogicInvocationHandler] Do you think there could be a workaround here or is hijacking *LogicInvocationHandler* the only option under this circumstance? Thanks, Anmol On Sat, 5 Sep 2020 at 12:06, Francesco Chicchiriccò <[email protected]> wrote: > On 03/09/20 17:31, Anmol Sharma wrote: > > Hi Franceso, > > I do not have much experience with AOP but I experimented with it > and added a section to [2] to establish some logic to run after [1] as you > suggested. I am able to intercept any updates made to privileges after > that ApplicationLogic.update method has returned. > > Here is the code block I added to [2]: > > @AfterReturning(pointcut = "execution(* > org.apache.syncope.core.logic.ApplicationLogic.update(..))", > returning = "retVal")public void after(Object retVal) throws Throwable { > LOG.info("After logic cut executed for jointPoint ApplicationUpdate: "+ > retVal.toString());} > > > While this seems like a feasible solution, I had to override > *org.apache.syncope.core.logic.LogicInvocationHandler* in my project as > suggested here > <http://syncope.apache.org/docs/reference-guide.html#customization>. > > I now have the following questions: > (a.) Ideally, I'd like to avoid managing upstream code and only extend > upstream logic with customizations. However, it is my understanding that an > Aspect can not extend a concrete Aspect such as LogicInvocationHandler. Do > you have suggestions on a workaround? Is there a way I can register > multiple Aspects in logicContext.xml bean initialization? > > There is no need to hijack LogicInvocationHandler; just define your own > > core/src/main/java/org/apache/syncope/core/logic/MyOwnCoolHandler.java > > let it extend LogicInvocationHandler and ensure to set > > logicInvocationHandler=org.apache.syncope.core.logic.MyOwnCoolHandler > > in core/src/main/resources/logic.properties > > (b.) Longer term, do you think there is merit in having an issue track > having a ApplicationTO tracked as an EntityTOType or having some mechanism > to support LogicActions on Applications? > > Honestly, this is the first time we hear such requirement, so I really > don't know if this is going to happen anytime soon. > > Regards. > > [1] > https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java#L85 > [2] > https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java#L55 > > Anmol > > On Wed, 2 Sep 2020 at 12:45, Francesco Chicchiriccò <[email protected]> > wrote: > >> On 01/09/20 19:04, anmols wrote: >> > Hello SMEs, >> > >> > I am new to Apache Syncope and I'm planning to use it for users and >> > permissions management for third-party applications. >> > >> > I am trying to model permissions for these applications as privileges >> that >> > are associated with roles assigned to a set to users/groups as >> described >> > here < >> http://syncope.apache.org/docs/2.1/reference-guide.html#privileges> . >> > >> > I want to trigger some custom logic every time that: >> > a.) A user gets added to/updated with/deleted from a role assignment. >> > b.) A privilege that is associated with certain role(s) gets updated. >> > >> > I am able to do (a.) using a custom implementation of LogicActions as >> > described here >> > <http://syncope.apache.org/docs/2.1/reference-guide.html#logicactions> >> in >> > the reference doc. >> > >> > I am wondering what is the best way to achieve (b.), i.e. how can I >> receive >> > a notification if the privileges for an application are updated such >> that I >> > can execute some custom logic? >> > >> > I read through the Notification >> > <http://syncope.apache.org/docs/2.1/reference-guide.html#notifications> >> >> > mechanism that is oriented towards sending emails but could not find an >> > appropriate entry point. >> > >> > I think I'm essentially looking for a LogicActions like hook for >> third-party >> > application privileges. >> >> Hi Anmol, >> it seems you went quite some far, good! :-) >> >> As you have already found out, there is no (yet?) "standard" and clean >> way to achieve (b). >> >> If you have some confidence with AOP, the first thing coming to my mind >> would be to define a logic cut around method [1], similar to what [2] does, >> but more retailed to [1]. >> >> Does it sound as feasible? >> Regards. >> >> [1] >> https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/ApplicationLogic.java#L85 >> [2] >> https://github.com/apache/syncope/blob/syncope-2.1.6/core/logic/src/main/java/org/apache/syncope/core/logic/LogicInvocationHandler.java#L55 > > -- > Francesco Chicchiriccò > > Tirasa - Open Source Excellencehttp://www.tirasa.net/ > > Member at The Apache Software Foundation > Syncope, Cocoon, Olingo, CXF, OpenJPA, > PonyMailhttp://home.apache.org/~ilgrosso/ > > -- - Anmol
