Hi Anmol, thanks for reporting the error message. So ,the simplest solution should be to define your own class
core/src/main/java/org/apache/syncope/core/logic/MyOwnCoolHandler.java not extending any other class. Ensure to annotate as @Aspect @Component Essentially, you are defining an additional Aspect, which should not interfere with LogicInvocationHandler. Please let me know if this approach works. Regards. On 08/09/20 19:09, Anmol Sharma wrote: > 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] > <mailto:[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] >> <mailto:[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 Excellence http://www.tirasa.net/ Member at The Apache Software Foundation Syncope, Cocoon, Olingo, CXF, OpenJPA, PonyMail http://home.apache.org/~ilgrosso/
