Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(EJBコンテナ)


4.3.5 Message-driven Bean実装時の注意事項

Message-driven Beanを実装するときの注意事項を示します。

〈この項の構成〉

(1) Message-driven Beanのトランザクション設定時の注意(Connector 1.0に準拠したリソースアダプタを使用する場合)

Message-driven Beanへのメッセージ配信とMessage-driven Bean内のデータベースアクセス処理をトランザクションで同期を取る場合,Message-driven Beanのトランザクション設定はCMTでRequiredに設定します。これによって,トランザクションがロールバックした場合にMessage-driven Beanへメッセージが再配信されます。しかし,トランザクションのロールバックが繰り返されると再配信も繰り返されるため,Message-driven Bean側でjavax.jms.MessageクラスのgetJMSRedeliveredメソッドを使用して再配信を確認するなどの対処が必要になります。CMTのNotSupported設定,またはBMTではいったんMessage-driven Beanでメッセージを受信すると,トランザクションがロールバックしても再配信されなくなります。

(2) Message-driven Beanのトランザクション設定時の注意(Connector 1.5に準拠したリソースアダプタを使用する場合)

TP1インバウンド連携機能を使用したOpenTP1とMessage-driven Bean内のリソースアクセス処理で,グローバルトランザクションを使用する場合,Message-driven Beanのトランザクション管理方法はCMTを選択してください。また,トランザクション属性はRequiredを設定してください。

そのほかのMessage-driven Beanにメッセージを配信するEISとMessage-driven Bean内のリソースアクセス処理で,グローバルトランザクションを使用する場合も,Message-driven Beanのトランザクション管理方法は,CMTを選択してください。また,トランザクション属性はRequiredに設定してください。

ただし,CJMSPリソースアダプタまたはFTPインバウンドアダプタを使用する場合は,Message-driven Beanへのメッセージ配信とMessage-driven Bean内のリソースアクセス処理で,グローバルトランザクションを使用して同期を取ることはできません。このため,CJMSPリソースアダプタまたはFTPインバウンドアダプタからのメッセージを受信する場合,Message-driven Beanのトランザクション管理方法をBMTにするか,またはCMTにしてトランザクション属性をNotSupportedに設定してください。