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が終了している状態