Jeff Oh created OPENJPA-2479:
--------------------------------

             Summary: LifecycleListener invocation order inconsistent when 
listeners are added to the EntityManagerFactory
                 Key: OPENJPA-2479
                 URL: https://issues.apache.org/jira/browse/OPENJPA-2479
             Project: OpenJPA
          Issue Type: Bug
          Components: kernel
    Affects Versions: 2.3.0
            Reporter: Jeff Oh
             Fix For: 2.3.1


The EntityManagerFactory contains the method addLifecycleListener().  While the 
EntityManagerFactory never invokes these listeners itself, it does add them to 
any EntityManagers created by the factory.

Unfortunately, the EntityManagerFactory stores the listeners added to the 
factory in a java.util.HashMap.  As a result, the order that the listeners were 
added is lost.  If there is a dependency in the listener order then it is 
impossible to guarantee the order in which listeners are invoked.  As an 
example, if listener one modifies an object in the beforePersist() handler, and 
listener two writes audit records describing changes in a separate 
beforePersist() handler, then it is important to be to control the order in 
which the listeners are executed.

The attached patch and unit test replaces the HashMap inside of 
AbstractBrokerFactory with a LinkedHashMap so that listeners are invoked in 
predictable order.





--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to