Cosminexus サービスプラットフォーム システム構築・運用ガイド

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

5.4.4 MDB(WS-R)を使ったサービス部品呼び出し

<この項の構成>
(1) Cosminexus RMとの関係
(2) サービス部品呼び出し時のメッセージの流れ
(3) 同期のサービス部品を呼び出す場合の応答電文の扱い
(4) MDB(WS-R)使用時のトランザクション
(5) デッドメッセージキュー
(6) MDB(WS-R)で使用するキューの名称と個数

(1) Cosminexus RMとの関係

非同期のサービス部品を呼び出すには,Cosminexus RMを使用します。また,サービスリクエスタ側の転送キューとHCSCサーバ側のローカルキューの間,そしてHCSCサーバ側の転送キューとサービス部品側のローカルキューの間はWS-R(WS-Reliability)を使用します。Cosminexus RMは,CosminexusのEJBコンテナ上で動作します。Cosminexus RMとの関係を次の図に示します。

図5-28 Cosminexus RMとの関係

[図データ]

(2) サービス部品呼び出し時のメッセージの流れ

HCSCサーバの標準受付は,MDB(Message Driven Bean)で動作し,HCSCサーバ側のローカルキューを監視しています。HCSCサーバ側のローカルキューにメッセージが送信されると,標準受付はメッセージを取り出してサービス部品を呼び出します。

サービスリクエスタ側の転送キューには,HCSCサーバのあて先アドレスおよび転送先のローカルキューのキュー名を設定します。サービスリクエスタからは,サービスリクエスタ側の転送キューに対して,JMSメッセージを送信して,HCSCサーバの標準受付を呼び出します。

サービス部品を呼び出すときには,サービスアダプタ側の転送キューに送信します。そして,転送キューは,開発環境のサービスアダプタ定義画面(基本画面のアドレスに指定した転送先のキュー名および詳細画面の宛先URL)で定義したサービス部品側のローカルキューへ送信します。サービス部品をMDBで作成することで,サービス部品側のローカルキューに送信されたメッセージを取り出して処理できます。非同期(MDB(WS-R))の場合のあて先の指定を次の図に示します。

図5-29 非同期(MDB(WS-R))の場合のあて先の指定

[図データ]

転送キューを作成したり,JMSメッセージを生成したりする手順については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。

 

サービスリクエスタからサービス部品を呼び出すときに転送キューに送信するJMSメッセージの形式は,標準受付のインターフェースになります。

JMSメッセージのペイロード(ヘッダを除いたデータ本体)に設定した内容が,ユーザ電文としてサービス部品に伝わります。そのため,サービスリクエスタから標準受付を呼び出すときに,サービス部品側の電文フォーマットに合わせた要求電文を事前に作成し,ペイロードに設定してメッセージを送信します。非同期サービス部品呼び出し時のユーザ電文とJMSメッセージの関係を次の図に示します。

図5-30 非同期サービス部品呼び出し時のユーザ電文とJMSメッセージの関係

[図データ]

 

サービスリクエスタからビジネスプロセスを呼び出すときは,要求電文はビジネスプロセスの受付アクティビティに定義した電文フォーマットになります。サービスリクエスタ内でビジネスプロセスの受付アクティビティで定義されている要求電文の電文フォーマットに合わせた電文を作成し,ペイロードに設定してメッセージを送信します。ビジネスプロセスを呼び出す場合のユーザ電文とJMSメッセージの関係を次の図に示します。

図5-31 ビジネスプロセスを呼び出す場合のユーザ電文とJMSメッセージの関係

[図データ]

(3) 同期のサービス部品を呼び出す場合の応答電文の扱い

標準受付(MDB(WS-R))は,非同期の要求電文用の標準受付で,基本的にサービス部品からの応答がない場合に使用します。しかし,非同期受付(MDB(WS-R))から同期のサービス部品(WebサービスまたはSessionBeanなど)やビジネスプロセスを要求した場合,同期のサービス部品から応答が返ることがあります。そのため,HCSCサーバでは応答をReplyToキューに送信する手段を提供しています。

ReplyToキューを利用するには,HCSCサーバの環境構築時にHCSCサーバ側に転送キュー(ReplyToキュー)を作成し,転送キューにサービスリクエスタ側マシンのキュー間転送用Webアプリケーションのあて先アドレスおよび転送先キュー名を指定しておきます。

サービスリクエスタから標準受付に対してサービス部品の呼び出しを要求するとき,標準受付のパラメタに作成した転送キュー(ReplyToキュー)のキュー名を指定すると,サービス部品からの応答が返ってきたときに,指定されたキューにJMSメッセージが送信されます。

転送キュー(ReplyToキュー)に送信されたJMSメッセージは,サービスリクエスタ側のローカルキューに転送されるため,ローカルキューからメッセージを取り出すことで,サービスリクエスタは,サービス部品からの応答電文を取得できます。同期サービス部品を呼び出した場合の応答の扱いを次の図に示します。

図5-32 同期サービス部品を呼び出した場合の応答の扱い

[図データ]

応答を取り出す方法については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。

 

同期サービス部品でも応答があるかどうかによって,表5-22に示すようにReplyToキューへメッセージを送信するかどうかが異なります。

なお,サービスリクエスタからReplyToキューのキュー名を指定していても,HCSCサーバ側に指定したキュー名のキューが作られていない場合は,ReplyToキューにメッセージは送信できないため,サービス部品の呼び出し処理がエラーになります。

表5-22 ReplyToキューへメッセージを出力する場合

項番 ReplyToキューへ出力する場合 応答電文の有無
応答電文がある場合 応答電文がない場合 サービス部品からのユーザ定義例外の場合 ユーザ定義例外以外のエラーの場合
1 呼び出し先のサービス部品が同期サービス部品の場合
(WebService,SessionBeanおよびカスタムアダプタなど)
ペイロードに応答電文を設定して送信 ペイロードなしのメッセージを送信 ペイロードに応答電文を設定して送信 ×
2 呼び出し先のサービス部品が非同期サービス部品の場合
(MDB(WS-R)およびMDB(DBキュー)など)
× × ×
3 呼び出し先のサービス部品がビジネスプロセスの場合 ペイロードに応答電文を設定して送信 ペイロードなしのメッセージを送信 ペイロードに応答電文を設定して送信 ×

(凡例)
×:メッセージを送信しません。
−:非同期のサービス部品からユーザ定義例外は存在しないため該当しません。

注※ エラーの情報はログ・トレースに出力します。

サービスリクエスタからの要求でReplyToキューのキュー名を指定していない場合,電文の実行履歴を採取している場合は,応答電文の内容は破棄されます(応答電文が破棄されると,KDEC00031-Wメッセージが出力されます)。

また,サービスリクエスタ側で相関関係を対応づけるために,サービスリクエスタが指定したJMSプロパティが引き継がれます。引き継がれるヘッダおよびプロパティの詳細については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。

(4) MDB(WS-R)使用時のトランザクション

MDB(WS-R)の場合,サービスリクエスタからHCSCサーバの間,そしてサービスアダプタからサービス部品の間は,異なるトランザクションになります。

(a) 非同期のサービスアダプタへメッセージを送信する場合

非同期(MDB(WS-R))の標準受付でサービス部品呼び出し要求を受け付け,非同期の(MDB(WS-R))サービスアダプタへメッセージを送信する場合,標準受付でのローカルキューからのメッセージの取り出しとサービスアダプタでの転送キューへの送信は,一つのトランザクションで処理します。

転送キューへのメッセージ送信が失敗した場合や,指定したサービスアダプタが起動していない場合など,何らかのエラーが発生した場合は,トランザクションをロールバックします。

ロールバックすると,標準受付で取り出したメッセージが復元され,再度ローカルキューからメッセージを取り出して,サービス部品を呼び出します。受付からサービス部品呼び出しまでが非同期の場合のトランザクションについて次の図に示します。

図5-33 受付からサービス部品呼び出しまでが非同期の場合のトランザクション

[図データ]

エラーが発生したときの対処方法については,「7.7.3 MDB(WS-R)実行時の障害対策」を参照してください。

(b) 同期のサービス部品アダプタへメッセージを送信する場合

非同期(MDB(WS-R))の標準受付でサービス部品呼び出し要求を受け付け,同期のサービスアダプタへメッセージを送信する場合,標準受付でのローカルキューからのメッセージの取り出しからサービスアダプタでのサービス部品呼び出し,および応答が返ってきてReplyToキューへメッセージを送信するまでを,一つのトランザクションで処理します。

転送キューへのメッセージの送信が失敗した場合や,指定したサービスアダプタが起動していない場合,ReplyToキューへのメッセージ送信が失敗した場合など,何らかのエラーが発生した場合は,トランザクションをロールバックします。ロールバックすると,標準受付で取り出したメッセージが復元され,再度ローカルキューからメッセージを取り出して,サービス部品を呼び出します。受付が非同期であるがサービス部品が同期の場合のトランザクションについて次の図に示します。

図5-34 受付が非同期であるがサービス部品が同期の場合のトランザクション

[図データ]

トランザクションが失敗すると,次のようになります。番号は,図5-34の番号と対応しています。

  1. 転送キューへのメッセージの送信が失敗した場合
    サービスアダプタからSOAPでのサービス部品呼び出しが失敗すると,ローカルキューにメッセージが戻り,再度標準受付でメッセージを取り出します。
  2. 指定したサービスアダプタが起動していない場合
    指定したサービスアダプタが起動していないと,ローカルキューにメッセージが戻り,再度標準受付でメッセージを取り出します。
  3. ReplyToキューへのメッセージ送信が失敗した場合
    応答が返ってきてReplyToキューへのメッセージ送信が失敗すると,ローカルキューにメッセージが戻り,再度標準受付でメッセージを取り出します。

エラーが発生したときの対処方法については,「7.7.3 MDB(WS-R)実行時の障害対策」を参照してください。

 

ビジネスプロセスはBMT(Bean Managed Transaction)で動作します。ビジネスプロセス自体は新たなトランザクションで制御します。ビジネスプロセスを呼び出す場合は,ビジネスプロセスのサービス呼出アクティビティに定義したサービス部品呼び出し処理ごとに,新たなトランザクションで制御します。ビジネスプロセスを介した場合のトランザクションについて次の図に示します。

図5-35 ビジネスプロセスを介した場合のトランザクション

[図データ]

(5) デッドメッセージキュー

HCSCサーバ稼働マシンでのサービス部品の呼び出しがロールバックして,ロールバックの回数(メッセージの配送回数)が最大値に達した場合や,配送回数に無制限の設定をしている場合,そのメッセージはデッドメッセージキューに遷移します。

エラーが発生したときにデッドメッセージキューに遷移する仕組みについては,「7.7.3 MDB(WS-R)実行時の障害対策」を参照してください。

(6) MDB(WS-R)で使用するキューの名称と個数

HCSCサーバの実行環境上では,表5-23に示すキューを使用します。

表5-23 MDB(WS-R)で使用するキューの名称と個数

項番 用途 説明 キューの種類 キューの名称 個数 備考
1 非同期受付(MDB(WS-R))用 サービスリクエスタ側の転送キューのあて先となるキュー。 ローカルキュー
  • 単独構成およびロードバランスクラスタの場合
    CSC<HCSCサーバ名>ACPT_RCVQ
  • HAクラスタの場合
    CSC<クラスタ名>ACPT_RCVQ
1
2 サービスアダプタ(MDB(WS-R))用 サービス部品側のローカルキューへ転送するキュー。 転送キュー CSC_<クラスタ名><アダプタ名> 非同期(MDB(WS-R))サービスアダプタ数
3 デッドメッセージキュー MDB(DBキュー)用のデッドメッセージキューと共用。 ローカルキューまたは転送キュー 任意の名称 システムに1個 DBキューでのデッドメッセージキューと同一。
4 ReplyToキュー サービス部品呼び出しの応答を受け取る場合に使用。 ローカルキューまたは転送キュー 任意の名称 任意

(凡例)
−:該当しません。