トランザクション補正およびビジネス・アクティビティー・サポート

ビジネス・アクティビティー とは、タスクの結果が一致するように、一 緒にリンクされているタスクの集合です。 アトミック・トランザクションとは異なり、E メールの送信のようなアクティビティーは、 アトミックにロールバックすることが困難または不可能であるため、エラー発生時に補正処理が必要です。 WebSphere® Application Server ビジネス・アクティビティー・サポートは、ビジネス・アクティビティー有効範囲 を介してこの補正機能を提供します。

ビジネス・アクティビティー・サポートを使用する場合

ビジネス・アクティビティー・サポートは、アプリケーションの補正が必要な場合に使用します。 アプリケーションは、操作をアトミックにロールバックできない場合に補正が必要になります。 一般に、このシナリオは以下のいずれかの理由によるものです。
  • アプリケーションが複数の拡張アーキテクチャー (XA) でないリソースを使用しています。
  • アプリケーションが複数のアトミック・トランザクションを使用しています。 例えば、エンタープライズ Bean で、 コンテナー・トランザクション・デプロイメント記述子の「トランザクション」フィールドの設定が「新しい値が必要」になっている場合。
  • アプリケーションがグローバル・トランザクションで実行されていません。
次の図は、ビジネス・アクティビティー・サポートを使用する単純な Web サービス・アプリケーションを示しています。 小売業者、倉庫および製造サービスは、WebSphere Application Server 以外の環境で実行されています。小売業者サービスは、WebSphere Application Server で実行される供給業者サービスを呼び出します。供給業者サービスは、倉庫および製造サービスにタスクを代行させます。供給業者サービスの実装には、ステートレス・セッション Bean が含まれます。この Bean は、倉庫および製造サービスに関連し、補正可能な作業を実行する他のステートレス・セッション Bean を呼び出します。 これらの他のセッション Bean には、それぞれ補正ハンドラー があります。 これは、実行時にアプリケーション・コンポーネントに関連付けられ、 E メールの再送信などの補正アクティビティーを実行するロジックです。
説明テキストを参照してください。

アプリケーション設計

ビジネス・アクティビティー・コンテキストは、 アプリケーション・メッセージとともに伝搬します。 そのため、同じサーバー内で同じ場所に配置されていないアプリケーション・コンポーネント 間で分散することができます。 アトミック・トランザクション・コンテキストとは異なり、 ビジネス・アクティビティー・コンテキストは、同期 (ブロッキング) 呼び出し応答メッセージと非同期片方向メッセージの両方で伝搬します。 ビジネス・アクティビティー有効範囲で実行されるアプリケーション・コンポーネントは、コンポーネント独自の処理が完了する前に、コンポーネントが開始した非同期作業が完了していることを確認する責任を負います。 応答不要送信メッセージ・パターンを使用して非同期作業を開始するアプリケーションでは、 ビジネス・アクティビティー有効範囲を使用できません。これは、そのようなアプリケーションには、この非同期処理が完了したかどうかを検出する手段がないためです。

ビジネス・アクティビティー機能を使用できるのは、コンテナー管理トランザクションが存在するエンタープライズ Bean だけです。ビジネス・アクティビティー有効範囲を活用するエンタープライズ Bean では、 Web サービス・インターフェースを提供できますが、標準エンタープライズ Bean のローカルまたはリモート Java™ インターフェースも提供できます。 ビジネス・アクティビティー・コンテキストは、標準の、相互運用可能な Web Services ビジネス・アクティビティー (WS-BA) CoordinationContext エレメントを使用して、Web サービス・メッセージ内で伝搬されます。WebSphere Application Server は、Web サービスが使用されていないときに、エンタープライズ Bean への RMI 呼び出しでも、ビジネス・アクティビティー・コンテキストを伝搬します。しかし、このような形式のコンテキストは、WebSphere Application Server 以外の環境とは相互運用できません。ビジネス内部でアプリケーションの補正が必要な場合は、この同種シナリオを使用することもあります。 異機種の環境でビジネス・アクティビティーの補正を使用する場合は、 アプリケーション・コンポーネントを Web サービスとして公開します。

ビジネス・アクティビティー・コンテキストは、ファイアウォール全体と WebSphere Application Server ドメイン外部に伝搬できます。このような伝搬を実現するために使用するトポロジーは、 ビジネス・アクティビティー・トランザクションの高可用性およびアフィニティーの振る舞いに影響することがあります。

アプリケーションの開発とデプロイメント

WebSphere Application Server は、ビジネス・アクティビティー有効範囲を作成し、補正ハンドラーとビジネス・アクティビティー有効範囲を関連付けるための、プログラミング・モデルを提供します。WebSphere Application Server は、補正データを指定し、ビジネス・アクティビティーの状況を検査したり、変更するための、アプリケーション・プログラミング・インターフェースも提供します。ビジネス・アクティビティー・サポートを使用するには、 特定のアプリケーション・デプロイメント記述子を適切に設定し、 必要に応じて補正ハンドラー・クラスを提供する必要があります。 さらに、アプリケーションを実行するサーバーでビジネス・アクティビティー・サポートを使用可能にする必要があります。
注: アプリケーションは、WebSphere Application Server バージョン 6.1 以降にデプロイされている場合に限り、ビジネス・アクティビティー・サポートを活用できます。WebSphere Application Server バージョン 6.0.x サーバーが含まれているクラスターに、アプリケーションをデプロイしている場合、そのアプリケーションは、ビジネス・アクティビティー・サポートを使用することができません。

ビジネス・アクティビティー有効範囲

ビジネス・アクティビティー有効範囲は、WebSphere Application Server のメイン作業単位 (グローバル・トランザクション、アクティビティー・セッション、またはローカル・トランザクション内包 (LTC)) の有効範囲です。ビジネス・アクティビティー有効範囲は、新しい作業単位 (UOW) ではなく、既存の主要 UOW の属性です。したがって、ビジネス・アクティビティー有効範囲と UOW の間には 1 対 1 の関係が存在します。

WS-BA デプロイメントでは、UOW は、以下のようにコンテナーで管理する必要があります。
  • UOW は、グローバル・トランザクションを作成するコンテナー管理のトランザクション (CMT) エンタープライズ Bean にすることができます。
  • UOW は、ローカル・トランザクション内包 (LTC) にすることができます。この場合、コンテナーは、リソース・マネージャー・ローカル・トランザクション (RMLTs) の開始と終了を担います。 つまり、トランザクションのデプロイメント記述子の属性では、Local Transaction 属性 Resolver は、ContainerAtBoundary に設定する必要があります。 WS-BA を使用する場合、Resolver 属性を Application に設定することはできません。
主要 UOW のビジネス・アクティビティー有効範囲は、主要 UOW に関連します。ビジネス・アクティビティー有効範囲に関連した UOW で実行されるコンポーネントが 別のコンポーネントを呼び出すと、その要求はビジネス・アクティビティー有効範囲を伝搬します。 新規コンポーネントによって実行された作業は、呼び出し側コンポーネントと同じビジネス・アクティビティー有効範囲に関連付けられます。 呼び出し先コンポーネントは、新規 UOW を作成できます。 例えば、エンタープライズ Bean の「トランザクション」設定が「新しい値が必要」である場合、 または呼び出し側コンポーネントと同じ UOW で実行されている場合です。 新規 UOW が開始すると、新規ビジネス・アクティビティー有効範囲が作成され、新規 UOW に関連付けられます。 新規作成されたビジネス・アクティビティー有効範囲は、呼び出し側 UOW に関連したビジネス・アクティビティー有効範囲の子です。 次の図では、UOW1 で実行されている EJB1a は、 2 つのコンポーネントを呼び出します。 これらは、UOW1 で実行される EJB1b と、新規 UOW (UOW2) を作成する EJB2 です。 エンタープライズ Bean (EJB1b) は、別のエンタープライズ Bean (EJB3) を呼び出します。 これにより、別の新しい UOW (UOW3) が作成されます。 新規 UOW はそれぞれ、UOW が既にビジネス・アクティビティー有効範囲 BAScope1 に関連している呼び出し側コンポーネントによって作成されるため、 新規作成された UOW は、新しい内部ビジネス・アクティビティー有効範囲 BAScope2 および BAScope3 に関連付けられます。
説明については、テキストを参照してください。

内部ビジネス・アクティビティー有効範囲は、外部ビジネス・アクティビティー有効範囲が完了する前に完了する必要があります。 内部ビジネス・アクティビティー有効範囲 (例えば BAScope2) は、 外部ビジネス・アクティビティー有効範囲 (この場合は BAScope1) に関連しています。 各ビジネス・アクティビティー有効範囲は、関連した UOW が正常に終了した場合はクローズし、 関連した UOW が失敗した場合は補正するよう、指示されます。 BAScope2 が正常に完了すると、BAScope2 が所有するアクティブな補正ハンドラーは BAScope1 に移動し、 BAScope1 の完了指示と同じ方法 (補正またはクローズ) で指示されます。 BAScope2 が失敗すると、アクティブな補正ハンドラーは自動的に補正され、 外部の BAScope1 には何も移動しません。 関連した UOW が失敗した結果、内部ビジネス・アクティビティー有効範囲が失敗すると、 外部 UOW で実行されている呼び出し側アプリケーション・コンポーネントにアプリケーション・サーバー例外がスローされます。

例えば、内部 UOW が失敗すると、TransactionRolledBackException 例外がスローされる場合があります。 呼び出し側アプリケーションが、例えば、呼び出し先コンポーネントを再度試行したり、別のコンポーネントを呼び出したりすることによってこの例外を処理できる場合、呼び出し側 UOW と関連するビジネス・アクティビティー有効範囲は、内部ビジネス・アクティビティー有効範囲が失敗しても、正常に完了できます。 アプリケーション設計で呼び出し側 UOW が失敗し、 関連したビジネス・アクティビティー有効範囲を補正する必要がある場合、 呼び出し側アプリケーション・コンポーネントは、UOW を失敗させる必要があります。 これは、例えば、失敗した UOW からのシステム例外を、コンテナーで処理できるようにすることによって行います。

外部ビジネス・アクティビティー有効範囲が完了すると、それが正常に行われたか失敗したかによって、外部ビジネス・アクティビティー有効範囲が所有するアクティブな補正ハンドラーの完了指示 (クローズまたは補正) が決まります。これには、正常に完了した内部ビジネス・アクティビティー有効範囲によってプロモートされたものが含まれます。外部ビジネス・アクティビティー有効範囲は、正常に完了すると、すべてのアクティブな補正ハンドラーを強制的にクローズします。 外部ビジネス・アクティビティー有効範囲は、失敗すると、すべてのアクティブな補正ハンドラーに強制的に補正させます。

次の表は、この補正の振る舞いについての要約です。
表 1. 単一のビジネス・アクティビティー有効範囲の補正の振る舞い. この表は、内部と外部のビジネス・アクティビティー有効範囲について考えられる成功と失敗の組み合わせ、および各組み合わせに関連付けられた補正の振る舞いをリストしたものです。
内部ビジネス・アクティビティー有効範囲 外部ビジネス・アクティビティー有効範囲 補正の振る舞い
成功 成功 内部ビジネス・アクティビティー有効範囲が所有する補正ハンドラーは、 外部 UOW の完了を待機します。 外部 UOW が成功すると、外部ビジネス・アクティビティー有効範囲はすべての補正ハンドラーを強制的にクローズします。
失敗 成功 内部ビジネス・アクティビティー有効範囲が所有するアクティブな補正ハンドラーは補正されます。 外部 UOW に例外がスローされます。 この例外がキャッチされると、外部 UOW が成功したときに、 外部ビジネス・アクティビティー有効範囲は残りのアクティブな補正ハンドラーをすべて強制的にクローズします。
失敗 失敗 内部ビジネス・アクティビティー有効範囲が所有するアクティブな補正ハンドラーは補正されます。 外部 UOW に例外がスローされます。 この例外がキャッチされない場合、外部ビジネス・アクティビティー有効範囲は失敗します。 未処理の例外または他の何らかの理由により、外部ビジネス・アクティビティー有効範囲が失敗すると、 残りのアクティブな補正ハンドラーは、すべて補正されます。
成功 失敗 内部ビジネス・アクティビティー有効範囲が所有する補正ハンドラーは、 外部 UOW の完了を待機します。 外部 UOW が失敗すると、外部ビジネス・アクティビティー有効範囲は、 すべての補正ハンドラーを強制的に補正させます。

関連したビジネス・アクティビティー有効範囲が存在する UOW が完了する場合、 ビジネス・アクティビティー有効範囲は、常に関連する UOW と同じ指示で完了します。 ビジネス・アクティビティー有効範囲の指示に影響を与えることができる唯一の方法は、 関連した UOW に影響を与えることです。 これは、ビジネス・アクティビティー API の setCompensateOnly メソッドを使用して行うことができます。

ビジネス・アクティビティー API から呼び出されるメソッドによっては、トランザクション UOW 内部に登録されている補正ハンドラーは、最初は非アクティブである場合があります。 この状態で非アクティブなハンドラーは、そのハンドラーが宣言されている UOW が正常に完了したときにアクティブになります。 トランザクション UOW の外部に登録されている補正ハンドラーは、常に即時にアクティブになります。 詳しくは、ビジネス・アクティビティー API のトピックを参照してください。

図に示すビジネス・アクティビティー有効範囲は、それぞれビジネス・アクティビティーを表します。 例えば、BAScope1 で実行されている外部ビジネス・アクティビティーは、 休暇の予約のシナリオで、BAScope2 はフライトの予約アクティビティー、BAScope3 はホテルの予約であるとします。 フライトまたはホテルの予約のいずれかが失敗すると、 デフォルトで休暇の予約全体も失敗します。 あるいは、例えば、フライトの予約が失敗した場合、アプリケーションで、異なる航空会社を表す別のコンポーネントを使用して予約しようとすることもあります。休暇の予約全体が失敗した場合、 アプリケーションは補正ハンドラーを使用して、既に予約に成功したフライトやホテルを取り消します。

アプリケーション・コンポーネントによるビジネス・アクティビティー有効範囲の使用

アプリケーション・コンポーネントは、デフォルトではビジネス・アクティビティー有効範囲を使用しません。 WebSphere Application Server アセンブリー・ツールを使用して、 ビジネス・アクティビティー有効範囲の使用を指定し、コンポーネントの補正ハンドラー・クラスを識別する場合は、以下のようにします。
デフォルト構成
ビジネス・アクティビティー有効範囲が構成されていないコンポーネントが受信した要求に、 ビジネス・アクティビティー・コンテキストが存在する場合、 コンテキストはコンテナーによって保管されますが、ターゲット・コンポーネントのメソッド範囲で使用されることはありません。 新規のビジネス・アクティビティー有効範囲は、作成されません。 ターゲット・コンポーネントが別のコンポーネントを呼び出すと、 保管されたビジネス・アクティビティー・コンテキストが伝搬され、他の補正コンポーネントで使用可能になります。
ビジネス・アクティビティー有効範囲でのエンタープライズ Bean メソッドの実行
着信要求にあるビジネス・アクティビティー・コンテキストは、 コンテナーによって受信され、ターゲット・コンポーネントで使用可能になります。 ターゲット・メソッド用に新規 UOW が作成される (例えば、 エンタープライズ Bean のメソッドで、「トランザクション」「新しい値が必要」に設定されていることによって) 場合、 受信されたビジネス・アクティビティー有効範囲は、新規作成のビジネス・アクティビティーに対する外部ビジネス・アクティビティー有効範囲になります。 UOW が呼び出し側コンポーネントから伝搬され、 メソッドによって使用されると、受信されたビジネス・アクティビティー有効範囲はメソッドによって使用されます。 ビジネス・アクティビティー有効範囲が呼び出し上に存在しない場合、 新規ビジネス・アクティビティー有効範囲が作成され、メソッドによって使用されます。
エンタープライズ Bean の起動時にビジネス・アクティビティー有効範囲を作成するには、 ビジネス・アクティビティー有効範囲でエンタープライズ Bean メソッドを実行するようにエンタープライズ Bean を構成する必要があります。 起動時に新規 UOW を作成するように指定して、 呼び出されるメソッドのデプロイメント記述子を構成することも必要になります。 詳しくは、WS-BA サポートを使用するアプリケーションの作成に関するトピックを参照してください。

トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cjta_wsbascope
ファイル名:cjta_wsbascope.html