H2 Database/ Bitronix w/o Java EE



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

不幸的是,我没有让它运行,这是我的设置:

  1. 我在教程中添加了一些罐子(通过 maven):

    • BTM、H2、Hibernate-entityManager 和 Hibernate-JPA-2.0-API
  2. 我在类路径中添加了持久性.xml、休眠.cfg.xml和 jndi.properties 文件。

  3. 在测试方法中(脏...我把这个代码:

    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");
    

这是我的坚持.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>

和jndi.properties:java.naming.factory.initial=bitronix.tm.jndi.BitronixInitialContextFactory

问题是:我得到这个堆栈:

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
[...]

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

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

"我可以通过使用Hibernate 3.x而不是4.x来解决这个问题 ->一定有什么变化,但我没有进一步调查。

"可能"是指"我认为"还是意味着你让它与Hibernate 3.x一起工作?

相关内容

  • 没有找到相关文章

最新更新