11.2. JTA サポート
JTA 対応のトランザクションを使用し参加するよう、 JBoss Cache を設定することができます。 また、 トランザクションサポートの無効化は、 JDBC 呼び出しにおける自動コミットの使用に相当します。 この場合、 変更される度に変更がレプリケートされる可能性があります (レプリケーションが有効になっている場合)。
JBoss Cache は着信呼び出し毎に以下を実行します。
- スレッドに関連する現在の
javax.transaction.Transactionを読み出します。 - トランザクションのコミットやロールバック時に通知されるよう、 登録されていない場合は
javax.transaction.Synchronizationをトランザクションマネージャに登録します。
登録するには、 環境の
javax.transaction.TransactionManager への参照をキャッシュに提供する必要があります。 これには、 通常 TransactionManagerLookup インターフェース実装のクラス名でキャッシュを設定します。 キャッシュが起動すると、 このクラスのインスタンスを作成し、 TransactionManager への参照を返す getTransactionManager() メソッドを呼び出します。
JBoss Cache には
JBossTransactionManagerLookup と GenericTransactionManagerLookup が同梱されます。 JBossTransactionManagerLookup は実行されている JBoss AS インスタンスにバインドでき、 TransactionManager を取得できます。 GenericTransactionManagerLookup は一般的な Java EE アプリケーションサーバーのほとんどにバインドでき、 同様の機能を提供できます。 また、 単体テストのためダミーの実装である DummyTransactionManagerLookup も提供されます。 ただし、 ダミーは、 同時トランザクションやリカバリに対して厳しい制限があるため、 本稼働用に使用することは推奨されません。
TransactionManagerLookupを設定する代わりに、 プログラムを用いて TransactionManager への参照を Configuration オブジェクトの RuntimeConfig 要素へ挿入することもできます。
TransactionManager tm = getTransactionManager(); // magic method
cache.getConfiguration().getRuntimeConfig().setTransactionManager(tm);
TransactionManager への参照を既に持っている IOC コンテナによって Configuration が構築されている場合、 TransactionManager を挿入する方法が推奨されます。
トランザクションのコミットを実行すると、 単相または 2 相コミットプロトコルが開始されます。 詳細は 「レプリケートされたキャッシュトランザクション」 を参照してください。