サーバプロセス内では、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++インスタンスを生成し、サーバメソッドを呼び出します。
オブジェクトのインタフェースが登録されている場合
クライアントにシステム例外を通知します。