アプリケーション連携実行基盤では、アプリケーションの連携を行う手段としてメッセージを使用します。
メッセージ保証機能では、アプリケーション連携に使用するメッセージの送受信と業務処理で使用する業務用データベースの更新を一意な処理単位として、システムダウンやアプリケーション異常が発生しても、一貫性を保証する機能を提供します。
なお、メッセージ保証機能では、メッセージの順序性は保証されません。データベースの更新順番を厳守するなどの理由により、メッセージの順序性保証が必要な業務に適用する場合は、アプリケーションや運用により順序性を保証してください。
メッセージ保証機能の概要図を以下に示します。
■メッセージおよび業務用データベースの一貫性の保証
メッセージ保証機能は、トランザクションを使用してメッセージの送受信および業務用データベースの一貫性を保証します。なお、システムダウンなどの異常発生時にもメッセージを消失することなく一貫性を保証するため、メッセージの格納先は、メッセージ格納DBを使用します。
メッセージ格納DBにメッセージを格納し、データベース製品のローカルトランザクションを使用してメッセージの一貫性を保証します。本方式では、メッセージの受信トリガとしてDB連携用のイベントチャネルを使用し、メッセージ本体は業務用データベース内に作成するメッセージ格納DBに格納します。本方式を“メッセージとDBの整合性保証機能”と呼びます。メッセージとDBの整合性保証機能を利用する場合、業務用データベースに対する操作とメッセージ格納DBに対する操作を同一のコネクションで実行する必要があるため、メッセージ格納DBのデータベースリソース定義は、業務用データベースのデータベースリソース定義と同一の定義を使用します。
メッセージの格納先種別とその組み合わせによるメッセージ保証機能の一貫性保証範囲を、以下に示します。
メッセージ格納先種別 | 送信 | ||||
---|---|---|---|---|---|
キュー | メッセージ格納DB | ||||
揮発運用のイベントチャネル | 不揮発運用のイベントチャネル | ||||
受信 | キュー | 揮発運用のイベントチャネル | × | × | × |
不揮発運用のイベントチャネル | × | × | × | ||
メッセージ格納DB | × | × | ○ |
○: 一貫性保証できます。
×: 一貫性保証できません。
注意
メッセージの格納先にメッセージ格納DBを使用し、ローカルトランザクションでメッセージと業務用データベースの一貫性を保証するためには、アプリケーション連携実行基盤の実行環境と同一のワークユニット上でアプリケーションを動作させる必要があります。業務処理実行アプリケーションから他のワークユニット上で動作するEJBアプリケーション、WebアプリケーションおよびCORBAアプリケーションなどを呼び出す運用の場合、一貫性の保証はアプリケーションで行います。
運用中にエラーが発生した場合や補償ルートのメッセージが発行された場合は、該当するメッセージ処理はロールバックされ、再びメッセージ受信からトランザクションが開始された後に、異常処理定義で指定した後処理や補償ルートのメッセージが発行されます。そのため、エラー発生時や補償ルートのメッセージの発行時でもメッセージの一貫性は保証されます。
補償ルートでは、メッセージの一貫性は保証されますが、メッセージの順序性は保証されません。
■メッセージ保証機能とトランザクション
メッセージ保証機能は、メッセージおよび業務用データベースの一貫性をデータベースのローカルトランザクションにより保証します。業務処理実行アプリケーションの言語により以下の設定を行ってください。
◆(1)COBOLの業務処理実行アプリケーション
メッセージ保証機能を使用する場合、データベースアクセス管理機能を使用する必要があります。アプリケーションが、業務用データベースをアクセスするデータベースリソース定義をメッセージ格納DBのデータベースリソース定義として使用することで、同一のトランザクションでメッセージと業務用データベースの更新を同期することができます。設定方法の詳細については、“Interstage Business Application Server セットアップガイド”を参照してください。
◆(2)Javaの業務処理実行アプリケーション
アプリケーション連携実行基盤の実行環境のベースとなる、EJB(Message-driven Bean)のトランザクション管理およびトランザクション属性によるメッセージ保証を以下に示す通りに設定してください。
アプリケーション連携実行基盤の実行環境のベースとなるEJB(Message-driven Bean) | |||
---|---|---|---|
トランザクション | 一貫性保証 | 説明 | |
管理種別 | 属性 | ||
CMT | Mandatory | 指定不可 | Message-driven Beanでは指定できません。 |
Required | ○ | 一貫性を保証します。 | |
Supports | 指定不可 | Message-driven Beanでは指定できません。 | |
RequiresNew | 指定不可 | Message-driven Beanでは指定できません。 | |
NotSupported | × | トランザクションにメッセージの受信が含まれないため一貫性を保証できません。 | |
Never | 指定不可 | Message-driven Beanでは指定できません。 | |
BMT | - | × | トランザクションにメッセージの受信が含まれないため一貫性を保証できません。 |
○:保証します
×:保証できません
CMT:Container-Managed Transaction
BMT:Bean-Managed Transaction
アプリケーション連携実行基盤の実行環境のベースとなる、EJB(Message-driven Bean)より呼び出す業務処理実行アプリケーションから、EJBアプリケーションを呼び出す場合のトランザクション管理種別、およびトランザクション属性によるメッセージ保証を、以下に示します。
業務処理実行アプリケーションから呼び出すEJBアプリケーション | ||||
---|---|---|---|---|
トランザクション | 一貫性保証 | 説明 | ||
管理種別 | 属性 | |||
CMT | Mandatory | ○ | 呼び出し元のトランザクションに業務処理も含まれて一貫性が保証されます。 | |
Required | × | 呼び出し元のトランザクションが開始されていない場合は、別トランザクションとして開始されるため保証できません。 | ||
Supports | × | 呼び出し元のトランザクションが開始されていない場合は、トランザクションが開始されていない状態になるため保証できません。 | ||
RequiresNew | × | 呼び出し元のトランザクションを中断するため保証できません。 | ||
NotSupported | × | 呼び出し元のトランザクションを中断するため保証できません。 | ||
Never | × | 例外が返るため保証できません。 | ||
BMT | - | × | 呼び出し元のトランザクションと別トランザクションになるため保証できません。 |
○:保証します
×:保証できません
CMT:Container-Managed Transaction
BMT:Bean-Managed Transaction
メッセージ保証機能では、業務処理実行アプリケーションから呼び出すEJBアプリケーション(Entity Bean)の種類であるCMP(Container-managed persistence)や、BMP(Bean-managed persistence)での一貫性を保証します。
注意
アプリケーション連携実行基盤の実行環境のベースとなるEJB(Message-driven Bean)では、EJBのトランザクション管理種別は“Container”を、トランザクション属性は“Required”を指定してください。
業務処理実行アプリケーションから呼び出すEJBアプリケーション(Entity BeanやSession Bean)では、EJBのトランザクション管理種別は“Container”を、トランザクション属性は“Mandatory”を指定してください。