【问题标题】:Attaching JavaSE EntityManager to JTA将 JavaSE EntityManager 附加到 JTA
【发布时间】:2016-01-03 17:22:02
【问题描述】:

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

对于技术要求,我需要使用 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); 

当然,问题在于上面的代码行我无法将实体管理器绑定到容器 JTA 事务管理器。

所以我的问题是:是否有一些示例或方法可以让实体管理器加入复杂的 JTA 事务?我不知道...也许使用 CDI 生产者我可以将 entitymanager 放入容器上下文中?

【问题讨论】:

    标签: java cdi entitymanager jta jpa-2.1


    【解决方案1】:

    在 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);
    

    【讨论】:

    • 谢谢...但是这样我就超越了我的动态要求。我需要使用 SE createEntityManagerFactory 初始化 EntityManagerFactory,因为我必须在运行时设置数据源并动态更改它。
    • 将属性传递给emf.createEntityManager(properties) 不够动态?还是问题在于它忽略了修改数据源的属性?
    • 哦...对不起...我错过了(属性)...当然我必须尝试...让你知道...!!!谢谢
    • 好吧,我正在使用 Jersy 和 HK2...@PersistenceUnit(unitName="KAS-Mapping-AppHandled") 没有注入任何东西...你知道我如何查找EntityManagerFactory?
    • 好吧,如果您不使用 Java EE 功能,则需要使用您的应用服务器特定配置。对于 Wildfly,请尝试 this recipe
    猜你喜欢
    • 2012-05-24
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 2012-06-28
    相关资源
    最近更新 更多