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.