機能の簡単なテスト (チュートリアルに従う) のために、Bitronix と H2 インメモリ データベースを使用してプリミティブ JTA 環境をセットアップしようとしました。テストは、単純な Java アプリケーション (Java EE やサーバーなどなし) で単体テストとして実行することになっています。
残念ながら、私はそれを実行できません。私のセットアップは次のとおりです。
チュートリアルに従って、(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>
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
[...]
したがって、ここで何かが間違っていることは確かです。手伝って頂けますか?