> I used runitme enhanced > I follow the steps by example descripted in the > http://webspherepersistence.blogspot.com/2009/01/auditing-with-openjpa.htm
Not fully :) Note the following at the very end of the article The two critical points before we close. * This technique only works with build-time enhancement. illhan wrote: > > hi Michael, > I follow the steps by example descripted in the > http://webspherepersistence.blogspot.com/2009/01/auditing-with-openjpa.htm > http://webspherepersistence.blogspot.com/2009/01/auditing-with-openjpa.htm > . > But when I update the entity,the callback calls @PostUpdate method.In the > callback method, I got the old state of the entity,but the unchanged the > fields value are all "null",only the changed fileds holds the old state > value.I used runitme enhanced and config the property > openjpa.RestoreState= all.I can not get the reason fot it?Anything other > config propertie needer here? > Thanks Michael. > > illhan > > > Michael Dick wrote: >> >> 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. >>> >> >> > > ----- Pinaki -- View this message in context: http://n2.nabble.com/how-to-use-openjpa-event-listener---tp3397042p3464029.html Sent from the OpenJPA Users mailing list archive at Nabble.com.
