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