H2数据库/不带Java EE的Bitronix

H2数据库/不带Java EE的Bitronix,java,jpa,jndi,jta,bitronix,Java,Jpa,Jndi,Jta,Bitronix,为了在教程之后进行简单的功能测试,我尝试使用内存数据库中的Bitronix和H2设置一个基本的JTA环境。 测试应该作为单元测试在一个简单的Java应用程序中运行,没有JavaEE,没有服务器,等等 不幸的是,我无法运行它,以下是我的设置: 在教程之后,我通过maven添加了一些JAR: btm、h2、hibernate entitymanager和hibernate-jpa-2.0-api 我向类路径添加了persistence.xml、hibernate.cfg.xml和一个jndi.pro

为了在教程之后进行简单的功能测试,我尝试使用内存数据库中的Bitronix和H2设置一个基本的JTA环境。 测试应该作为单元测试在一个简单的Java应用程序中运行,没有JavaEE,没有服务器,等等

不幸的是,我无法运行它,以下是我的设置:

在教程之后,我通过maven添加了一些JAR:

btm、h2、hibernate entitymanager和hibernate-jpa-2.0-api 我向类路径添加了persistence.xml、hibernate.cfg.xml和一个jndi.properties文件

在测试方法中。。。我把这个代码:

PoolingDataSource ds = new PoolingDataSource();
ds.setUniqueName( "jdbc/BitronixJTADataSource" );
ds.setClassName( "org.h2.jdbcx.JdbcDataSource" );
ds.setMaxPoolSize( 3 );
ds.setAllowLocalTransactions( true );
ds.getDriverProperties().put( "user", "sa" );
ds.getDriverProperties().put( "password", "sasa" );
ds.getDriverProperties().put( "URL", "jdbc:h2:mem:mydb" );
ds.init();

EntityManagerFactory emf = Persistence.createEntityManagerFactory("org.persistence.jpa");
这是我的persistence.xml配置:

<persistence-unit name="org.persistence.jpa" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/BitronixJTADataSource</jta-data-source>
    <class>org.drools.persistence.info.SessionInfo</class>
    <class>org.drools.persistence.info.WorkItemInfo</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="update" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.jndi.class" value="bitronix.tm.jndi.BitronixInitialContextFactory"/> 
        <property name="hibernate.transaction.manager_lookup_class"
            value="org.hibernate.transaction.BTMTransactionManagerLookup" />
    </properties>
</persistence-unit>

所以这里肯定有问题。你能帮我吗?

我可以通过使用Hibernate 3.x而不是4.x来解决这个问题->某些东西一定发生了变化,但我没有进一步调查。

我可以通过使用Hibernate 3.x而不是4.x来解决这个问题->某些东西一定发生了变化,但我没有进一步调查

你的意思是我认为,还是说你让它与Hibernate3.x一起工作

javax.persistence.PersistenceException: [PersistenceUnit: org.drools.persistence.jpa] Unable to build EntityManagerFactory
[...]
Caused by: org.hibernate.service.jndi.JndiException: Error parsing JNDI name [jdbc/BitronixJTADataSource]
[...]
Caused by: javax.naming.OperationNotSupportedException
[...]