Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

9.13.3 メッセージインフロー

メッセージインフローは,リソースアダプタとMessage-driven Bean間の規約です。Connector 1.5仕様のリソースアダプタは,EISなどのメッセージプロバイダからのメッセージを受け付けて,アプリケーションサーバ上のメッセージエンドポイント(Message-driven Bean)を動作させることができます。メッセージエンドポイントでは,メッセージプロバイダから送信されたメッセージを,非同期に処理します。

<この項の構成>
(1) 前提条件
(2) メッセージインフローの制御の流れ
(3) メッセージエンドポイントのデプロイとアンデプロイ

(1) 前提条件

メッセージインフローは,リソースアダプタおよびMessage-driven Beanが次の条件を満たす場合に有効になります。

(2) メッセージインフローの制御の流れ

メッセージインフローを使用する場合の制御の流れを次の図に示します。

図9-36 メッセージインフローを使用する場合の制御の流れ

[図データ]

メッセージインフローを使用した場合に実行される制御について説明します。なお,項番は図中の数字と対応しています。

  1. アプリケーションの開始処理によって,リソースアダプタのActivationSpecJavaBeanにプロパティが設定されます。
    Message-driven Beanの属性の<activation-config>に指定した内容が設定されます。
  2. J2EEサーバからendpointActivationメソッドが呼び出されます。これによって,リソースアダプタにメッセージエンドポイントの開始が通知されます。
  3. EISからメッセージが送信されます。
  4. リソースアダプタからMessageEndpointFactoryに対して,createEndpointメッセージが呼び出されます。
  5. MessageEndpointFactoryがエンドポイントのプロキシを生成します。
  6. リソースアダプタからエンドポイントのプロキシに対して,onMessageメソッドなどのメッセージリスナのメソッドが呼び出されます。
  7. エンドポイントのプロキシからMessage-driven Beanに対して,onMessageメソッドなどのメッセージリスナのメソッドが呼び出されます。
  8. 処理が完了したら,J2EEサーバからendpointDeactivationメソッドが呼び出されます。これによって,リソースアダプタにメッセージエンドポイントの停止が通知されます。

(3) メッセージエンドポイントのデプロイとアンデプロイ

ここでは,メッセージエンドポイントのデプロイとアンデプロイで実行される処理について説明します。

●メッセージエンドポイントのデプロイ

メッセージエンドポイントのデプロイ時に実行される処理について説明します。メッセージエンドポイントのデプロイは,リソースアダプタが開始済みの状態で,Message-driven Beanを含むアプリケーションを開始したときに実行されます。

メッセージエンドポイントのデプロイ時の処理を次の図に示します。

図9-37 メッセージエンドポイントのデプロイ時の処理

[図データ]

メッセージエンドポイントのデプロイで実行される処理について説明します。項番は図中の番号に対応しています。

  1. リソースアダプタが開始済みの状態で,Message-driven Beanを含むJ2EEアプリケーションを開始します。
  2. J2EEサーバが,MessageEndpointFactoryを生成します。
    MessageEndpointFactoryは,J2EEサーバが提供するjavax.resource.spi.endpoint.MessageEndpointFactoryのインスタンスです。javax.resource.spi.endpoint.MessageEndpointFactoryはリソースアダプタにエンドポイントのインスタンスを提供するファクトリクラスです。
  3. J2EEサーバが,ActivationSpecを生成します。
    ActivationSpecは,Message-driven Bean(エンドポイント)の開始に必要な情報を設定するJavaBeanです。
  4. J2EEサーバが,ActivationSpecのプロパティを設定します。
    ActivationSpecのプロパティに設定する情報は,Message-driven Beanを含むアプリケーションの属性として設定した情報です。
  5. J2EEサーバが,javax.resource.spi.ResourceAdapter#endpointActivation(MessageEndpointFactory, ActivationSpec)メソッドを呼び出します。
    このとき,引数として,生成・設定したMessageEndpointFactoryとActivationSpecのインスタンスが指定されます。なお,endpointActivationメソッドの呼び出しで例外が発生した場合は,KDJE43174-Eのメッセージが出力され,アプリケーションの開始が中止されます。
  6. リソースアダプタは,5.のメソッドが呼び出されると,メッセージプロバイダからのメッセージ受信に対する準備をします。
●メッセージエンドポイントのアンデプロイ

メッセージエンドポイントのアンデプロイ時に実行される処理について説明します。メッセージエンドポイントのアンデプロイは,Message-driven Beanを含むアプリケーションを停止したときに実行されます。

メッセージエンドポイントのアンデプロイ時の処理を次の図に示します。

図9-38 メッセージエンドポイントのアンデプロイ時の処理

[図データ]

メッセージエンドポイントのアンデプロイで実行される処理について説明します。項番は図中の番号に対応しています。

  1. Message-driven Beanを含むJ2EEアプリケーションを停止します。
  2. J2EEサーバが,javax.resource.spi.ResourceAdapter#endpointDeactivation(MessageEndpointFactory, ActivationSpec)を呼び出します。
    このとき,引数として,デプロイ時に指定したMessageEndpointFactoryとActivationSpecと同じインスタンスが指定されます。なお,このメソッドの呼び出しで例外が発生した場合,メッセージKDJE43175-Wが出力されます。ただし,例外が発生した場合も,アプリケーションの停止処理は続行されます。
  3. リソースアダプタは,2.のメソッドが呼び出されると,メッセージプロバイダからのメッセージ受信終了の処理をします。
●メッセージ配送をするときのリソースアダプタの処理

ここでは,メッセージ配送をするときのリソースアダプタの処理について説明します。

リソースアダプタからのメッセージエンドポイント(Message-driven Bean)の呼び出しは,メッセージエンドポイントのプロキシを使用して実行されます。このプロキシは,リソースアダプタからjavax.resource.spi.endpoint.MessageEndpointFactoryのcreateEndpointメソッドを呼び出すことで得られます。

注意
アプリケーションの停止後にMessageEndpointFactoryのメソッドを呼び出すと,javax.resource.spi.UnavailableException例外がスローされます。このとき,メッセージKDJE43177-Eが出力されます。また,メッセージエンドポイントのメソッドを呼び出した場合は,java.lang.IllegalStateException例外がスローされます。このとき,メッセージKDJE43177-Eが出力されます。