2015-10-06 5 views
0

Я работаю с JBoss Wildfly в качестве сервера приложений на моем уровне JPA.Присоединение JavaSE EntityManager к JTA

Для получения технических требований мне нужно получить менеджер непрерывности моего объекта, используя подход, управляемый JavaSE/приложениями. Т. е .:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("idelivery", properties); 
EntityManager em = emf.createEntityManager(); 
MyEntity exUser= new MyEntity(); 
try{ 
    Context context = new InitialContext(); 
    UserTransaction userTransaction = (UserTransaction)context.lookup("java:comp/UserTransaction"); 
    userTransaction.begin(); 
    em.persist(exUser); 
    userTransaction.commit(); 

где в свойствах я установить:

properties.put ("hibernate.dialect", "org.hibernate.dialect.Oracle10gDialect"); 
    properties.put("javax.persistence.provider", "org.hibernate.jpa.HibernatePersistenceProvider"); 
    properties.put("javax.persistence.transactionType", "JTA"); 
    properties.put("javax.persistence.jtaDataSource", dataSourcePath); 

Проблема, конечно, с строк кода выше, я не могу связать EntityManager с менеджером транзакций контейнера JTA.

Итак, мой вопрос: есть ли какой-то пример или каким-то образом я могу заставить менеджера сущности присоединиться к сложной транзакции JTA? Я не знаю ... может быть, с производителем CDI, как я могу помещать entitymanager в контейнерный контекст?

ответ

0

В среде Java EE вы можете ввести EntityManagerFactory и использовать его для создания EntityManager с настраиваемыми свойствами. Поэтому, вместо того, чтобы

EntityManagerFactory emf = Persistence.createEntityManagerFactory("idelivery", properties); 
EntityManager em = emf.createEntityManager(); 

вы должны сделать что-то вроде:

// inject emf from container 
@PersistenceUnit("idelivery") 
private EntityManagerFactory emf; 

// and in your method create em with your properties... 
EntityManager em = emf.createEntityManager(properties); 
+0

спасибо ... но таким образом я пересечь мои требования динамичность. Мне нужно инициализировать EntityManagerFactory с помощью SE createEntityManagerFactory, потому что я должен установить источник данных во время выполнения и динамически изменять его. – Alex

+0

Передача свойств в 'emf.createEntityManager (свойства)' недостаточно динамична? Или проблема в том, что он игнорирует свойства, которые изменяют источник данных? – OndrejM

+0

ой ... извините ... я пропустил это (свойства) ... конечно, мне нужно попробовать ... дайте знать ... !!! спасибо – Alex