将JavaSE EntityManager附加到JTA

时间:2015-10-06 17:25:26

标签: java cdi entitymanager jta jpa-2.1

我正在使用JBoss Wildfly作为我的JPA层上的应用程序服务器。

对于技术要求,我需要使用JavaSE /应用程序管理方法获取我的实体持久性管理器。 I. e。:

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生产者的方式放在容器上下文中吗?

1 个答案:

答案 0 :(得分: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);