jpa - Java EE 中的 Persistence.createEntityManagerFactory() 忽略 JTA 源

标签 jpa connection persistence glassfish

我有一个完美运行的应用程序客户端部署到带有一些 EJB、实体等的耳朵内的 GlassFish v2 服务器。我正在使用 eclipselink。

目前我的persistence.xml中有:

<persistence-unit name="mysource">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <jta-data-source>jdbc/mysource</jta-data-source>
    <class>entities.one</class>
    <class>entities.two</class>
    ...
    <properties>
      <property name="eclipselink.target-server" value="SunAS9"/>
      <property name="eclipselink.logging.level" value="FINE"/>
    </properties>
</persistence-unit>

当我注入(inject) EntityManager 时,这工作正常进入 EJB:
@PersistenceContext(unitName="mysource")
private EntityManager em;

现在我需要动态切换持久性单元/数据库。
我想我可以得到 EntityManager以编程方式:
em = Persistence.createEntityManagerFactory("mysource").createEntityManager();

但我收到以下错误:
Unable to acquire a connection from driver [null], user [null] and URL [null]

甚至在 Map 中“覆盖”javax.persistence.jtaDataSource”到“jdbc/mysource”并调用 createEntityManagerFactory("mysource", map) 也没有什么不同。

我错过了什么?

最佳答案

您试图通过以编程方式创建实体管理器来绕过容器,这意味着您很可能会创建一个非 JTA 数据源(因为它在容器之外,事务类型应该是 RESOURCE_LOCAL),因此您的原始配置是无用的。

尝试注入(inject)具有不同 unitName 属性的实体管理器或创建 RESOURCE_LOCAL 事务类型持久性单元。

关于jpa - Java EE 中的 Persistence.createEntityManagerFactory() 忽略 JTA 源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675805/

相关文章:

spring - 如何在Spring State Machine上检索和找到当前状态?

java - 仅当查询未找到任何结果时才出现错误 java.lang.ClassNotFoundException : org. springframework.orm.jpa.EntityManagerFactoryUtils

php - 为什么我的 SQL 结果不会在 PHP 站点中打印出来?

java - 通过页面保留对象

c# - 如何将数据从 .NET 持久保存到磁盘?

database - Docker-compose v3 不保留 postgres 数据库

java - 在 Spring Boot 中通过 JPA 正确利用纪元秒

java - 无法解析 org.apache.openjpa.persistence.PersistenceProviderImpl

php - 我应该在方法内部还是在调用页面上关闭 PDO 数据库连接?

database - 如何保护数据库连接字符串