POAManagerの生成
本来は、POAの状態を管理するのは、POAManagerの役割。そのため、POAManagerを生成する。
現在は、POAManagerとPOAは同一オブジェクトになっており、かつ、POAは、RootPOAしか許さないようになっているので、
PortableServer_POA__get_the_POAManager(poa, &env);の結果は、The_RootPOAと同じになる。
POAの活性化
POAManagerを介してPOAを有効化する。
PortableServer_POAManager_activate(poa_manager, &env);
前述のようにPOAManagerとPOAは同一オブジェクトと定義している。そのため、''PortableServer_POA_activate関数''を内部で呼んでいるのみである。
PortableServer_POA_activate関数
引数で与えられた PortableServer_POAの状態をチェックし、対応するSoket記述子にリクエストキューを生成する''PortableServer_enqueue_request関数''を''set_SockProfile関数''でcommand_procに登録する。
POAを活性化するには、状態が、''POA_HOLDING''である必要がある。
set_SockProfile関数
引数で与ええあれたSocket記述子に対応したsockport_prpofile構造体に、type、connection_proc、disconnect_proc、command_procの各コールバック関数をセットする。
ここで、typeは、''SOCK_CLOSED'', ''SOCK_SERVER'', ''SOCK_SERVICE'', ''SOCK_CLIENT''のどれかになる。CORBAサーバントの場合には、SOCK_SERVERがセットされる。
POAの状態
POAは、5つの状態を持つ。
- ''POA_HOLDING'': POAが生成された状態
- ''POA_ACTIVE'': POAが活性化している状態
- ''POA_INACTIVE'':POAが非活性の状態
- ''POA_DISCARDING'':POAが終了する前段階
- ''POA_TERMINATE'':POAが終了している状態