[
https://issues.apache.org/jira/browse/CAY-1559?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andrus Adamchik updated CAY-1559:
---------------------------------
Attachment: 0001-x.patch
Just committed the change temporarily removing annotations. attaching a patch
that works against current trunk that adds them back.
> 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