JPA:配置持久性提供程序

JPA:配置持久性提供程序,jpa,drools,persistence.xml,meta-inf,Jpa,Drools,Persistence.xml,Meta Inf,我得到了一个用maven(quickstart原型)创建的简单java项目 我正在尝试为drools会话配置JPA持久性(代码来自drools文档) 我在pom.xml中添加了drools持久性jpa、Bitronix事务管理器和com.h2数据库依赖项 我在Eclipse项目的“src/META-INF”中创建了一个META-INF文件夹作为源文件夹 我在那里添加了persistence.xml和jndi.properties文件 在我的测试用例中,我有以下代码: [……] EntityMan

我得到了一个用maven(quickstart原型)创建的简单java项目

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

  • 我在pom.xml中添加了drools持久性jpa、Bitronix事务管理器和com.h2数据库依赖项

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

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

  • 在我的测试用例中,我有以下代码:

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

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

    javax.persistence.PersistenceException:没有的持久性提供程序 名为org.drools.persistence.jpa的EntityManager位于 persistence.persistence.createEntityManagerFactory(persistence.java:69) 在 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>
    
    
    org.hibernate.ejb.HibernatePersistence
    jdbc/testDatasource
    org.drools.persistence.info.SessionInfo
    org.drools.persistence.processinstance.ProcessInstanceInfo
    org.drools.persistence.processinstance.ProcessInstanceEventInfo
    
    我认为问题与放置
    persistence.xml
    文件的位置有关。您必须放置在
    src/main/resources/META-INF
    src/test/resources/META-INF
    中,而不是
    src/META-INF

    编辑: 在persistence.xml文件中,您声明要使用org.hibernate.ejb.HibernatePersistence作为提供程序。根据您的评论,您没有将
    hibernate entitymanager
    作为依赖项。尝试添加该依赖项

    希望有帮助