openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michael Dick <michael.d.d...@gmail.com>
Subject Re: regarding StoreListener
Date Wed, 04 Mar 2009 19:36:36 GMT
Hi,

I think I understand your concern. You're looking for a default set of
listeners which apply to all your entities. This is also supported by the
JPA specification. Relevant section :
3.5.7.2 Specification of the Binding of Entity Listener Classes to Entities
The entity-listeners subelement of the persistence-unit-defaults element is
used to
specify the default entity listeners for the persistence unit.

Here's an example from one of our unit tests :
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
                    http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<persistence-unit-metadata>
   <persistence-unit-defaults>
       <entity-listeners>
            <entity-listener
class="org.apache.openjpa.persistence.annotations.common.apps.annotApp.ddtype.DefaultCallbackListener">
                 <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>
. . .

Is that more what you're looking for?

-mike


On Wed, Mar 4, 2009 at 1:02 PM, is_maximum <mnrz57@gmail.com> wrote:

>
> Hi Michael,
>
> As far as I know these are entity listener and we have to declare our
> listener for each entity and I think this is not a good idea. consider that
> we have nearly 30 entities and it may be added in the future we don't like
> to declare a listener for each pre-update, pre-remove and pre-persist,
> instead we need a listener just like StoreListener in OpenJPA in which we
> are notified by any changes in any entity and then we can find dirty fields
> and old/new values so we can save the history of any changes. Keeping this
> history is inevitable and very important to our customers
>
> Now the StoreListener I already stated works fine but the problem is that
> before any invocation of one of merge(), delete() and persist() of
> EntityManager we have to add this listener to the EM and I think this is a
> bit messy and not a good idea.  Sorry maybe because of my poor English you
> could not understand me very well if so ask me to put the snippet code here
> to clarify everything. Now I'm at home but tomorrow I will post the code.
>
> Thanks
>
>
> Michael Dick wrote:
> >
> > Hi,
> >
> > The JPA specification defines several listeners which can be configured
> > via
> > orm.xml or annotations in your entity classes. Here's a quick view of the
> > available listeners :
> > The following annotations are defined to designate lifecycle event
> > callback
> > methods of the corresponding
> > types.
> > • PrePersist
> > • PostPersist
> > • PreRemove
> > • PostRemove
> > • PreUpdate
> > • PostUpdate
> > • PostLoad
> >
> > Section 3.5 of the JPA 1.0 specification covers how these listeners are
> > used
> > in more detail.
> >
> > Do you need a listener for any other lifecycle event for your entity, or
> > does this cover everything you need?
> >
> > -mike
> >
> > On Wed, Mar 4, 2009 at 2:02 AM, is_maximum <mnrz57@gmail.com> wrote:
> >
> >>
> >> Hi
> >>
> >> First I don't know why there is no useful document on these sort of
> >> listeners and how to use it.
> >>
> >> Second after toiling I was able to find dirty fields and fire the
> >> pre-update
> >> event. This is for a logging service we have to implement for our
> >> application but now the problem is that if you want to listen to an
> >> store-event (pre-update, pre-delete ...) you need to cast the em into
> >> openjpa-em and then add your listener to it. First I did it in
> >> @PostConstruct callback method but soon I found that this method will be
> >> called once each time the container instantiate my stateless so after
> >> that
> >> the listener won't work at all.
> >>
> >> now I have implemented some save() update() and delete() method as DAO
> >> interface and before each method I add this listener to.
> >>
> >> The problem is that I think this way of adding listeners is not correct.
> >> I've already used Hibernate and they have a simple XML file in which you
> >> can
> >> simply define your desired listeners and they are guaranteed to work
> each
> >> time a CRUD operation being applied
> >> Is there anythink like that in OpenJPA or Do we need to open an issue in
> >> JIRA and request such feature?
> >>
> >> thanks
> >> --
> >> View this message in context:
> >> http://n2.nabble.com/regarding-StoreListener-tp2420847p2420847.html
> >> Sent from the OpenJPA Users mailing list archive at Nabble.com.
> >>
> >>
> >
> >
>
> --
> View this message in context:
> http://n2.nabble.com/regarding-StoreListener-tp2420847p2424814.html
> Sent from the OpenJPA Users mailing list archive at Nabble.com.
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message