Message-driven Beanを実装するときの注意事項を示します。
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でメッセージを受信すると,トランザクションがロールバックしても再配信されなくなります。
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に設定してください。