Hitachi

Cosminexus V11 アプリケーションサーバ Cosminexus Reliable Messaging


2.6.6 トランザクション制御

Reliable Messagingのアプリケーションはトランザクションマネジャでのトランザクション,およびローカルトランザクションを利用できます。ただし,トランザクションマネジャでのトランザクションとローカルトランザクションとを並行して利用することはできません。

例えば,トランザクションマネジャが制御しているときに次に示す状態のQueueSessionオブジェクトを,トランザクション属性がNotSupportedのメソッド内で利用しようとした場合,ローカルトランザクションを並行して利用することになるため例外が発生します。

〈この項の構成〉

(1) ローカルトランザクションの利用

キューセッションでのローカルトランザクションを利用する場合,QueueConnection.createQueueSession()メソッドのtransacted引数にtrueを指定します。

ローカルトランザクションの場合,Reliable Messagingのメッセージ送受信だけがトランザクションの対象になります。他製品が提供するリソースに対する操作は対象になりません。

(2) トランザクションマネジャでのトランザクションの利用

Reliable Messagingでは,トランザクションマネジャでのトランザクションを利用できます。次に示す場合,トランザクションマネジャでのトランザクションが発生します。

トランザクションマネジャでのトランザクションの場合,Reliable Messagingのメッセージ送受信だけでなく,他製品が提供するリソースに対する操作を含めたトランザクションが使用できます。

トランザクションマネジャでのトランザクションを使用する場合,Connector属性ファイルの<transaction-support>タグにLocalTransactionまたはXATransactionを指定してください。ただし,LocalTransactionを指定した場合,他製品が提供するリソースに対する操作を含めたトランザクションを使用できません。NoTransactionを指定した場合,トランザクションマネジャでのトランザクションを使用できません。Connector属性ファイルについては,マニュアル「アプリケーションサーバ リファレンス 定義編(アプリケーション/リソース定義)」を参照してください。

(3) トランザクションとメッセージ送信

メッセージ送信時のQueueSender.send()メソッドの動作について,トランザクションマネジャによってトランザクションが制御されていない場合と制御されている場合に分けて説明します。

(4) トランザクションとメッセージ受信

メッセージの受信方式には,同期受信および非同期受信があります。

以降では,同期受信についてトランザクションマネジャによってトランザクションが制御されていない場合と制御されている場合に分けて説明します。

(5) Application Serverのアウトプロセストランザクションサービスの利用

Application Serverのアウトプロセストランザクションサービスを使用し,XID再利用で最適化を行った場合,グローバルトランザクションで異なる二つのリソースアダプタ(別々にデプロイされた二つのReliable Messaging,Reliable MessagingとDB Connectorなど)から同一のDBに接続するコネクションを使用しないでください。

この構成にすると,リソースマネジャでエラーが発生する,または応答が返らないおそれがあります。XID再利用による最適化については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」を参照してください。