ナビゲーションをスキップ

WebLogic リソース アダプタ プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

メッセージ インフローとトランザクション インフロー

この節では、WebLogic Server リソース アダプタで着信接続を使用してメッセージ インフローとトランザクション インフローを扱う方法について説明します。

 


メッセージ インフローとトランザクション インフローの概要

メッセージ インフローとは、リソース アダプタを使用した、EIS からアプリケーション サーバへの着信通信のことです。「トランザクション インフロー」で説明するように、着信メッセージは、WebLogic Server とリソース アダプタの外部にあるトランザクション マネージャが制御しているトランザクションの一部である場合もあります。

以下の図は、リソース アダプタにおけるメッセージング インフローとトランザクション インフローの仕組みの概要と、ワーク マネージャが果たす役割を示したものです。

図 7-1 メッセージ インフローとトランザクション インフローのアーキテクチャ

メッセージインフローとトランザクション インフローのアーキテクチャ


 

アーキテクチャのコンポーネント

図 7-1 「メッセージ インフローとトランザクション インフローのアーキテクチャ」には以下のコンポーネントが含まれています。

着信通信のシナリオ

この節では、図に示されている基本的な着信通信のシナリオについて説明します。着信メッセージが EIS で発生し、リソース アダプタに流入して、メッセージ駆動型 Bean によって処理される仕組みを紹介します。関連情報については、図 2-1 「コネクタ アーキテクチャの概要」を参照してください。

一般的で簡略化された着信シーケンスの手順は次のとおりです。

  1. EIS はメッセージをリソース アダプタに送信します。
  2. リソース アダプタはメッセージを調べて、メッセージのタイプを判断します。
  3. リソース アダプタは Work オブジェクトを作成してワーク マネージャに送信できます。ワーク マネージャは以降の作業を別のスレッドで実行し、その間にリソース アダプタは他の着信メッセージを待機し続けることができます。
  4. メッセージ タイプに基づいて、リソース アダプタは (直接または Work インスタンスの一環として)、メッセージの送信先となる正しいメッセージ エンドポイントをルックアップします。
  5. 必要なメッセージ エンドポイントの種類に応じたメッセージ エンドポイント ファクトリを使用して、リソース アダプタはメッセージ エンドポイントを作成します (このエンドポイントは、MDB プールのメッセージ駆動型 Bean インスタンスへのプロキシです)。
  6. リソース アダプタはエンドポイントのメッセージ リスナ メソッドを呼び出して、EIS から受信したメッセージに基づくメッセージ コンテンツをエンドポイントに渡します。
  7. メッセージは以下のいずれの方法で MDB によって処理されます。
    1. MDB がメッセージを直接処理して、その結果をリソース アダプタ経由で EIS に返す。
    2. MDB が他のアプリケーション コンポーネントにメッセージを配信する。
    3. クライアントが取り出せるように MDB がメッセージをキューに入れる。
    4. MDB がクライアント アプリケーションと直接通信する。

 


メッセージ インフローの仕組み

EIS からアプリケーション サーバへの着信通信をサポートするリソース アダプタは、通常以下のものを備えています。

着信メッセージの処理

リソース アダプタでは、さまざまな方法で着信メッセージを処理するとができます。たとえば、以下のような方法があります。

着信メッセージは、メッセージを送信している EIS に結果を返すことができます。応答をすぐに必要とするメッセージのことを同期的と呼びます (送信側システムは応答を待機します)。また、これは要求/応答メッセージングとも呼ばれます。リソース アダプタとの同じやり取りの一部として応答を期待しないメッセージは、非同期的または通知ベースの通信と呼ばれます。リソース アダプタでは、上記の 3 つの送り先のすべてについて、同期または非同期の通信をサポートできます。

リソース アダプタと EIS のトランザクションの機能に応じて、着信メッセージをトランザクション (XA) の一部とすることも、トランザクション非対応にすることもできます。メッセージが XA である場合、トランザクションの制御は、外部トランザクション マネージャ (トランザクション インフロー) またはアプリケーション サーバのトランザクション マネージャによって調整されます。「トランザクション インフロー」を参照してください。

ほとんどの場合、リソース アダプタ内の着信メッセージは、Work インスタンスを介して、別のスレッドでディスパッチされます。リソース アダプタは、行うべき作業を Work インスタンスにラップし、そのインスタンスをアプリケーション サーバのワーク マネージャに送信して実行と管理を委ねます。リソース アダプタは、作業のスケジューリング要件に応じて、doWork()startWork()、または scheduleWork() メソッドを使用して Work インスタンスを送信できます。

独自の通信チャネルとプロトコル

リソース アダプタでは、接続のコンフィグレーション情報を、ResourceAdapter Bean のプロパティとして、または ActivationSpec オブジェクトのプロパティとしてなど、さまざまな手段でデプロイヤに公開できます。または、発信トラフィックと同じ通信チャネルを着信にも使用する方法があります。こうすると、コンフィグレーション情報を発信接続プールにも設定できます。

 


メッセージ エンドポイント (メッセージ駆動型 Bean) へのメッセージ インフロー

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 へのメッセージ配信に関する主な要素は以下のとおりです。

メッセージ駆動型 Bean の詳細については、『WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド』の「メッセージ駆動型 EJB」を参照してください。

MDB とリソース アダプタのデプロイメント時のバインディング

リソース アダプタは、(スタンドアロンの RAR として) 独立してデプロイすることも、エンタープライズ アプリケーション (EAR) の一部としてデプロイすることもできます。MDB も、(スタンドアロンの JAR として) 独立して、またはエンタープライズ アプリケーション (EAR) の一部としてデプロイできます。どちらの場合でも、リソース アダプタからメッセージが配信される MDB を、リソース アダプタにバインドする必要があります。以下の節では、MDB とリソース アダプタのバインディングと、その後のメッセージング処理について説明します。

MDB とリソース アダプタのバインディング

MDB とリソース アダプタをバインドするには、次の手順に従います。

  1. リソース アダプタの weblogic-ra.xml デプロイメント記述子で jndi-name 要素を設定します。「jndi-name」を参照してください。
  2. リソース アダプタの対応する jndi-name 要素で設定された値と一致するように、weblogic-ejb-jar.xml デプロイメント記述子の adapter-jndi-name 要素を設定します。
  3. リソース アダプタが MDB より先にデプロイされるとします (リソース アダプタをデプロイする前に MDB をデプロイすることもできます。その場合、デプロイされた MDB はリソース アダプタがデプロイされるまでポーリングします)。リソース アダプタがデプロイされるときに、ResourceAdapter Bean は指定された名前で JNDI にバインドされます。
  4. MDB がデプロイされます。MDB コンテナは、リソース アダプタをその JNDI 名でルックアップする、アプリケーション サーバ固有の API を呼び出し、仕様で規定されているリソース アダプタの endpointActivation(MessageEndpointFactory, ActivationSpec) メソッドを呼び出します。
  5. MDB コンテナはリソース アダプタに、コンフィグレーション済みの ActivationSpec (コンフィグレーション情報を含む) と、メッセージ エンドポイント インスタンスを作成するためのファクトリを提供します。
  6. リソース アダプタは、後でメッセージ配信に使用するためにこの情報を保存します。それによって、リソース アダプタは、MDB が実装しているメッセージ リスナ インスタンスを知ることができます。この情報は、MDB に配信されるメッセージの種類を判断するために重要です。

メッセージのディスパッチ

メッセージが EIS からリソース アダプタに届くと、リソース アダプタはそのディスパッチ先を判断します。イベントのシーケンスは次のようになります。

  1. メッセージが EIS からリソース アダプタに届きます。
  2. リソース アダプタはメッセージを調べて、内部のテーブルを検索することでそのタイプを判断します。リソース アダプタは、メッセージ タイプが特定のペア (MessageEndpointFactoryActivationSpec) に対応していることを判断します。
  3. リソース アダプタは、メッセージを MDB にディスパッチすべきかどうかを判断します。
  4. (MDB にディスパッチされる) メッセージ エンドポイントのタイプの MessageEndpointFactory を使用し、そのファクトリの createEndpoint() を呼び出すことで、リソース アダプタは MDB インスタンスを作成します。
  5. リソース アダプタは MDB インスタンスのメッセージ リスナ メソッドを呼び出し、必要な情報 (着信メッセージの本文など) を MDB に渡します。
  6. メッセージ リスナが値を返さない場合、メッセージのディスパッチ プロセスは完了します。
  7. メッセージ リスナが値を返す場合、リソース アダプタはその値の処理方法を判断します。EIS との規約に応じて、EIS とさらに通信する場合、またはしない場合があります。

アクティブ化仕様

リソース アダプタに、メッセージ タイプとアクティブ化仕様とのマッピングをコンフィグレーションします。アクティブ化仕様は、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 つのレベルで管理対象オブジェクトを定義できます。

 


トランザクション インフロー

この節では、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」を参照してください。

  1. リソース アダプタは新しい外部トランザクション ID を持つ着信メッセージを受信します。
  2. リソース アダプタは外部トランザクション ID をデコードして、Xid (javax.transaction.xa.Xid) を作成します。
  3. リソース アダプタは ExecutionContext (javax.resource.spi.work.ExecutionContext) のインスタンスを作成して、作成済みの Xid およびトランザクション タイムアウト値を設定します。
  4. リソース アダプタは、着信メッセージを処理してメッセージ エンドポイントに配信するために、新しい Work オブジェクトを作成します。
  5. リソース アダプタは Work オブジェクトと ExecutionContext をワーク マネージャに送信して処理を委ねます。ここで、ワーク マネージャは、トランザクションを登録して WebLogic Server トランザクション マネージャでトランザクションを開始するために必要な作業を実行します。
  6. 外部トランザクション マネージャからの以降の XA 呼び出しは、リソース アダプタを介して送信されて、WebLogic Server トランザクション マネージャに伝達されます。このように、リソース アダプタは、外部トランザクション マネージャと、リソース マネージャとして機能する WebLogic Server トランザクション マネージャとの間で、XA 呼び出しのブリッジの役割を果たします。

ローカルで管理されるトランザクションでのトランザクション インフロー モデルの使用

リソース アダプタが、リソース アダプタと同じサーバ インスタンス内で動作するアプリケーション コンポーネントからリクエストを受け取り、そのリクエストが、リソース アダプタ リクエストと同じトランザクションの一部として MDB に配信される必要がある場合、現在のスレッドのトランザクションからトランザクション ID を取得して ExecutionContext に格納する必要があります。

この場合、WebLogic Server は介在トランザクション マネージャは使用しないで、MDB へのメッセージ配信に使用される作業スレッドにトランザクションを渡します。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次