2010-11-27 16 views
7

Estoy en una situación en la que necesito determinar el nombre de la unidad del EntityManager en tiempo de ejecución.¿Cómo se crea un EntityManager cuando no está seguro del nombre de la unidad?

Por ejemplo, me gustaría hacer algo como esto:

@PersistenceContext(unitName = findAppropriateJdbcName()) 
EntityManager entityManager; 

Sin embargo, esto no es posible con las anotaciones.

¿Es posible crear EntityManager cuando no está seguro de cuál es el nombre de la unidad hasta el tiempo de ejecución?

Respuesta

7

Es posible especificar el nombre de la unidad de persistencia (PU) en el tiempo de ejecución, pero este es un parámetro utilizado en la creación del EntityManagerFactory, no un individuo EntityManager. Consulte el Javadoc para el método de clase PersistencecreateEntityManagerFactory(). Ejemplo:

EntityManagerFactory emf = Persistence.createEntityManagerFactory(unitname); 
EntityManager em = emf.createEntityManager(); 
// ... 

hago esto en una aplicación de EE no Java (usando Java SE 6 llamadas en una aplicación web alojada en Tomcat) pero no estoy seguro de cómo se hace la misma cosa en una gestionadas por contenedor Aplicación Java EE 6. Es posible.

3

Aquí tiene que crear manualmente entityManager sin usar anotaciones a través de JNDI para apuntarlo a diferentes unidades persistentes en tiempo de ejecución.

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; 
} 
Cuestiones relacionadas