Как вы создаете EntityManager, когда вы не уверены в имени устройства? - PullRequest
7 голосов
/ 27 ноября 2010

Я нахожусь в ситуации, когда мне нужно определить имя устройства EntityManager во время выполнения.

Например, я хотел бы сделать что-то вроде этого:

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

Однако это невозможно с аннотациями.

Можно ли создать EntityManager, если вы не уверены, какое имя устройства есть до времени выполнения?

Ответы [ 2 ]

7 голосов
/ 28 ноября 2010

Можно указать имя единицы сохраняемости (PU) во время выполнения, но этот параметр используется при создании EntityManagerFactory, а не отдельного EntityManager. См. Javadoc для Persistence метода класса createEntityManagerFactory(). Пример:

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

Я делаю это не в приложении Java EE (используя вызовы Java 6 SE в веб-приложении, размещенном на Tomcat), но я не уверен, как вы делаете то же самое в приложении Java EE 6, управляемом контейнером. Это возможно.

3 голосов
/ 28 ноября 2010

Здесь вы должны вручную создать entityManager без использования аннотаций через JNDI, чтобы указывать на другой постоянный модуль во время выполнения.

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