Background:
The OpenEJB JPA based CMP engine is a wrapper around an EntityManger. The engine is designed to get out of the way of the JPA implementation so the performance is only a function of the JPA implementation. In the engine we do not have a cache or beans or even the entity managers. Instead we rely on the entity manager to cache the beans and the entity manger factory (or JTA based wrapper) to cache the entity managers.

The Problem:
I need to register a lifecycle listener to perform CMP callbacks like ejbLoad and ejbStore and need to do this once to avoid duplicate callbacks. The problem is there seems to no way to determine if the lifecycle listener has already been added to the EM without maintaining a list of registered EMs. Currently, I'm using a WeakHashMap<EntityManager,Object> to determine if I have already registered, but am looking for a cleaner way.

Possible Solutions:
o Add an isRegisteredLifecycleListener method to the EM, and I check it before add o Add a getLifecycleListeners method to the EM, and I search the list before add o Add lifecycle listener at the EMF level which it is automatically added to all created EMs (of course I'll need a way to uniquely do that).

Other Solutions? Ideas? Comment?

-dain

Reply via email to