JPA:配置持久性提供程序

时间:2013-09-25 09:39:19

标签: jpa drools persistence.xml meta-inf

  • 我有一个用maven创建的简单java项目(quickstart archetype)

  • 我正在尝试为drools会话配置JPA持久性(代码来自drools文档)

    1. 我将drools-persistence-jpa,Bitronix事务管理器和com.h2数据库依赖项添加到我的pom.xml

    2. 我在Eclipse项目的“src / META-INF”中创建了一个META-INF文件夹作为Source-Folder

    3. 我在那里添加了persistence.xml和jndi.properties文件。

    4. 在我的TestCase中,我有以下代码:

    5. [...] EntityManagerFactory emf = Persistence.createEntityManagerFactory(“org.drools.persistence.jpa”); [...]

运行测试时,我收到以下异常:

  

javax.persistence.PersistenceException:没有持久性提供程序   EntityManager名为org.drools.persistence.jpa   javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)     在   javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)     在com.sample.MyTest.testJPA(MyTest.java:112)

我相对肯定,我创建META-INF或persistence.xml的方式有问题(见下文)。有什么建议吗?

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd 
    http://java.sun.com/xml/ns/persistence/orm 
    http://java.sun.com/xml/ns/persistence/orm_1_0.xsd">
    <persistence-unit name="org.drools.persistence.jpa" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/testDatasource</jta-data-source>
        <class>org.drools.persistence.info.SessionInfo</class>
        <class>org.drools.persistence.processinstance.ProcessInstanceInfo</class>
        <class>org.drools.persistence.processinstance.ProcessInstanceEventInfo</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
            <property name="hibernate.max_fetch_depth" value="3" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.connection.autocommit" value="true" />
            <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.BTMTransactionManagerLookup" />
        </properties>
    </persistence-unit>
</persistence>

1 个答案:

答案 0 :(得分:2)

我认为问题与您放置persistence.xml文件的位置有关。您必须放置src/META-INFsrc/main/resources/META-INF

,而不是src/test/resources/META-INF

<强>编辑: 在persistence.xml文件中,您声明要将org.hibernate.ejb.HibernatePersistence用作提供程序。根据您的评论,您未将hibernate-entitymanager作为依赖项[source]。尝试添加该依赖项。

希望它有所帮助,