3.7.2.4.4 説明

オブジェクトの非アクティブ化は、CORBAオブジェクトの実装に設定されているアクティブ化ポリシーに従って、システムまたはアプリケーションによって開始されます。deactivate_object() メソッドは、CORBAオブジェクトが非アクティブ化される前に呼び出されます。これらのポリシーおよび使い方については、「ICFの構文」を参照してください。

非アクティブ化は、CORBAオブジェクトの実装のアクティブ化ポリシーがmethodの場合は、クライアントによって呼び出されたメソッドの実行後に、アクティブ化ポリシーがtransactionの場合は、トランザクション処理の終了の結果として発生する可能性があります。また、アクティブ化ポリシーがtransactionまたはprocessの場合に、サーバーが停止されると発生します。

さらに、Oracle Tuxedoソフトウェアでは、TP::deactivateEnable()およびTP::deactivateEnable(-,-,-)メソッドを使用することにより、processまたはmethodのアクティブ化ポリシーを持つCORBAオブジェクトをユーザー制御で非アクティブ化することができます。TP::deactivateEnableをオブジェクトのメソッド内で呼び出すと、メソッドの終了時にそのオブジェクトが非アクティブ化されます。transactionアクティブ化ポリシーが設定されたオブジェクトでTP::deactivateEnableを呼び出すと、例外(TobjS::IllegalOperation)が発生し、TPフレームワークは何の処理も行いません。processアクティブ化ポリシーが設定されたオブジェクトに対してTP::deactivateEnable(-,-,-)を呼び出すと、そのオブジェクトは非アクティブ化されます。詳細は、「TP::deactivateEnable()」を参照してください。

ノート:

deactivate_objectメソッドは、サーバーの停止時に、アクティブ・オブジェクト・マップに残っている各オブジェクト - TPフレームワークによって暗黙的に登録される場合(オンデマンド・アクティブ化手法TP::create_servantとサーバントのactivate_objectメソッド)と、ユーザーによりTP::create_active_object_referenceで明示的に登録される場合があります - に対して呼び出されます。

プログラマは、activate_object()およびdeactivate_object()メソッドとクライアントが明示的に呼び出すメソッドを使用して、オブジェクトの状態を管理できます。これらのメソッドを使用してオブジェクトの状態を管理する方法は、アプリケーションのニーズによって異なります。これらのメソッドの使用方法は、「CORBAサーバー・アプリケーションの作成」を参照してください。

transactionアクティブ化ポリシーが設定されたCORBAオブジェクトでは、DR_TRANS_COMMITTING理由コードでdeactivate_object()メソッドが呼び出されたときに、トランザクションの結果に関して判断できます。このメソッドは、Current.rollback_only()メソッドを呼び出すことで、トランザクションをロールバックさせることができます。そうでない場合は、2フェーズ・コミット・アルゴリズムが続行されます。トランザクションは、Current.rollback_only()がこのメソッドで呼び出されなかったという理由以外でもコミットされないことがあります。トランザクションに関与するその他のCORBAオブジェクトまたはリソース・マネージャも、トランザクションのロールバックを支持できます。