TSCRootAcceptor(C++)

TSCRootAcceptorはシステム提供クラスです。

TSCRootAcceptorは,サーバオブジェクトの実行空間を表現するオブジェクトです。クライアント側からのTSCユーザオブジェクト呼び出し要求を受け付けて,適切なTSCユーザアクセプタに振り分けます。また,パラレルカウント(常駐するスレッド数)に合わせてスレッドを管理します。

ユーザは,クライアント側にサービスを提供するTSCユーザオブジェクトの実行空間を構築するときに,サーバアプリケーション内でTSCRootAcceptorクラスのインスタンスを生成します。次にTSCRootAcceptorの特徴を示します。

TSCAcceptorの登録

TSCObjectの実行空間の構成

TSCRootAcceptorの実行空間でTSCObjectを実行させる場合,例えば,TSCRootAcceptorの管理するスレッド上でTSCObjectを実行させる場合,そのTSCObjectに対応するTSCAcceptorをTSCRootAcceptorに登録します。TSCRootAcceptorには複数のTSCAcceptorを登録できます。

提供するサービスの管理

TSCRootAcceptorには複数のTSCAcceptorを登録できます。TSCRootAcceptorは,各TSCAcceptorの複数のTSCサービス識別子を集め,かつ,重複を削除したものを属性として管理します。TSCRootAcceptorが提供できるサービスの種類は,このTSCサービス識別子によって表現されます。つまり,TSCサービス識別子の列で表されるサービスを提供することになります。

TSCルートアクセプタ状態

TSCルートアクセプタ状態ごとのスレッドの管理方式

TSCルートアクセプタ状態にはactive状態とnon-active状態の2種類があります。各状態の遷移中の場合も含めて,それぞれの状態のときのスレッドの管理方式を次に示します。

active状態での障害通知

サーバアプリケーション内やTSCデーモンとの接続に障害が発生してスレッドが存続できなくなる場合,そのスレッド上でオブジェクト管理終了通知をTSCAcceptorに渡します。その後,そのスレッドを削除します。なお,このときはまだactive状態です。

障害が解除されると,再度,スレッドを生成します。その後,そのスレッド上でオブジェクト管理開始通知をTSCAcceptorに渡します。つまり,障害が発生してから解除されるまでの間は,TSCRootAcceptorは,スレッド数がパラレルカウント(常駐するスレッド数)以下の状態で存続します。

TSCルートアクセプタ登録名称

TSCRootAcceptorがactive状態に遷移すると,TSCRootAcceptorと関連づけられているTSCServerにTSCルートアクセプタ登録名称が登録されます。以降,クライアント側のメソッド呼び出し要求がTSCRootAcceptorに振り分けられるようになります。

TSCRootAcceptorをactive状態に遷移させるときに,TSCルートアクセプタ登録名称を指定することもできます。activateの呼び出し時に,TSCルートアクセプタ登録名称を指定する場合と指定しない場合について,それぞれ次に示します。

また,同じTSCルートアクセプタ登録名称で,TSCRootAcceptorを同じTSCデーモンに登録できます。同じTSCルートアクセプタ登録名称で登録した場合,スケジュール用キュー(配送機構)が共有されます。ただし,スケジュール用キューを共有する場合,登録するTSCRootAcceptor間で提供できるサービス内容が一致している必要があります。つまり,同じTSCルートアクセプタ登録名称で登録するTSCRootAcceptorは,同じTSCサービス識別子の列を持っている必要があります。

TSCユーザスレッドファクトリによるTSCユーザスレッドの管理

TSCThreadFactoryを引数としてTSCRootAcceptorを生成した場合を前提にします。この場合,TSCRootAcceptorは,non-active状態からactive状態に遷移する過程でスレッドを生成したあと,TSCThreadFactoryのcreateを呼び出して,戻り値であるTSCThreadをそのスレッドに割り当てます。また,active状態からnon-active状態に遷移する過程で,スレッドごとに割り当てたTSCThreadを引数にTSCThreadFactoryのdestroyを呼び出したあと,スレッドを削除します。

形式

class TSCRootAcceptor;
typedef TSCRootAcceptor* TSCRootAcceptor_ptr;

class TSCRootAcceptor
{
public:

 static TSCRootAcceptor_ptr create(TSCServer_ptr tsc_server);

 static TSCRootAcceptor_ptr create(TSCServer_ptr tsc_server,
                            TSCThreadFactory_ptr tsc_thr_fact);

 static void destroy(TSCRootAcceptor_ptr tsc_rt_acpt);

 //TSCAcceptorの追加
 TSCInt registerAcceptor(TSCAcceptor_ptr tsc_acpt);

 //TSCAcceptorの削除
 void cancelAcceptor(TSCInt reg_id);

 //パラレルカウントの設定
 void setParallelCount(TSCInt p_count);
 TSCInt getParallelCount();

 //TSCRootAcceptorの活性化
 TSCInt activate();
 TSCInt activate(const char* rt_acpt_reg_name);

 //TSCRootAcceptorの非活性化
 TSCInt deactivate();

};

インクルードファイル

#include <tscobject.h>

メソッド

●static TSCRootAcceptor_ptr create(TSCServer_ptr tsc_server)

項目型・意味
引数TSCServer_ptr tsc_server接続したTSCServer
戻り値生成されたTSCRootAcceptor
例外TSCBadParamException
TSCNoMemoryException

TSCServerと関連づけられたTSCRootAcceptorを生成します。

引数で渡すTSCServerの解放責任,および戻り値で返されるTSCRootAcceptorの削除責任はユーザにあるので,適切な状態のときに解放および削除してください。

activate()やdeactivate()に失敗した場合,TSCRootAcceptor上でユーザオブジェクトの生成や削除を実施していることがあります。TSCRootAcceptorを削除する場合は,deactivate()が正常終了したあとで実施してください。

なお,このメソッドを複数のスレッドから同時に呼び出せます。

●static TSCRootAcceptor_ptr create(TSCServer_ptr tsc_server,

                                                  TSCThreadFactory_ptr tsc_thr_fact)

項目型・意味
引数TSCServer_ptr tsc_server接続したTSCServer
TSCThreadFactory_ptr tsc_thr_factTSCユーザスレッドファクトリオブジェクト
戻り値生成されたTSCRootAcceptor
例外TSCBadParamException
TSCNoMemoryException

tsc_serverと関連づけられたtsc_thr_factを保持するTSCRootAcceptorを生成します。

引数で渡すTSCServerの解放責任,引数で渡すTSCThreadFactoryのメモリ領域の管理責任,および戻り値で返されるTSCRootAcceptorの削除責任はユーザにあるので,適切な状態のときに解放および削除してください。

activate()やdeactivate()に失敗した場合,TSCRootAcceptor上でユーザオブジェクトの生成や削除を実施していることがあります。TSCRootAcceptorを削除する場合は,deactivate()が正常終了したあとで実施してください。

なお,このメソッドを複数のスレッド上から同時に呼び出せます。

●static void destroy(TSCRootAcceptor_ptr tsc_rt_acpt)

項目型・意味
引数TSCRootAcceptor_ptr tsc_rt_acpt削除するTSCRootAcceptor
戻り値ありません。
例外ありません。

tsc_rt_acptを削除します。削除したTSCRootAcceptorにはアクセスしないでください。

なお,このメソッドを複数のスレッド上から同時に呼び出せます。

●TSCInt registerAcceptor(TSCAcceptor_ptr tsc_acpt)

項目型・意味
引数TSCAcceptor_ptr tsc_acpt登録するTSCAcceptor
戻り値TSCユーザアクセプタの登録識別子
例外TSCBadParamException
TSCNoMemoryException
TSCNoPermissionException

TSCAcceptorを登録します。active状態のときは登録できません。

登録するTSCAcceptorのメモリ領域の管理責任はユーザにあるので,適切な状態のときに削除してください。

なお,このメソッドを複数のスレッド上から同時に呼び出すことはできません。

●void cancelAcceptor(TSCInt reg_id)

項目型・意味
引数TSCInt reg_id削除するTSCユーザアクセプタの登録識別子
戻り値ありません。
例外TSCBadParamException
TSCNoPermissionException

TSCAcceptorオブジェクトの登録を削除します。reg_idにはregisterAcceptorで戻された値を指定してください。activate状態のときと,active状態のときは登録を削除できません。

なお,このメソッドを複数のスレッド上から同時に呼び出すことはできません。

●void setParallelCount(TSCInt p_count)

項目型・意味
引数TSCInt p_countパラレルカウント
戻り値ありません。
例外TSCBadParamException
TSCNoPermissionException

パラレルカウント(常駐するスレッド数)を設定します。active状態のときは設定できません。

サーバアプリケーションの開始時にコマンドオプション引数-TSCParallelCountを指定しない場合,パラレルカウントのデフォルト値は"1"です。コマンドオプション引数-TSCParallelCountを指定する場合は,パラレルカウントのデフォルト値はその指定値となります。

なお,このメソッドを複数のスレッド上から同時に呼び出すことはできません。

●TSCInt getParallelCount()

項目型・意味
戻り値パラレルカウント

パラレルカウント(常駐するスレッド数)を取得します。

なお,このメソッドを複数のスレッド上から同時に呼び出せます。

●TSCInt activate()

項目型・意味
戻り値常に0
例外TSCBadInvOrderException
TSCCommFailureException
TSCInternalException
TSCNoMemoryException
TSCNoPermissionException
TSCNoResourcesException
ユーザが通知する各種例外

デフォルトのTSCルートアクセプタ登録名称で,active状態に遷移します。

サーバアプリケーションの開始時に指定するコマンドオプション引数-TSCRootAcceptorを指定しない場合,TSCルートアクセプタ登録名称のデフォルト値は"default"です。コマンドオプション引数-TSCRootAcceptorを指定した場合,TSCルートアクセプタのデフォルト値はその指定値となります。

なお,このメソッドを複数のスレッド上から同時に呼び出すことはできません。

●TSCInt activate(const char* rt_acpt_reg_name)

項目型・意味
引数const char* rt_acpt_reg_nameTSCルートアクセプタの登録名称
戻り値常に0
例外TSCBadInvOrderException
TSCBadParamException
TSCCommFailureException
TSCInternalException
TSCNoMemoryException
TSCNoPermissionException
TSCNoResourcesException
ユーザが通知する各種例外

指定したTSCルートアクセプタ登録名称で,active状態に遷移します。rt_acpt_reg_nameに文字列を指定する場合は,1~31文字で指定してください。

なお,このメソッドを複数のスレッド上から同時に呼び出すことはできません。

●TSCInt deactivate()

項目型・意味
戻り値常に0
例外TSCBadInvOrderException
TSCCommFailureException
TSCInternalException
TSCNoMemoryException
TSCNoPermissionException

non-active状態に遷移します。

なお,このメソッドを複数のスレッド上から同時に呼び出すことはできません。

TSCRootAcceptorの生成と削除

TSCServerを引数に指定したTSCRootAcceptorのcreateで生成し,TSCRootAcceptorを引数に指定したTSCRootAcceptorのdestroyで削除します。TSCRootAcceptorクラスのインスタンスへの内部参照(アクセス)があるときは削除できないため,インスタンスへの内部参照(アクセス)をなくした状態で削除してください。

マルチスレッド環境でのメソッド呼び出し規則

マルチスレッド環境で,TSCRootAcceptorクラスのインスタンスのメソッドを呼び出す規則を次に示します。

メソッド複数のスレッド上からの同時呼び出し
create(TSCServer_ptr)
create(TSCServer_ptr,TSCThreadFactory_ptr)
destroy
registerAcceptor×
cancelAcceptor×
setParallelCount×
getParallelCount
activate()×
activate(const char*)×
deactivate()×
(凡例)
○:できます。
×:できません。

インスタンスの公開メソッド呼び出し規則

TSCRootAcceptorクラスのインスタンスがほかのクラスのインスタンスの公開メソッドを呼び出す規則を次に示します。

メソッド公開メソッド呼び出し
activate()生成時に指定されたTSCThreadFactory型のインスタンス
activate(const char*)生成時に指定されたTSCThreadFactory型のインスタンス
deactivate()生成時に指定されたTSCThreadFactory型のインスタンス

インスタンスの内部参照(アクセス)規則

TSCRootAcceptorクラスのインスタンスがほかのクラスのインスタンスを内部参照(アクセス)する規則を次に示します。

メソッド内部参照
registerAcceptorありません。
cancelAcceptorありません。
setParallelCountありません。
getParallelCountありません。
activate()生成時に指定されたTSCServer型のインスタンス
登録されているTSCAcceptor型のインスタンス
activate(const char*)生成時に指定されたTSCServer型のインスタンス
deactivate()生成時に指定されたTSCServer型のインスタンス
active状態のときregisterAcceptorの引数で指定されたTSCAcceptor型のインスタンス
(TSCRootAcceptorに登録されているTSCAcceptor型のインスタンス)

なお,TSCRootAcceptorクラスのインスタンスを解放したあと,このインスタンスを内部参照するインスタンスからのアクセスは,メモリアクセス違反となります。OTMはこのときの動作を保証しません。また,複数のスレッド上から同時に,TSCRootAcceptorクラスの同じインスタンスを内部参照できます。