WebLogic リソース アダプタ プログラマーズ ガイド
![]() |
![]() |
![]() |
![]() |
この節では、WebLogic Server リソース アダプタで着信接続を使用してメッセージ インフローとトランザクション インフローを扱う方法について説明します。
メッセージ インフローとは、リソース アダプタを使用した、EIS からアプリケーション サーバへの着信通信のことです。「トランザクション インフロー」で説明するように、着信メッセージは、WebLogic Server とリソース アダプタの外部にあるトランザクション マネージャが制御しているトランザクションの一部である場合もあります。
以下の図は、リソース アダプタにおけるメッセージング インフローとトランザクション インフローの仕組みの概要と、ワーク マネージャが果たす役割を示したものです。
図 7-1 メッセージ インフローとトランザクション インフローのアーキテクチャ
図 7-1 「メッセージ インフローとトランザクション インフローのアーキテクチャ」には以下のコンポーネントが含まれています。
Work
インスタンス。ActivationSpec
) があります。ActivationSpec
クラスの要件の詳細については、J2CA 1.5 仕様の第 12 章「Message Inflow」を参照してください。ManagedConnectionFactory
に対応し、管理対象接続を管理するために使用されます (この場合は MCF-2。コネクタ コンテナには、1 つの EIS との接続やさまざまな EIS との接続など、各種の接続に対応する複数の接続プールを含めることができます)。MessageEndpointFactory
。EJB コンテナが作成し、リソース アダプタが MessageEndpoint
インスタンス (MDB プールの MDB インスタンス) のプロキシを作成するために使用します。この節では、図に示されている基本的な着信通信のシナリオについて説明します。着信メッセージが EIS で発生し、リソース アダプタに流入して、メッセージ駆動型 Bean によって処理される仕組みを紹介します。関連情報については、図 2-1 「コネクタ アーキテクチャの概要」を参照してください。
Work
オブジェクトを作成してワーク マネージャに送信できます。ワーク マネージャは以降の作業を別のスレッドで実行し、その間にリソース アダプタは他の着信メッセージを待機し続けることができます。
EIS からアプリケーション サーバへの着信通信をサポートするリソース アダプタは、通常以下のものを備えています。
リソース アダプタでは、さまざまな方法で着信メッセージを処理するとができます。たとえば、以下のような方法があります。
ResourceAdapter
Bean の内部で処理する。着信メッセージは、メッセージを送信している EIS に結果を返すことができます。応答をすぐに必要とするメッセージのことを同期的と呼びます (送信側システムは応答を待機します)。また、これは要求/応答メッセージングとも呼ばれます。リソース アダプタとの同じやり取りの一部として応答を期待しないメッセージは、非同期的または通知ベースの通信と呼ばれます。リソース アダプタでは、上記の 3 つの送り先のすべてについて、同期または非同期の通信をサポートできます。
リソース アダプタと EIS のトランザクションの機能に応じて、着信メッセージをトランザクション (XA) の一部とすることも、トランザクション非対応にすることもできます。メッセージが XA である場合、トランザクションの制御は、外部トランザクション マネージャ (トランザクション インフロー) またはアプリケーション サーバのトランザクション マネージャによって調整されます。「トランザクション インフロー」を参照してください。
ほとんどの場合、リソース アダプタ内の着信メッセージは、Work
インスタンスを介して、別のスレッドでディスパッチされます。リソース アダプタは、行うべき作業を Work
インスタンスにラップし、そのインスタンスをアプリケーション サーバのワーク マネージャに送信して実行と管理を委ねます。リソース アダプタは、作業のスケジューリング要件に応じて、doWork()
、startWork()
、または scheduleWork()
メソッドを使用して Work インスタンスを送信できます。
リソース アダプタでは、接続のコンフィグレーション情報を、ResourceAdapter
Bean のプロパティとして、または ActivationSpec
オブジェクトのプロパティとしてなど、さまざまな手段でデプロイヤに公開できます。または、発信トラフィックと同じ通信チャネルを着信にも使用する方法があります。こうすると、コンフィグレーション情報を発信接続プールにも設定できます。
EJB 2.1 より前のメッセージ駆動型 Bean (MDB) は Java Message Service (JMS) のメッセージングのみをサポートしていました。つまり、MDB では onMessage(javax.jms.Message)
メッセージ リスナ メソッドを含む javax.jms.MessageListener
インタフェースを実装する必要がありました。MDB は JMS コンポーネントにバインドされ、JMS サブシステムが MDB のインスタンスの onMessage()
メソッドを呼び出すことで、メッセージを MDB に配信していました。
EJB 2.1 では、着信リソース アダプタからのメッセージ配信に対応するため、JMS のみの MDB の制限はなくなりました。リソース アダプタを介した MDB へのメッセージ配信に関する主な要素は以下のとおりです。
ActivationSpec
オブジェクトメッセージ駆動型 Bean の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」を参照してください。
リソース アダプタは、(スタンドアロンの RAR として) 独立してデプロイすることも、エンタープライズ アプリケーション (EAR) の一部としてデプロイすることもできます。MDB も、(スタンドアロンの JAR として) 独立して、またはエンタープライズ アプリケーション (EAR) の一部としてデプロイできます。どちらの場合でも、リソース アダプタからメッセージが配信される MDB を、リソース アダプタにバインドする必要があります。以下の節では、MDB とリソース アダプタのバインディングと、その後のメッセージング処理について説明します。
MDB とリソース アダプタをバインドするには、次の手順に従います。
ResourceAdapter
Bean は指定された名前で JNDI にバインドされます。endpointActivation(MessageEndpointFactory, ActivationSpec)
メソッドを呼び出します。 メッセージが EIS からリソース アダプタに届くと、リソース アダプタはそのディスパッチ先を判断します。イベントのシーケンスは次のようになります。
MessageEndpointFactory
、ActivationSpec
) に対応していることを判断します。リソース アダプタに、メッセージ タイプとアクティブ化仕様とのマッピングをコンフィグレーションします。アクティブ化仕様は、javax.resource.spi.ActivationSpec
を実装する JavaBean です。リソース アダプタでは、サポートするメッセージ タイプごとに ActivationSpec
クラスを用意します。「着信接続のコンフィグレーション」で説明するように、メッセージ タイプとアクティブ化仕様のマッピングは ra.xml
デプロイメント記述子でコンフィグレーションします。ActivationSpecs
の詳細については、J2CA 1.5 仕様の第 12 章「Message Inflow」を参照してください。
J2CA 1.5 仕様のセクション 12.4.2.3 で説明されているように、リソース アダプタでは、メッセージング スタイルやメッセージ プロバイダに固有の管理対象オブジェクトを表す、オプションの JavaBean クラスの Java クラス名とインタフェース型を提供することができます。ra.xml
および weblogic-ra.xml
デプロイメント記述子ファイルの admin-objects
要素で、管理対象オブジェクトをコンフィグレーションします。発信接続や他の WebLogic リソース アダプタのコンフィグレーション要素と同じように、次の 3 つのレベルで管理対象オブジェクトを定義できます。
default-properties
要素を使用して、リソース アダプタのすべての管理対象オブジェクトに適用するパラメータを指定します。「default-properties」を参照してください。admin-object-group
要素を使用して、ra.xml
デプロイメント記述子で指定された特定の管理対象オブジェクト グループに属する、すべての管理対象オブジェクトに適用するパラメータを指定します。グループで指定されたプロパティは、グローバル レベルで指定されたパラメータをオーバーライドします。「admin-object-group」を参照してください。admin-object-interface
要素 (admin-object-group
要素の下位要素) は、各 admin-object-group
に必須のユニークな要素 (キー) として機能します。weblogic-ra.xml
の admin-object-interface
要素と ra.xml
の admin-object-interface
要素の間には 1 対 1 の関係がなければなりません。
weblogic-ra.xml
デプロイメント記述子の admin-object-instance
要素を使用して、各管理対象オブジェクト グループの下に管理対象オブジェクト インスタンスを指定できます。これは、リソース アダプタに対する個別の管理対象オブジェクトに相当します。admin-object-properties
下位要素を使用して、インスタンス レベルでプロパティを指定することもできます。インスタンス レベルで指定されたプロパティは、グループ レベルやグローバル レベルで指定されたプロパティをオーバーライドします。「admin-object-instance」を参照してください。
この節では、EIS およびリソース アダプタから WebLogic Server にトランザクションが流入する仕組みについて説明します。トランザクション インフロー規約によって、リソース アダプタは、EIS が開始したトランザクション完了呼び出しやクラッシュ回復呼び出しを処理することができます。また、インポートされるトランザクションの ACID プロパティも維持されます。トランザクション インフローの詳細については、J2CA 1.5 仕様の第 14 章「Transaction Inflow」を参照してください。
EIS は、リソース アダプタを介してアプリケーション サーバにメッセージを渡すときに、メッセージの配信や作業を実行するためのトランザクション コンテキストを渡すことができます。着信トランザクションは、リソース アダプタおよびアプリケーション サーバの外部にあるトランザクション マネージャによって制御されます。「メッセージ エンドポイント (メッセージ駆動型 Bean) へのメッセージ インフロー」を参照してください。
リソース アダプタは、トランザクション制御において、EIS とアプリケーション サーバ間のブリッジとして機能することもできます。つまり、リソース アダプタはメッセージを受信し、そのメッセージを、外部トランザクション マネージャとのトランザクションに参加するために XA コールバックとして解釈します。
WebLogic Server は、介在トランザクション マネージャを通じて、外部トランザクション マネージャの XA リソースとして機能できます。WebLogic Server トランザクション マネージャは、そのようなトランザクションの場合、外部トランザクション ID を WebLogic Server 固有のトランザクション ID にマップします。
WebLogic Server トランザクション マネージャは、外部トランザクション マネージャに従属しています。つまり、外部トランザクション マネージャが、トランザクションが成功するかロールバックされるかを最終的に判断します。『WebLogic JTA プログラマーズ ガイド』の「サードパーティ トランザクション マネージャで管理されるトランザクションへの参加」を参照してください。リソース アダプタがそのようなトランザクションに参加する機能は、J2EE 1.5 コネクタ アーキテクチャの一部として、J2EE 標準 API で公開されています。
リソース アダプタが外部のトランザクションに参加する仕組みを以下に例示します。詳細については、J2CA 1.5 仕様のセクション 14.4 「Transaction Inflow Model」を参照してください。
ExecutionContext
(javax.resource.spi.work.ExecutionContext
) のインスタンスを作成して、作成済みの Xid
およびトランザクション タイムアウト値を設定します。リソース アダプタが、リソース アダプタと同じサーバ インスタンス内で動作するアプリケーション コンポーネントからリクエストを受け取り、そのリクエストが、リソース アダプタ リクエストと同じトランザクションの一部として MDB に配信される必要がある場合、現在のスレッドのトランザクションからトランザクション ID を取得して ExecutionContext
に格納する必要があります。
この場合、WebLogic Server は介在トランザクション マネージャは使用しないで、MDB へのメッセージ配信に使用される作業スレッドにトランザクションを渡します。
![]() ![]() |
![]() |
![]() |