Hi Ilhan,

Maybe I don't understand the request. Pinaki's
example<http://webspherepersistence.blogspot.com/2009/01/auditing-with-openjpa.html>uses
the JPA spec defined callbacks to get the previous state of the
entity.
I thought the problem you were hitting was the need to put the audit method
in each entity. Using orm.xml you can define a single PostUpdate method
which applies to every entity (of course that audit method may be tightly
coupled to the entities in your PersistenceUnit).

Based on Pinaki's example I think this would work for you.

On to your second question :
I don't think you can inject a PersistenceContext or an EJB into a lifecycle
callback method and you'd want to use a jndi lookup in this case. I'm not an
expert with injection though so I could be proven wrong.

Best Regards,

-mike

On Wed, Aug 12, 2009 at 3:42 AM, illhan <[email protected]> wrote:

>
> hi Michael,
> I know the entity lifecyclelistener config in orm.xm,Thanks.
> I think the entity lifecyclelistener is not fit for audit logging.I can not
> get old state from the lifecyclelistener,and the lifecyclelistener is JPA
> spec,not JEE5,so session bean or persistencecontext can not be injected in
> lifecyclelistener,I must use the jndi lookup to find ejb or
> entitymanager,is
> it right?
> Thanks Michael.
> illhan
>
> Michael Dick wrote:
> >
> > 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.
> >>
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/how-to-use-openjpa-event-listener---tp3397042p3429428.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>

Reply via email to