Cosminexus サービスプラットフォーム システム構築・運用ガイド
サービス部品を呼び出す流れには,プロトコルで共通な部分と,プロトコルごとに異なる部分があります。ここでは,プロトコルで共通するサービス部品を呼び出す基本的な流れについて説明します。
サービス部品を呼び出すためには,基本的にサービスリクエスタ,受付,HCSCメッセージ配送制御,サービスアダプタ,およびサービス部品が必要です。受付は,サービス部品を呼び出すための要求を受け付けるところで,標準受付とユーザ定義受付があります。
標準受付とは,HCSCサーバが標準提供している,サービスリクエスタからの要求電文を受け付けるための機能(インターフェース)です。ユーザ定義受付とは,開発環境でユーザが定義したものをHCSCサーバに配備してから,サービスリクエスタからの実行要求を受け付けるための機能(インターフェース)で,ユーザが定義した任意のインターフェースで受け付けることができます。
標準受付を使用する場合の構造と開発の流れとの関係を次の図に示します。
図5-3 標準受付を使用する場合の構造と開発の流れとの関係
サービス部品を呼び出すサービスリクエスタとHCSCサーバ,およびサービス部品の関係は,次のようになっています。開発の流れに沿って,それぞれの関係を説明します。
電文フォーマット,ビジネスプロセス定義(BPEL),およびサービスリクエスタの作成については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。
ユーザ定義受付を使用する場合の構造と開発の流れとの関係を次の図に示します。
図5-4 ユーザ定義受付を使用する場合の構造と開発の流れとの関係
SOAP通信を使用する場合は,ユーザ定義受付を使用できます。サービス部品を呼び出すサービスリクエスタとHCSCサーバ,およびサービス部品の関係は,次のようになっています。開発の流れに沿って,それぞれの関係を説明します。
電文フォーマット,ビジネスプロセス定義(BPEL),ユーザ定義受付,およびサービスリクエスタの作成については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。
サービスリクエスタからサービス部品を呼び出す流れは,受付の種類と呼び出すHCSCコンポーネントの組み合わせによって動作が異なります。受付の種類と呼び出すHCSCコンポーネントの組み合わせを次に示します。
これらの場合について,次に説明します。エラー時の処理の流れについては「7. 障害対策」を参照してください。
標準受付からサービスアダプタを直接呼び出してサービス部品を実行する場合,サービスアダプタで定義したサービス名をサービスリクエスタで指定して実行します。実行すると,サービスアダプタで定義したサービス部品を呼び出します。
サービスアダプタを直接呼び出す場合の電文の流れを次の図に示します。
図5-5 サービスアダプタを直接呼び出す場合の電文の流れ
データ変換定義については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。
標準受付からビジネスプロセスを呼び出してサービス部品を実行する場合,ビジネスプロセスで定義したサービス名(ビジネスプロセス名)をサービスリクエスタで指定して実行します。そして,ビジネスプロセスに定義したプロセスに従って,処理を実行します。プロセスはアクティビティから構成されています。その中の,サービス部品呼出アクティビティでは,定義されたサービスアダプタを呼び出して,サービスアダプタに定義されたサービス部品を実行します。ビジネスプロセスを呼び出す場合の電文の流れを次の図に示します。
図5-6 ビジネスプロセスを呼び出す場合の電文の流れ
データ変換定義については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。
ユーザ定義受付は,ビジネスプロセスの呼び出しをする場合にだけ使用できます。サービスリクエスタからは,HCSCサーバで定義したサービス名(ビジネスプロセス名)などは指定しないで,ユーザ定義受付に定義したWSDLを使用して要求します。ユーザ定義受付に定義したWSDLは,ビジネスプロセスの受付アクティビティに定義した電文フォーマットに形式を合わせます。
開発環境での定義に従ってユーザ定義受付からビジネスプロセスを呼び出し,ビジネスプロセスに定義したプロセスに従って,処理を実行します。サービス呼出アクティビティでは,定義されたサービスアダプタを呼び出し,サービスアダプタに定義されたサービス部品を実行します。ユーザ定義受付を使う場合の電文の流れを次の図に示します。
図5-7 ユーザ定義受付を使う場合の電文の流れ
データ変換定義については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。
サービス部品側の電文フォーマットと異なる電文でサービス部品を呼び出す場合,またはサービス部品側の電文フォーマットと異なる電文を応答として受信する場合は,開発環境で標準電文フォーマットを定義します。また,標準電文フォーマットとサービス部品電文フォーマットの変換ルールを定義したデータ変換定義は,開発環境で定義します。標準電文フォーマットの電文をサービス部品電文フォーマットの電文に変換することでサービス部品を呼び出せます。標準電文フォーマットとデータ変換定義の関係を次の図に示します。
図5-8 標準電文フォーマットとデータ変換定義の関係
複数のサービスアダプタがある場合も,図5-9に示すようにService1用のサービスアダプタ,Service2用のサービスアダプタ,Service3用のサービスアダプタで,それぞれに同一の標準電文フォーマットAと,それぞれのデータ変換定義を定義すると,サービスリクエスタ側から要求するときに,要求時のサービス名(Service1など)を変更すれば,同じ要求電文で要求できます。
図5-9 複数のサービスアダプタで同一の標準電文フォーマットを定義した場合の流れ
標準電文フォーマット,サービス部品電文フォーマット,およびデータ変換定義については,マニュアル「Cosminexus サービスプラットフォーム 開発ガイド」を参照してください。
HCSCサーバ内のサービス部品呼び出し要求とその流れを区別するために,各要求電文にメッセージ共通IDとサービスリクエストIDが割り当てられます。これらのIDは電文の実行履歴,メッセージログ,リクエストトレース,および性能解析トレースで出力されます。
メッセージ共通IDとサービスリクエストIDをたどることで,サービス部品呼び出しの処理の流れを追跡できます。電文の追跡については「7.7 サービス部品呼び出し要求時の障害対策」を参照してください。
なお,HCSCサーバに割り当てられる識別情報のほかに,ユーザが任意の値を設定できるクライアント相関IDがあります。
CSC_[サーバ名]_[受付時刻(ミリ秒)]_[通番] |
(例)CSC_CSCServerName_2008-04-20_11:32:18.360_1
MSG_[サーバ名]_[受付種別]_[受付時刻(ミリ秒)]_[通番] |
(例)MSG_CSCServerName_MDBWSR_2008-04-20_11:32:18.360_1
標準受付から直接サービスアダプタを呼び出す場合は,メッセージ共通IDおよびサービスリクエストIDは,HCSCサーバ内で識別情報として引き継がれます。標準受付やユーザ定義受付からビジネスプロセスを経由してサービスアダプタを呼び出す場合は,メッセージ共通IDは,HCSCサーバ内で識別情報として引き継がれます。しかし,サービスリクエストIDは,サービス部品呼び出し処理ごとの識別情報として引き継がれます。また,ビジネスプロセスインスタンスIDは,ビジネスプロセスが最初に要求を受け付けるときに割り当てます。
メッセージ共通IDとサービスリクエストIDが割り当てられるタイミングを次の図に示します。
図5-10 識別情報割り当てのタイミング
サービスリクエスタからのサービス部品の呼び出し要求が同時に実行される場合があるため,これを考慮して,サービス部品呼び出し処理の多重度(同時に実行できる数)を設定する必要があります。多重度の設定が良くない場合,性能上のボトルネックになるおそれがあります。多重度の設定によってボトルネックになる例を次の図に示します。
図5-11 多重度の設定によってボトルネックになる例
図5-11に示すように,リクエスト受付(標準受付またはユーザ定義受付)の多重度が小さいと,一度にたくさん要求が来ても同時に処理ができないため,一度に実行できる処理が少なくなります。また,リクエスト受付の多重度を大きくしても,サービスアダプタで定義している多重度が小さいと,サービスアダプタで一度に実行できる処理が少ないため,サービスアダプタがボトルネックになり,意図した性能を得られなくなります。
多重度は,標準の同期受付(Webサービス)の場合は,スレッド数および最大同時実行数で設定します。標準の同期受付(SessionBean)の場合は,インスタンス数で設定します。HCSCサーバ内の多重度の設定について,表5-6,表5-7,および表5-8に示します。
表5-6 標準受付の多重度を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
HCSCサーバランタイム定義ファイル | request-ejb.instance.minimum | 標準の同期受付(SessionBean)のインスタンス最小数 |
request-ejb.instance.maximum | 標準の同期受付(SessionBean)のインスタンス最大数 | |
request-ejb.parallel.count | CTMがアプリケーションを呼び出すために用意するスレッド数 | |
request-soap.instance.minimum | 標準の同期受付(Webサービス)の最小同時実行数 | |
request-soap.instance.maximum | 標準の同期受付(Webサービス)の最大同時実行数 | |
request-jms.instance.maximum | 標準の非同期受付(MDB(WS-R))のインスタンス最大数 |
表5-7 ユーザ定義受付の多重度を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
ユーザ定義受付ランタイム定義ファイル | user-defined-reception-soap.threads.maximum | 最大同時実行数 |
表5-8 サービスアダプタの多重度を設定する項目
画面 | 内容 |
---|---|
開発環境でのサービスアダプタ定義画面 | 最大インスタンス数 |
Webサービス(SOAP通信)の場合,同時実行数のほかにWebコンテナレベルでの最大キュー滞留数を設定できます。最大同時実行数と最大キュー滞留数を設定しておくと,サービスリクエスタからの要求を受けたときに,実際の処理をしないで処理を待たせておけるため,流量制御ができます。サービスリクエスタからの要求と最大キュー滞留数の関係を次の図に示します。
図5-12 サービスリクエスタからの要求と最大キュー滞留数の関係
例えば,図5-12に示すように,最大同時実行数を3とした場合,最大キュー滞留数を10にしておくと,同時にきたサービス部品呼び出し要求のうち,3件までは同時に処理されます。同時実行数より多くのサービス部品呼び出し要求(4件以上)がきた場合は,最大キュー滞留数(10件)までは,処理待ちの状態となり,先に実行されている処理が終わり次第,順次処理が実行されます。
最大キュー滞留数の数が上限(10件)まで達している場合に,さらにサービスリクエスタからサービス部品呼び出し要求がきた場合は,要求は受け付けられないため,エラーとしてサービスリクエスタに応答されます。
HCSCサーバ内の最大キュー滞留数は,表5-9および表5-10に示す定義ファイルのプロパティで設定します。
表5-9 標準受付の最大キュー滞留数を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
HCSCサーバランタイム定義ファイル | request-soap.queue-size | 標準の同期受付(Webサービス)の実行待ちキューのサイズ |
表5-10 ユーザ定義受付の最大キュー滞留数を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
ユーザ定義受付ランタイム定義ファイル | user-defined-reception-soap.queue-size | 実行待ちキューサイズ |
永続化するビジネスプロセスを使用する(プロセスインスタンスの実行履歴を採取する)場合,非同期プロトコルを使用する場合,および電文の実行履歴を採取する場合は,HCSCサーバに設定するDB Connectorの定義で,コネクションプール数を設定します。
図5-13 永続化するビジネスプロセスを使用する場合のボトルネック
図5-14 非同期プロトコルを使用する場合のボトルネック
図5-15 電文の実行履歴を採取する場合のボトルネック
データベースへのアクセスに関する多重度は,次の表に示すように設定します。
表5-11 DB Connectorの多重度を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
DB Connector(LocalTransactionまたはXATransaction)のセットアップ時に設定する属性ファイル | MinPoolSize | プールの最小値 |
MaxPoolSize | プールの最大値 | |
DB Connector(NoTransaction)のセットアップ時に設定する属性ファイル | MinPoolSize | プールの最小値 |
MaxPoolSize | プールの最大値 |
表5-12 Cosminexus RMの多重度を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
Cosminexus RMのセットアップ時に設定する属性ファイル | MinPoolSize | プールの最小値 |
MaxPoolSize | プールの最大値 |
Webサービス(SOAP通信)を使用する場合は,実行環境で設定しているWebサーバ(HTTPサーバ)の同時実行スレッド数も関係します。
Webサービス(SOAP通信)の標準受付やユーザ定義受付が複数ある場合,
各受付に設定した同時実行スレッド数の合計より,Webサーバに設定した全体の同時実行スレッド数が優先されます。そのため,Webサーバに設定した全体の同時実行スレッド数が,各受付に設定した同時実行スレッド数の合計より小さいと,一度に多くの要求が来ても同時に処理ができないため,性能上のボトルネックになることがあります。Webサービス(SOAP通信)を使用する場合のボトルネックを次の図に示します。
図5-16 Webサービス(SOAP通信)を使用する場合のボトルネック
Webサービス(SOAP通信)に関する多重度は,次のように設定します。
なお,Webサーバ(HTTPサーバ)の同時実行スレッド数が十分な数を確保できない状況であっても,個々のリクエスト受付で必ず最低限の実行をする場合は,占有スレッド数を定義します。
占有スレッド数を定義した場合は,Webサーバ(HTTPサーバ)の同時実行スレッド数以上の要求が個別のリクエスト受付に来た場合でも,必ず指定した数だけは同時に実行されます。
ほかのリクエスト受付に要求が来ていない場合は,最大同時実行数まで同時に実行できます。
HCSCサーバ内の占有スレッド数は,表5-13および表5-14に示すように設定します。
表5-13 標準受付の占有スレッド数を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
HCSCサーバランタイム定義ファイル | request-soap.exclusive.threads | 標準の同期受付(Webサービス)の占有スレッド数 |
表5-14 ユーザ定義受付の占有スレッド数を設定するプロパティ
定義ファイル | プロパティ | 内容 |
---|---|---|
ユーザ定義受付ランタイム定義ファイル | user-defined-reception-soap.exclusive.threads | 占有スレッド数 |
最大同時実行数と占有スレッド数の関係を次の図に示します。
図5-17 最大同時実行数と占有スレッド数の関係
図5-17に示すように,標準受付,二つのユーザ定義受付,およびWebサーバ(HTTPサーバ)を次のように設定した場合,標準受付は必ず二つのスレッドを占有します。
そのため,Webサーバ(HTTPサーバ)の同時実行数に指定した5件以上の要求が来ると,二つのスレッドは標準受付の実行のために使用され,残りの三つのスレッドを使ってユーザ定義受付が動作します。
ただし,最大キュー滞留数,標準受付の同時実行数,占有スレッド数,およびWebサーバ(HTTPサーバ)の同時実行数が図5-17と同じ場合で,図5-18に示すように,占有スレッド数を指定した標準受付に要求が来ていないときでも,必ず二つはスレッドを占有して実行する状態になります。また,ほかのユーザ定義受付では,それぞれ同時実行数が2件で合計の同時実行数は4件になるはずですが,Webサーバ(HTTPサーバ)の同時実行数5件であるため,残り三つしか処理できなくなります。ほかのリクエスト受付の同時実行数が増えることはありません。
図5-18 占有スレッド数を指定した受付に要求が来ない場合
同期のサービス部品呼び出しの場合,応答が返って来ない場合のタイムアウト値を設定することで,無応答でハングアップすることを回避できます。
また,サービス部品での実際の処理に掛かる最大時間を考慮して,タイマを設定する必要があります。設定できるタイマについて次の図に示します。
図5-19 設定できるタイマ
図5-19の各項番は次のタイマを示しています。
タイマは接続先やプロトコルによって設定方法が異なります。
サービス部品(Webサービス)に接続する場合,書き込み,読み込み,および接続時のタイマを設定できます。
表5-15 HCSCサーバ全体のタイマ(Webサービス)の設定
値 | キー名称 | デフォルト値(秒) |
---|---|---|
サーバ兼クライアントのソケットの書き込みタイムアウト値 | c4web.application.<識別子>.socket_write_timeout | 60 |
サーバ兼クライアントのソケットの読み込みタイムアウト値 | c4web.application.<識別子>.socket_read_timeout | 300 |
サーバ兼クライアントのソケットの接続タイムアウト値 | c4web.application.<識別子>.socket_connect_timeout | 60 |
表5-16 サービスアダプタ個別のタイマ(Webサービス)の設定
値 | キー名称 | デフォルト値(秒) |
---|---|---|
クライアントのソケットの書き込みタイムアウト値 | c4web.application.socket_write_timeout | 60 |
クライアントのソケットの読み込みタイムアウト値 | c4web.application.socket_read_timeout | 300 |
クライアントのソケットの接続タイムアウト値 | c4web.application.socket_connect_timeout | 60 |
表5-17 タイマ(Webサービス)の設定値の変更
値 | キー名称 |
---|---|
書き込みタイムアウト値 | <クラスタ名>.<サービスID>.WebService.c4web.application.socket_write_timeout |
読み込みタイムアウト値 | <クラスタ名>.<サービスID>.WebService.c4web.application.socket_read_timeout |
接続タイムアウト値 | <クラスタ名>.<サービスID>.WebService.c4web.application.socket_connect_timeout |
表5-18 HCSCサーバ全体のタイマ(SessionBean)の設定
値 | 設定するファイル | キー名称 | デフォルト値(秒) |
---|---|---|---|
RMI-IIOP通信すべてに有効となるタイムアウト値 | EJBクライアントアプリケーション用ユーザプロパティファイル(usrconf.properties) | ejbserver.rmi.request.timeout | 0 (タイムアウトしません) |
CORBAネーミングサービス部品との通信でのタイムアウト値 | ejbserver.jndi.request.timeout | 0 (タイムアウトしません) |
表5-19 サービスアダプタ個別のタイマ(SessionBean)の設定
値 | キー名称 | デフォルト値(秒) |
---|---|---|
呼び出しタイムアウト値 | c4web.application.ejb_j2ee_timeout | 0 (タイムアウトしません) |
表5-20 タイマ(SessionBean)の設定値の変更
値 | キー名称 |
---|---|
呼び出しタイムアウト値 | <クラスタ名>.<サービスID>.SessionBean.c4web.application.ejb_j2ee_timeout |
HCSCサーバに接続するときのタイマ(Webサービス)は,サービスリクエスタ稼働マシン側で設定します。サービスリクエスタの稼働しているマシン全体に設定したり,サービスリクエスタ個別に設定したりできます。サービスリクエスタ稼働マシンでSOAP通信基盤(Cosminexus Web Services)を使用している場合の設定方法を次に示します。
HCSCサーバに接続するときのタイマ(SessionBean)は,サービスリクエスタの稼働しているマシン全体に設定したり,サービスリクエスタ個別に設定したりできます。設定方法を次に示します。
HCSCサーバに接続するときのタイマ(SessionBean)は,サービスリクエスタ稼働マシン側で設定します。サービスリクエスタの稼働しているマシン全体に設定したり,サービスリクエスタ個別に設定したりできます。サービスリクエスタ稼働マシンでCosminexusを使用している場合の設定方法を次に示します。
HCSCサーバ内のトランザクションのタイマは,HCSCサーバ全体で設定します。HCSCサーバ稼働マシンのCosminexusで,EJBコンテナでタイムアウトを設定します。定義の詳細については,マニュアル「Cosminexus リファレンス 定義編」を参照してください。
表5-21 HCSCサーバ内のトランザクションのタイマの設定
値 | 設定するファイル | キー名称 | デフォルト値(秒) |
---|---|---|---|
EJBクライアントで開始されるトランザクションのトランザクションタイムアウト値 | EJBクライアントアプリケーション用ユーザプロパティファイル(usrconf.properties) | ejbserver.jta.TransactionManager.defaultTimeOut | 180 |
All Rights Reserved. Copyright (C) 2006, 2008, Hitachi, Ltd.