サーバアプリケーションプロセスは,スレッドとTSCユーザオブジェクトとで構成されます。その構成の例を次の図に示します。
図2-16 スレッドとTSCユーザオブジェクトの構成
サーバアプリケーションプロセス内では,サービスを提供する複数のオブジェクトが動作します。これらの,アプリケーションとして動作するオブジェクトをTSCユーザオブジェクトといいます。また,サーバアプリケーションごとに,TSCルートアクセプタのオブジェクトを持ちます。TSCルートアクセプタは,TSCユーザアクセプタを管理するオブジェクトです。TSCユーザアクセプタは,TSCユーザオブジェクトにリクエストを割り振るオブジェクトです。
サーバアプリケーションのユーザ定義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-17 マルチスレッド環境での処理の仕組み
図2-17の場合,TSCRootAcceptorクラスのsetParallelCount()メソッド,またはサーバアプリケーションの開始時に指定する-TSCParallelCountオプションには"4"が設定されています。
つまり,TSCルートアクセプタに登録されているインタフェースが幾つあっても,1スレッド上で同時に動作するインスタンスは,各インタフェースのTSCユーザオブジェクトの一つだけです。