Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you create an EntityManager when you are unsure of the unit name?

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?

like image 690
Brian DiCasa Avatar asked Nov 27 '10 17:11

Brian DiCasa


2 Answers

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.

like image 145
Jim Tough Avatar answered Oct 27 '22 00:10

Jim Tough


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;
}
like image 23
Nayan Wadekar Avatar answered Oct 26 '22 22:10

Nayan Wadekar