0

初めて Java エンタープライズ アプリケーションを作成して s を使用しようとしていますUserTransaction。したがって、JNDI Lookup を使用しjava:comp/UserTransactionて UserTransaction オブジェクトを取得します。

public void myMethod(MyEntity e) throws ApplicationException {
    try {
        this.ut = getUserTransaction();
        this.ut.begin();
        this.myStatefulBean.myBusinessMethod(e);
    } catch ...

でトランザクションを開始.begin()し、ステートフル Bean ( UserTransaction を開始する前にEJBTransactionRolledbackException適切に動作する) で任意のメソッドを呼び出そうとすると、次のエラーが発生します。

java.lang.IllegalStateException: cannot add non-XA Resource to global JTS transaction

私が使用している Bean には注釈が付けられて@DataSourceDefinitionいるclassName = "org.apache.derby.jdbc.ClientXADataSource"ため、非 XA リソースはありません。私は何を間違っていますか?

openjpa 2.2.1、Java EE バージョン 6 を使用しています

4

1 に答える 1

0

自分で問題を解決しました。私は DataSourceDefinitionname = "java:global/jdbc/testDB"で名前として使用しましたが、私persistence.xmlの DataSource 名は次のように定義されていました<jta-data-source>testDB</jta-data-source>

これは CMT では機能するようですが、UserTransaction では機能しません。persistence.xml のエントリを<jta-data-source>java:global/jdbc/testDB</jta-data-source>修正して問題を修正しました。

于 2013-06-13T11:46:09.297 に答える