使用EJB和Intellij的Persistence.XML JavaEE

时间:2016-01-19 12:31:23

标签: java xml jpa intellij-idea glassfish

我试图用IntelliJ IDEA配置JavaEE项目。

我的配置:

  • IDE Intellij(Jetbrains)
  • Glassfish(EJB容器)
  • JPA实体(Hibernate提供商)
  • 带有WAMP的数据库(在persistence.xml中配置)

不幸的是,当我启动我的项目时,会显示404页面:  EJBTransactionRolledbackException。

我不明白这个例外或这个问题...也许它是我的文件persistence.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服务器一起使用,但我无法实现良好的配置。

1 个答案:

答案 0 :(得分:1)

您正在使用Hibernate特定的&#34;本地数据源&#34;属性,但您声称要使用JTA事务。这是不一致的。参见JPA规范的第8.2.1.2节

  

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

所以你要么使用JTA,要在外部定义你的JTA数据源,并指定&#34; jtaDataSource&#34;在persistence.xml中(并删除url / user / password / driver),或者使用RESOURCE_LOCAL事务并通过连接URL / user / password / driver属性定义数据源(并使用标准的javax.persistence属性,如{{3显示)。