最初に目的を説明し、次に症状を説明し、次に環境のセットアップを説明します。
私は、ネストされたトランザクション コンテキストで cumulus4j の動作を最終的にテストするプロジェクトに取り組んでいます。したがって、最初に cumulus4j を使用せずにテストを作成しました。テスト ケースは単純です。2 つのオブジェクトがデータベースに書き込まれます。すべてのオブジェクトは、独自のトランザクション内に書き込まれます。2 つのトランザクションはネストされています。ここで、メイン トランザクションまたはネストされたトランザクションのいずれかが、トランザクションのロールバックを引き起こす例外をスローします。私が期待する動作は次のとおりです。
(obj1) メイン tx 成功 / (obj2) ネストされた tx 例外: db 内の obj1、db 内にない obj2 (obj1) メイン tx 例外 / (obj2) ネストされた tx 成功: db 内にない obj2、db 内の obj2
しかし、私は持っています:
(obj1) メイン tx 成功 / (obj2) ネストされた tx 例外: db 内の両方のオブジェクト (obj1) メイン tx 例外 / (obj2) ネストされた tx 成功: db 内にオブジェクトなし
同じテストがプレーン データ ソースと純粋な SQL で正しく実行されているため、JTA と DN の構成の確認に多くの時間を費やしました。
トランザクションはコンテナーで管理され、DataNucleus Web サイトの指示に従いました。ネストされたトランザクションは、@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) で注釈が付けられた別の Bean を呼び出す 1 つの Bean によって開始されます。
セットアップ: プロジェクト全体はMaven プロジェクトであり、「all-project」に切り替えて「mvn clean install」と入力すると機能するはずです。テスト ケースは、組み込みのグラスフィッシュ サーバー内で ejb のメソッドを呼び出す統合テストです。ejbs はオブジェクトを derby データベースに保管しています。datanucleus に関連する設定は次のとおりです。
datanucleus.jtaLocator=custom_jndi
datanucleus.jtaJndiLocation=java:appserver/TransactionManage
javax.jdo.option.TransactionType=JTA
datanucleus.identifierFactory=datanucleus1
datanucleus.storeManagerType=rdbms
javax.jdo.option.ConnectionFactoryName=jdbc/__default
javax.jdo.option.ConnectionFactory2Name=jdbc/__defaultNoXa
domain.xml のサーバー リソース設定は次のとおりです。
<resources>
<jdbc-resource pool-name="DerbyPool" jndi-name="jdbc/__default" />
<jdbc-resource pool-name="DerbyPoolNoXa" jndi-name="jdbc/__defaultNoXa" />
<jdbc-connection-pool name="DerbyPool" datasource-classname="org.apache.derby.jdbc.EmbeddedXADataSource" res-type="javax.sql.XADataSource">
<property value="${com.sun.aas.instanceRoot}/lib/databases/default" name="databaseName" />
<property value=";create=true" name="connectionAttributes" />
</jdbc-connection-pool>
<jdbc-connection-pool name="DerbyPoolNoXa" datasource-classname="org.apache.derby.jdbc.EmbeddedDataSource40" res-type="javax.sql.DataSource">
<property value="${com.sun.aas.instanceRoot}/lib/databases/default" name="databaseName" />
<property value=";create=true" name="connectionAttributes" />
</jdbc-connection-pool>
</resources>
<servers>
<server name="server" config-ref="server-config">
<resource-ref ref="jdbc/__default" />
<resource-ref ref="jdbc/__defaultNoXa" />
</server>
</servers>
誰かが動作を説明し、どの設定が間違っている可能性があるかを教えてもらえますか?
よろしく、 ヤン