Hi Illhan,
The audit example from the persistence blog uses a @PostUpdate listener to
do the auditing. You can specify a default set of listeners for an entire
persistence unit in an xml mapping file. For example :
persistence.xml :
<persistence-unit name="auditable-pu">
<mapping-file>orm.xml</mapping-file>
</persistence-unit>
orm/xml :
<persistence-unit-metadata>
<persistence-unit-defaults>
<entity-listeners>
<entity-listener class="foo.bar.Auditor">
<pre-persist method-name="prePersist" />
<post-persist method-name="postPersist" />
<pre-remove method-name="preRemove" />
<post-remove method-name="postRemove" />
<pre-update method-name="preUpdate" />
<post-update method-name="postUpdate" />
<post-load method-name="postLoad" />
</entity-listener>
</entity-listeners>
</persistence-unit-defaults>
</persistence-unit-metadata>
Foo.bar.Auditor.postUpdate() will operate on all the entities in your
persistence unit - just like the annotation example in Pinaki's blog post.
Does that sound like what you want?
-mike
On Tue, Aug 11, 2009 at 10:19 AM, illhan <[email protected]> wrote:
>
> hi Rick,
> Because of the audit logging,I used the openJPA LifeCycleListener(maybe
> other openjpa listerners) for audit logging.
> I have try to record the audit logging by JPA lifecycle callbacks,but in
> the
> callbacks method's I can not get the old state,I only get the new method.
> The document
> http://webspherepersistence.blogspot.com/2009/01/auditing-with-openjpa.html
> http://webspherepersistence.blogspot.com/2009/01/auditing-with-openjpa.html
> shows one method to record audit logging,but the audit method must be
> added
> in my all entites ,it is too complex for developers.
> in my opinion,the openJPA LifeCycleListener maybe the best way to reduse
> the
> developers workload,if it can be used here.I can use event descriptor in
> eclipselink(toplink),I only to register the event descriptor in
> persistence.xml.So I would like to found the similar way in openJPA
> environment.
>
> Thanks Rick.
> illhan
>
> Michael Dick wrote:
> >
> > Hi Illhan,
> > The method you want to use is part of OpenJPA's SPI layer, and isn't
> > intended to be used by most applications. As a result the interface may
> be
> > a
> > bit more fluid than our 'normal' API methods.
> >
> > Could you elaborate on why you want to add a LifeCycleListener? We might
> > be
> > able to suggest an alternative that accomplishes the same goal..
> >
> > Best Regards,
> > -mike
> >
> > On Mon, Aug 10, 2009 at 9:05 PM, illhan <[email protected]> wrote:
> >
> >>
> >> hi Rick,
> >> You means the JPA lifecycle Callbacks,But I want to know the openjpa's
> >> listener,in package org.apache.openjpa.event,the interface
> >> LifecycleListener
> >> and the class LifecycleEvents.
> >> From the javadoc,the LifecycleListener can be registered by the method
> >> addLifecycleListener(Object listener, Class... classes) from class
> >> org.apache.openjpa.persistence.EntityManagerImpl,but in JEE container
> the
> >> EntityManager is inited by the container itself.How can I registere the
> >> LifecycleListener and process the LifecycleEvents.I have reviewed the
> >> openjpa user's guide,but no part can be found there.
> >> Thanks Rick.
> >> illhan
> >>
> >> Rick Curtis wrote:
> >> >
> >> > Illhan -
> >> >
> >> > Did you read the section in the user manual detailing the usage of
> >> > Lifecycle Callbacks [1]?
> >> >
> >> > -Rick
> >> >
> >> > [1]
> >>
> http://openjpa.apache.org/builds/latest/docs/manual/manual.html#jpa_overview_pc_callbacks
> >> >
> >> >
> >> > illhan wrote:
> >> >>
> >> >> hi Rick,
> >> >> The EntityManager and the EntityManagerFactory are initializated by
> >> the
> >> >> JEE contianer.I think the LifecycleListener could be set in
> >> >> persistent.xml,not only used by java code.
> >> >> Thanks Rick.
> >> >>
> >> >> illhan
> >> >>
> >> >> Rick Curtis wrote:
> >> >>>
> >> >>> Illhan -
> >> >>> In your application initialization I believe you could do something
> >> like
> >> >>> this to get a reference to the EntityManagerFactory....
> >> >>>
> >> >>> OpenJPAEntityManager oem = OpenJPAPersistence.cast(em);
> >> >>> OpenJPAEntityManagerFactory oemf =
> >> >>> OpenJPAPersistence.cast(oem.getEntityManagerFactory());
> >> >>>
> >> >>> - Rick
> >> >>>
> >> >>> illhan wrote:
> >> >>>>
> >> >>>> In the javadoc there are many event and listener.I want to use the
> >> >>>> event and the listener in jee enviroment,the emf.add**Listener()
> >> method
> >> >>>> can't not called because in jee enviroment the
> entitymanagerfacetory
> >> is
> >> >>>> created by jee contianer.i only use ejb3 injection in my session
> >> bean
> >> >>>> use @PersistenceContext
> >> >>>> private EntityManager em;
> >> >>>> so i don't know how to register the Listener(such as
> >> LifecycleListener)
> >> >>>> in JEE enviroment.
> >> >>>>
> >> >>>> illhan
> >> >>>>
> >> >>>
> >> >>>
> >> >>
> >> >>
> >> >
> >> >
> >>
> >> --
> >> View this message in context:
> >>
> http://n2.nabble.com/how-to-use-openjpa-event-listener---tp3397042p3421303.html
> >> Sent from the OpenJPA Users mailing list archive at Nabble.com.
> >>
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/how-to-use-openjpa-event-listener---tp3397042p3424516.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>