[ 
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

Reply via email to