2 機能
2.7 サーバアプリケーションの機能
2.7.2 サーバアプリケーションからのリクエストの要求
サーバアプリケーションは,クライアントアプリケーションからのリクエストを処理し ますが,サーバアプリケーションからもリクエストできます。また,TPBrokerのリクエ スト呼び出しもできます。さらに,サーバアプリケーションプロセス内にTPBrokerの サーバオブジェクトを配置して,ほかのプロセスからTPBrokerのリクエスト呼び出し で呼び出すこともできます。
サーバアプリケーションからのリクエストの要求を次の図に示します。
図2-20 サーバアプリケーションからのリクエストの要求
2.7.3 スレッドと TSC ユーザオブジェクト
サーバアプリケーションプロセスは,スレッドとTSCユーザオブジェクトとで構成され ます。その構成の例を次の図に示します。
図2-21 スレッドとTSCユーザオブジェクトの構成
サーバアプリケーションプロセス内では,サービスを提供する複数のオブジェクトが動 作します。これらの,アプリケーションとして動作するオブジェクトをTSCユーザオブ ジェクトといいます。また,サーバアプリケーションごとに,TSCルートアクセプタの オブジェクトを持ちます。TSCルートアクセプタは,TSCユーザアクセプタを管理する オブジェクトです。TSCユーザアクセプタは,TSCユーザオブジェクトにリクエストを 割り振るオブジェクトです。
(1) ユーザ定義 IDL インタフェースとコード中の登録処理部分の例
サーバアプリケーションのユーザ定義IDLインタフェースの例,および対応するコード 中の登録処理部分の例を次に示します。
●ユーザ定義IDLインタフェースの例 interface A{
void func();
};
interface B { void func();
};
interface C { void func();
};
●対応するコード中の登録処理部分
//ABC_TSCfactimplの生成
TSCObjectFactory_ptr A_my_obj_fact = new A_TSCfactimpl();
TSCObjectFactory_ptr B_my_obj_fact = new B_TSCfactimpl();
TSCObjectFactory_ptr C_my_obj_fact = new C_TSCfactimpl();
//TSCAcceptorの生成
TSCAcceptor_ptr A_my_acpt= new A_TSCacpt(A_my_obj_fact);
TSCAcceptor_ptr B_my_acpt= new B_TSCacpt(B_my_obj_fact);
TSCAcceptor_ptr C_my_acpt= new C_TSCacpt(C_my_obj_fact);
:
//TSCRootAcceptorの生成
TSCRootAcceptor_ptr my_rt_acpt = TSCRootAcceptor::create(tsc_s);
:
//TSCRootAcceptorへの登録
my_rt_acpt->registerAcceptor(A_my_acpt);
my_rt_acpt->registerAcceptor(B_my_acpt);
my_rt_acpt->registerAcceptor(C_my_acpt);
//TSCRootAcceptorのパラレルカウント(常駐するスレッド数)指定 my_rt_acpt->setParallelCount(4);
//オブジェクトの活性化
my_rt_acpt->activate("serviceX");
:
TSCRootAcceptorクラスのactivate()メソッドを発行してTSCルートアクセプタを active状態にするときに,TSCAcceptorクラスは,TSCユーザオブジェクトのインスタ ンスを生成します。このとき,登録されたTSCFactoryObjectを基に,ユーザ定義IDL インタフェースのinterface句ごとに生成します。
OTMは,インスタンスとスレッドを対応づけて制御するために,TSCRootAcceptorク ラスのsetParallelCount()メソッド,またはサーバアプリケーションの開始時に指定す
る-TSCParallelCountオプションで指定するパラレルカウントを使用します。また,
TSCユーザオブジェクトのインスタンスは作成されたスレッド上で常に動作するよう制 御されます。
(2) マルチスレッド環境での処理
マルチスレッド環境でサーバアプリケーションを運用する場合のプロセスの処理(ス レッドの並行実行)の仕組みを次の図に示します。
図2-22 マルチスレッド環境での処理の仕組み
図2-22の場合,TSCRootAcceptorクラスのsetParallelCount()メソッド,またはサー バアプリケーションの開始時に指定する-TSCParallelCountオプションには"4"が設定 されています。
●1.で示す処理では,Aのインタフェースに対して同時にリクエストがある場合,四つ のスレッド上で同時にTSCユーザオブジェクトのインスタンスが動作します。リクエ スト処理中には,ほかのインタフェースへのリクエストがあっても,それ以上のリク エストは処理されません。
●2.で示す処理では,Aのインタフェースが一つのスレッド上で動作し,同時にBのイ ンタフェースが三つのスレッド上で動作している場合,Cのインタフェースに対する リクエストがあるとき,どれかのスレッドで実行されている処理が終了するまで,C のインタフェースに対するリクエストは処理されません。
つまり,TSCルートアクセプタに登録されているインタフェースが幾つあっても,1ス レッド上で同時に動作するインスタンスは,各インタフェースのTSCユーザオブジェク トの一つだけです。