[ https://issues.apache.org/jira/browse/CAY-1559?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13779846#comment-13779846 ]
Andrus Adamchik commented on CAY-1559: -------------------------------------- an implementation idea that can speed things up: instead of inspecting the entire class hierarchy, starting from the entity class, we should inspect at most 2 classes per ObjEntity - (1) ObjEntity declared class itself and (2) optional custom superclass (that is presumably shared with many entities). This will prevent us from inspecting tons of property setters/getters in the "underscore" classes and scanning through unknown-depth class hierarchies. This should be bearable. And we can also make it optional, controlled via a property. > Use Lifecycle Annotations as markers on PersistentObject methods > ---------------------------------------------------------------- > > Key: CAY-1559 > URL: https://issues.apache.org/jira/browse/CAY-1559 > Project: Cayenne > Issue Type: Improvement > Components: Core Library > Affects Versions: 3.1M3, 3.1 (final), Short term future, Undefined future > Reporter: Mike M Pestorich > Assignee: Andrus Adamchik > Priority: Trivial > Labels: annotations, listener > Fix For: 3.2M2 > > Attachments: 0001-x.patch, LifecycleAnnotationMarker.patch > > > In my current project I have various abstract classes that my persistent > objects inherit from. While experimenting with various new ways of using > lifecycle listeners and their corresponding annotations available in 3.1, I > found myself wanting to annotate a method on one of those abstract classes > (say with @PostAdd) and have it act as a callback on all of its subclasses. > Out of the box, I could get this to work the way I wanted by doing something > like: > public class SomeAbstractPersistantObject { > ... > @PostAdd(SomeAbstractPersistantObject.class) > public void onPostAdd(Object object) > { > object.getObjectId() ... > } > } > And then later on registering the listener by doing something like: > serverRuntime.getDataDomain().getEntityResolver().getCallbackRegistry().addListener(new > SomePersistentObject()); > The problem was that I didn't what to have to instantiate an object just to > register it, or for that matter even have to register the listener in the > first place. My callback is already part of the PersistentObject that it > applies to and as such should "just work" for that object or anything that > extends it. I wanted to be able to do something like: > public class SomeAbstractPersistantObject { > ... > @PostAdd > public void onPostAdd() > { > this.getObjectId() ... > } > } > And that's it. Listeners/Callbacks defined in this manner are registered when > lazy initialization of the callback registry occurs within the > EntityResolver. All I have to do now is annotate a method within the > persistent object that I want it to act on and don't have to worry about > anything else. > I don't know if this sort of thing would be useful to anyone but I have > attached a patch that I believe does just that. I have been using it for a > couple of days now and it seems to be working as intended without breaking > the other available means of using lifecycle listeners. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira