持久性.XML JavaEE with EJB 和 Intellij



我正在尝试使用IntelliJ IDEA配置JavaEE项目。

我的配置:

  • IDE Intellij (Jetbrains)
  • 玻璃鱼(EJB容器)
  • JPA 实体(休眠提供程序)
  • 具有 WAMP 的数据库(在持久性中配置.xml)

不幸的是,当我启动我的项目时,显示一个 404 页面: EJBTransactionRolledbackException.

我不明白这个例外或这个问题...也许是我的文件持久性.xml :

 <?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
<persistence-unit name="PU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
        <property name="hibernate.connection.user" value="root" />
        <property name="hibernate.connection.password" value="root" />
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/supbartering" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
    </properties>
</persistence-unit>
</persistence>

我将其与:

@PersistenceContext(unitName = "PU")
private EntityManager mEntityManager;

这是我第一次将Intellij与JEE项目和GlassFish服务器一起使用,但我无法实现良好的配置。

您正在使用 Hibernate 特定的"本地数据源"属性,但您声称想要使用 JTA 事务。这是前后矛盾的。请参阅 JPA 规范的第 8.2.1.2 节

事务类型属性用于指定实体是否 实体管理器工厂为持久性提供的管理器 单元必须是 JTA 实体管理器或资源本地实体管理器。 此元素的值为 JTA 或 RESOURCE_LOCAL。事务类型 的 JTA 假定将提供 JTA 数据源 — 作为 由 JTA 数据源元素指定或由容器提供。 通常,在 Java EE 环境中,事务类型 RESOURCE_LOCAL假定将提供非 JTA 数据源。在 Java EE 环境,如果未指定此元素,则缺省 是JTA。在 Java SE 环境中,如果未指定此元素, 默认值为 RESOURCE_LOCAL。

因此,您要么使用 JTA,在

外部定义 JTA 数据源,并在持久性中指定"jtaDataSource".xml(并删除 url/user/password/driver),要么使用 RESOURCE_LOCAL 事务并通过连接 URL/user/password/driver 属性定义数据源(并使用标准 javax.persistence 属性,如此链接所示)。

最新更新