/ / Jak utworzyć EntityManager, gdy nie masz pewności co do nazwy urządzenia? - java, jpa, java-ee, jpa-2.0, java-ee-6

Jak utworzyć EntityManager, gdy nie masz pewności co do nazwy urządzenia? - java, jpa, java-ee, jpa-2.0, java-ee-6

Jestem w sytuacji, w której muszę określić nazwę jednostki EntityManager w czasie wykonywania.

Na przykład, chciałbym zrobić coś takiego:

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

Nie jest to jednak możliwe z adnotacjami.

Czy jest możliwe utworzenie EntityManager, gdy nie jesteś pewien, jaka jest nazwa urządzenia do czasu wykonywania?

Odpowiedzi:

7 dla odpowiedzi № 1

Możliwe jest określenie nazwy jednostki trwałości (PU) w środowisku wykonawczym, ale jest to parametr używany podczas tworzenia pliku EntityManagerFactorynie osoba EntityManager. Zobacz Javadoc dla Persistence metoda klasy createEntityManagerFactory(). Przykład:

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

Robię to w aplikacji innej niż Java EE (używając wywołań Java 6 SE w aplikacji internetowej hostowanej przez Tomcat), ale nie jestem pewien, jak to zrobić w zarządzanej przez kontener aplikacji Java EE 6. Jest to możliwe.


3 dla odpowiedzi № 2

W tym miejscu należy ręcznie utworzyć obiekt entityManager bez korzystania z adnotacji za pośrednictwem interfejsu JNDI, aby wskazać go innej, trwałej jednostce w środowisku wykonawczym.

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