3.7.3.7.5 説明
このメソッドを使用すると、現在実行されているオブジェクト(オブジェクトを呼び出したメソッドの終了時)、または別のオブジェクトを非アクティブ化することができます。このメソッドは、プロセス・バウンド・アクティブ化ポリシーが設定されたオブジェクトに対してのみ使用できます。このメソッドにより、processアクティブ化ポリシーが設定されたオブジェクトをさらに柔軟に扱うことができます。
ノート:
シングル・スレッド・サーバーの場合、TP::deactivateEnable(interface, object id, servant)メソッドを使用すると、オブジェクトを非アクティブ化できます。ただし、オブジェクトがトランザクションに参加している場合、オブジェクトが非アクティブ化されるのは、トランザクションがコミットまたはロールバックしたときです。トランザクションがコミットまたはロールバックする前にオブジェクトに対して呼出しが行われた場合、オブジェクトは非アクティブ化されません。必要な動作が確実に実行されるようにするには、オブジェクトがトランザクションに参加していないことを確認するか、TP::deactivateEnable()を呼び出してからトランザクションが終了するまでオブジェクトに対して呼出しが行われないようにします。
マルチスレッド・サーバーでは、オブジェクトごとのサーバーでオブジェクトを非アクティブにするためのTP::deactivateEnable(interface, object id, servant)メソッドの使用はサポートされません。このメソッドは、リクエストごとのサーバーでのオブジェクトの非アクティブ化ではサポートされますが、他のスレッドがオブジェクトを操作しているために非アクティブ化が遅延することがあります。
呼び出されるオーバーロード関数の種類によって、操作は次のようになります:
-
Current-object format - プロセス・アクティブ化ポリシーを設定されたオブジェクトのメソッド内から呼び出された場合、現在実行中のオブジェクトは、メソッドの実行が終了した後に非アクティブ化されます。
-
Any-object format - アプリケーションでは、
ObjectIdと関連付けられたサーバントを指定することで、オブジェクトの非アクティブ化をリクエストします。
非アクティブ化をリクエストされたオブジェクトにtransactionアクティブ化ポリシーが設定されていた場合、IllegalOperation例外が発生します。これは、こうしたオブジェクトを非アクティブ化すると、Oracle Tuxedoトランザクション・マネージャからのトランザクション終了の通知と競合する場合があるからです。
親トピック: TP::deactivateEnable()