2010-11-27 8 views
7

Ich bin in einer Situation, in der ich den Einheitsnamen des EntityManagers zur Laufzeit ermitteln muss.Wie erstellen Sie einen EntityManager, wenn Sie sich über den Gerätenamen nicht sicher sind?

Zum Beispiel würde Ich mag so etwas tun:

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

Dies ist jedoch nicht möglich, mit Anmerkungen.

Ist es möglich, den EntityManager zu erstellen, wenn Sie bis zur Laufzeit nicht sicher sind, wie der Gerätename lautet?

Antwort

7

Es ist möglich, die Persistenz Einheit (VE) Name zur Laufzeit angeben, aber dies ist ein Parameter bei der Erstellung des EntityManagerFactory verwendet wird, nicht ein einzelne EntityManager. Siehe Javadoc für die Persistence Klassenmethode createEntityManagerFactory(). Beispiel:

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

ich tue dies in einer Nicht-Java-EE-Anwendung (Java 6 SE-Aufrufe in einem Tomcat-gehosteten Web-App), aber ich bin nicht sicher, wie Sie die gleiche Sache in einem Container-Managed tun Java EE 6-Anwendung. Es ist möglich.

3

Hier müssen Sie den EntityManager manuell erstellen, ohne Annotationen über JNDI zu verwenden, um ihn zur Laufzeit auf eine andere persistente Einheit zu verweisen.

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