WebSphere Application Server - Express, Version 6.1   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows, Windows Vista

             目次と検索結果のパーソナライズ化

ビジネス・アクティビティー API

ビジネス・アクティビティー・アプリケーション・プログラミング・インターフェース (API) を使用して、アプリケーション・コンポーネントのビジネス・アクティビティーおよび補正ハンドラーを作成し、障害時のアクティビティーの補正に 必要なデータを記録します。

概要

ビジネス・アクティビティー・サポートは、 UserBusinessActivity API、CompensationHandler インターフェース、および 2 つの例外 RetryCompensationHandlerException および CompensationHandlerFailedException を提供します。 UserBusinessActivity インターフェースは、アプリケーション・サーバー Java Naming and Directory Interface (JNDI) (java:comp/websphere/UserBusinessActivity) から検索できます。 以下に例を示します。
InitialContext ctx = new InitialContext();
UserBusinessActivity uba = (UserBusinessActivity) ctx.lookup(“java:comp/websphere/UserBusinessActivity”);

アプリケーション・コンポーネントが、障害時に補正を必要とする可能性がある作業を 実行中である場合、デプロイ済みアプリケーションの一部としてアセンブルされている補正ハンドラー・クラスを 提供する必要があります。この新規 Java クラスは、 com.ibm.websphere.wsba.CompensationHandler インターフェースを実装する必要があります。 これは、サービス・データ・オブジェクト (SDO) のパラメーターを取る close メソッド および compensate メソッドをサポートします。通常のアプリケーション処理中に、 アプリケーションは、setCompensationDataImmediate メソッドまたは setCompensationDataAtCommit メソッドに対して 1 つ以上の呼び出しを行い、実行される作業の現在の状態を表す SDO を引き渡すことができます。

ルート・ ビジネス・アクティビティーが関連する、基礎となる作業単位 (UOW) が完了すると、 すべての登録済み補正器は完了するように調整されます。完了の間に、 compensate または close のいずれかが 補正ハンドラー上で呼び出され、パラメーターとしてアプリケーション・コンポーネントによって記録された 最新の補正データを引き渡します。ご使用の補正ハンドラー実装は、 SDO DataObject に保管されているデータを認識できる必要があります。 補正ハンドラーは、このデータを使用して、エンタープライズ Bean が実行する作業の性質を決定し、 例えば、障害時にデータベース行に行った変更を元に戻すなど、適切な方法で 補正またはクローズできる必要があります。Rational Application Developer などの アセンブリー・ツールを使用して、補正ハンドラーと アプリケーション・コンポーネントを関連付けます。

アクティブおよび非アクティブな補正ハンドラー

ビジネス・アクティビティー範囲内で 補正が必要な可能性のあるコードを実行するアプリケーション・コンポーネントに対して、 CompensationHandler インターフェースを実装します。アプリケーションが UserBusinessActivity API を呼び出して 補正データを指定すると、CompensationHandler オブジェクトは、そのアプリケーションが実行している ビジネス・アクティビティー範囲で暗黙的に登録されます。 補正ハンドラーは、登録先のトランザクション UOW に応じて、 アクティブまたは非アクティブの 2 つの状態のいずれかにすることができます。 トランザクション UOW 内に登録される補正ハンドラーは最初、 トランザクションがコミットするまで非アクティブである場合があります。 この時点で、補正ハンドラーはアクティブになります (以下を参照してください)。トランザクション UOW の外側で 登録される補正ハンドラーは常に、即時にアクティブになります。

ビジネス・アクティビティーは完了すると、 アクティブな補正ハンドラーのみを駆動します。そのビジネス・アクティビティーに関連付けられている 非アクティブな補正ハンドラーは破棄され、駆動されることはありません。

補正データのロギング

ビジネス・アクティビティー API は、 アプリケーションが補正データを記録できるようにする 2 つのメソッドを指定します。 このデータは、ビジネス・アクティビティーが完了すると、処理中に 補正ハンドラーに対して使用可能になります。アプリケーションは、トランザクションを ビジネス・アクティビティーの一部とするのかどうかに応じて、これらのメソッドのいずれかを 呼び出します。

setCompensationDataAtCommit()
アプリケーションが、スレッド上でグローバル・トランザクションを期待する場合は、 このメソッドを呼び出します。
  • グローバル・トランザクションがスレッド上に存在する場合、CompensationHandler オブジェクトは 最初は非アクティブになります。グローバル・トランザクションが失敗すると、アトミックな方法で トランザクション・コンテキスト内で行われるトランザクション作業をロールバックし、 ビジネス・アクティビティーを駆動して、他の完了済み UOW を補正します。補正ハンドラーを 呼び出す必要はありません。グローバル・トランザクションが正常にコミットする場合、 補正ハンドラーはアクティブになります。 これは、ビジネス・アクティビティー全体が失敗する場合に、グローバル・トランザクションによって 完了する永続作業を補正するために必要となるためです。setCompensationDataAtCommit メソッドは、 この補正機能を実行するように CompensationHandler インスタンスを構成します。
  • このメソッドが呼び出されたときにグローバル・トランザクションが存在しない場合、 補正ハンドラーは即時にアクティブになります。
例えば、前の例と同じビジネス・アクティビティー・インスタンスを使用します。
DataObject compensationData = doWorkWhichWouldNeedCompensating();
uba.setCompensationDataAtCommit(compensationData); 
setCompensationDataImmediate()

アプリケーションが、スレッド上でグローバル・トランザクションを期待しない場合は、 このメソッドを呼び出します。

setCompensationDataImmediate メソッドは、 メソッドが呼び出される時の現行 UOW コンテキストに関係なく、CompensationHandler インスタンスを 即時にアクティブにします。補正ハンドラーは、ビジネス・アクティビティーの完了中に、 常に参加することができます。

setCompensationDataImmediate メソッドの役割は、 非トランザクション作業 (言い換えれば、 グローバル・トランザクションの内側または外側のいずれかで実行できるが、 トランザクションによって管理されていない作業) を補正することです。例えば、 E メールの送信などです。ビジネス・アクティビティー内で障害が発生した場合、 この非トランザクション作業が常に補正されるように、補正ハンドラーは即時に アクティブにならなければなりません。

これらの 2 つの補正データ・ロギング・メソッドは、同じエンタープライズ Bean 内で 呼び出される場合には同じ CompensationHandler クラスを使用しますが、 実行時に 2 つの別個の CompensationHandler クラスのインスタンスを作成します。 そのため、メソッドのアクションは相互に排他的です。 メソッドの 1 つを呼び出しても、もう一方のメソッドによって実行される作業が上書きされることはありません。

パラメーターとして null を 渡すようなメソッドが 呼び出されたときに、CompensationHandler インスタンスが 同じメソッドによってビジネス・アクティビティーに 既に追加されている 場合、CompensationHandler インスタンスは、 そのビジネス・アクティビティーから除去され、 ビジネス・アクティブの完了時には クローズや補正が行われません。

前述したように、 補正データ・ロギング・メソッドが、ビジネス・アクティビティーを使用してエンタープライズ Bean によって はじめて呼び出されるときに、ビジネス・アクティビティー・サポートは そのビジネス・アクティビティーに CompensationHandler インスタンスを追加します。同時に、 J2EE コンテキストのスナップショットが取られ、補正データに記録されます。ビジネス・アクティビティーの 完了時に、ビジネス・アクティビティーに追加されたすべての補正ハンドラーは、 compensate または close に対して駆動されます。 CompensationHandler クラスにユーザーが作成するコードは、 それ以前のスナップショットで取り込まれた、 同じ J2EE コンテキストで実行できることが保証されています。

ビジネス・アクティビティー API で使用可能なメソッドについて詳しくは、 WebSphere Application Server アプリケーション・プログラミング・インターフェース参照情報を参照してください。



関連概念
WebSphere Application Server での Web Services Business Activity サポート
トランザクション補正およびビジネス・アクティビティー・サポート
関連タスク
ビジネス・アクティビティー・サポートを使用するためのサーバーの構成
ビジネス・アクティビティー・サポートを使用するアプリケーションの作成
トランザクション・サービスの使用
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 6:25:35 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/rjta_wsba_api.html