サーバプロセス内ではCORBAオブジェクトとC++インスタンスの対応関係は1:1となります。そのため、同じオブジェクトを複数クライアントで共用する場合、サーバ側のC++インスタンスは同一のものが使用されます。
サーバ側のC++インスタンスはオブジェクトを使用した初回アクセス時にメソッド呼び出し直前で作成され、以下の条件の時に解放されます。
CORBA::ORB::unbind_object()を発行してバインド関係を解除した場合。
セションタイムアウトが発生した場合。
CORBA::ORB::unbind_object()を発行した場合、以下のタイミングでインスタンスは解放されます。
スケルトンからの復帰後、かつ
該当のインスタンスに対してクライアントからのアクセスが行われていない
例えば、CORBA::ORB::unbind_object()が発行された時点で複数クライアントから該当インスタンスにアクセスがあった場合、最後のクライアントアクセス後にスケルトンから復帰した直後にインスタンスが解放されます。
注意事項
セション継続用オブジェクトに対応するインスタンスが解放された後に、クライアントからセション継続用オブジェクトを使用したアクセスが行われた場合、オブジェクトのインタフェースがCORBA::ORB::set_unbinded_object_rejecting()で登録されているか否かで動作が異なります。
オブジェクトのインタフェースが登録されていない場合
新しくC++インスタンスを生成し、サーバメソッドを呼び出します。
オブジェクトのインタフェースが登録されている場合
クライアントにシステム例外を通知します。