I'm in a situation where I need to determine the EntityManager's unit name at run time.
For example, I'd like to do something like this:
@PersistenceContext(unitName = findAppropriateJdbcName())
EntityManager entityManager;
However, this is not possible with annotations.
Is it possible to create the EntityManager when your not sure of what the unit name is until run time?
It is possible to specify the persistence unit (PU) name at runtime, but this is a parameter used in the creation of the EntityManagerFactory
, not an individual EntityManager
. See the Javadoc for the Persistence
class method createEntityManagerFactory()
. Example:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitname);
EntityManager em = emf.createEntityManager();
// ...
I do this in a non-Java EE application (using Java 6 SE calls in a Tomcat-hosted web app) but I'm not sure how you do the same thing in a container-managed Java EE 6 application. It is possible.
Here you have to manually create entityManager without using annotations through JNDI to point it to different persistent unit at runtime.
public EntityManager initializeEM(String pUnitName){
Context iCtx = new InitialContext();
String lookUpString = "java:comp/env/persistence/"+pUnitName;
javax.persistence.EntityManager entityManager =
(javax.persistence.EntityManager)iCtx.lookup(lookUpString);
return entityManager;
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With