bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo CORBA プログラミング・リファレンス

 Previous Next Contents View as PDF  

Tobj_ServantBase::deactivate_object()

概要

オブジェクト ID とサーバントとの関連付けを削除します。このメソッドを使用すると、アプリケーションでは、オブジェクトが非活性化される前にオブジェクトの状態のすべてまたは一部を保存できます。状態は、共用メモリ、通常のフラット・ファイル、またはデータベース・ファイルに保存できます。

C++ バインディング

class Tobj_ServantBase : public PortableServer::ServantBase {
public:
virtual void deactivate_object(const char* stroid,
TobjS::DeactivateReasonValue reason) {}
};

引数

stroid

オブジェクト ID を文字列形式で指定します。 オブジェクト ID は、クラスのこのインスタンスを一意に識別します。

注記 このリリースでは、オブジェクト ID の長さに関する制約がなくなりました。

reason

このメソッドを呼び出す原因となったイベントを示します。reason コードは、以下のいずれかです。

DR_METHOD_END

メソッドの終了後にオブジェクトが非活性化されることを示します。オブジェクトの非活性化方針が次の場合に使用されます。

- method

- transaction (アクティブなトランザクションがない場合のみ)

- process (TP::deactivateEnable() が呼び出された場合)

DR_SERVER_SHUTDOWN

サーバが通常の方法でシャットダウンされるためにオブジェクトが非活性化されることを示します。オブジェクトの非活性化方針が次の場合に使用されます。

- transaction (トランザクションがアクティブな場合のみ)

- process

サーバを通常の方法でシャットダウンする場合、そのサーバが関与しているすべてのトランザクションがロールバックの対象としてマークされることに注意してください。

DR_TRANS_ABORTED

この reason コードは、transaction 活性化方針が設定されたオブジェクト専用です。これは、トランザクションがクライアントまたはシステムによって自動的に開始された場合に発生します。 deactivate_object() メソッドがこの理由コードで呼び出された場合、トランザクションはロールバック対象としてマークされます。

DR_TRANS_COMMITTING

この reason コードは、transaction 活性化方針が設定されたオブジェクト専用です。これは、トランザクションがクライアントまたは TP フレームワークによって開始された場合に発生します。これは、オブジェクトが呼び出されたトランザクションに対して Current.commit() オペレーションが呼び出されたことを示します。deactivate_object() メソッドは、トランザクション・マネージャが 2 フェーズ・コミット・アルゴリズムを開始する直前、つまり prepare がリソース・マネージャに送信される前に呼び出されます。

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

DR_EXPLICIT_DEACTIVATE

アプリケーションがこのオブジェクトに対して TP::deactivateEnable(-,-,-) を実行したためにオブジェクトが非活性化されることを示します。これは、process 活性化方針を設定されたオブジェクトに関してのみ発生します。

説明

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

CORBA オブジェクトのインプリメンテーションの活性化方針が method の場合にクライアントによって呼び出されるメソッド、または活性化方針が transaction の場合にトランザクションの処理が終わったときに呼び出されるメソッドの実行後に、非活性化が発生する場合もあります。また、活性化方針が transaction または process の場合に、サーバがシャットダウンされると発生します。

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

注記 サーバのシャットダウン時には、アクティブ・オブジェクト・マップに残っているすべてのオブジェクトに対して deactivate_object メソッドが呼び出されます。オブジェクトが AOM に追加される方法としては、TP フレームワークによって暗黙的に追加される場合 (オンデマンド活性化手法。TP::create_servant とサーバントの activate_object メソッド) と、ユーザが TP::create_active_object_reference を使用して明示的に追加する方法があります。

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

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

制約

このメソッドが呼び出されたときにオブジェクトがトランザクションに関与している場合、オブジェクトが呼び出された理由に基づいて、実行可能な処理が制約されます。オブジェクトがトランザクションに関与していた場合、活性化方針が transaction で、呼び出しの reason コードは以下のいずれかです。

DR_TRANS_ABORTED

このメソッドでは、CORBA オブジェクトを呼び出せません。tpcall() は許可されません。トランザクションを一時停止したり開始したりすることはできません。

DR_TRANS_COMMITTING

このメソッドでは、CORBA オブジェクトを呼び出せません。tpcall() は許可されません。トランザクションを一時停止したり開始したりすることはできません。

こうした制約がある理由は、トランザクション・バウンドの活性化方針を設定されたオブジェクトの非活性化が、トランザクションのトランザクション・マネージャから TP フレームワークに対する呼び出しによって制御されるからです。reason コード DR_TRANS_COMMITTING で呼び出しが行われた場合、トランザクション・マネージャは 2 フェーズ・コミットのフェーズ 1 (準備) を実行しています。この段階では、トランザクションを一時停止する呼び出し、または新しいトランザクションを開始する呼び出しを行うことはできません。別のプロセス内の CORBA オブジェクトを呼び出すにはそのプロセスがトランザクションに参加する必要があり、トランザクション・マネージャは既に準備フェーズを実行しているので、この呼び出しを行うとエラーが発生します。
1. トランザクションに関与していない CORBA オブジェクトを呼び出すには、そのトランザクションを一時停止する必要があるので、これもエラーの原因となります。同じことは tpcall() にもあてはまります。

同じように、reason コード DR_TRANS_ABORTED での呼び出しが行われた場合、トランザクション・マネージャは既にアボート中です。トランザクション・マネージャがアボート中の場合、トランザクションを一時停止したり、新しいトランザクションを開始したりすることはできません。この制約は、DR_TRANS_COMMITTING に関しても適用されます。

戻り値

特にありません。

例外

クライアントによって呼び出される CORBA オブジェクト・メソッドで例外が発生した場合、TP フレームワークが例外をキャッチして、最終的にクライアントに返します。これは、deactivate_object() を呼び出して例外が発生した場合にもあてはまります。

クライアントには、deactivate_object() で発生した例外について通知されません。アプリケーション・コードでは、格納されている CORBA オブジェクトの状態が矛盾していないかどうかをチェックする必要があります。たとえば、アプリケーション・コードで、deactivate_object() がオブジェクトの状態を正しく保存したかどうかを示す永続性フラグを保存すると便利です。このフラグを activate_object() でチェックします。

deactivate_object() の実行中にエラーが発生した場合、アプリケーション・コードでは、CORBA 標準例外または DeactivateObjectFailed 例外を生成する必要があります。deactivate_object() が TP フレームワークで呼び出されると、TP フレームワークは例外をキャッチして、以下のイベントが発生します。

TobjS::DeactivateObjectFailed

"TPFW_CAT:27: ERROR: De-activating object - application raised TobjS::DeactivateObjectFailed. Reason = reason. Interface = interfaceName, OID = oid"

reason はユーザ指定の理由を示し、interfaceNameoid はそれぞれ呼び出された CORBA オブジェクトの インターフェイスID とオブジェクト ID を示します。

CORBA::Exception

"TPFW_CAT:28: ERROR: De-activating object - CORBA Exception not handled by application. Exception ID = exceptionID. Interface = interfaceName, OID = oid"

exceptionID は例外のインターフェイス ID を示し、interfaceNameoid はそれぞれ呼び出された CORBA オブジェクトのインターフェイス ID とオブジェクト ID を示します。

その他の例外

"TPFW_CAT:29: ERROR: De-activating object - Unknown Exception not handled by application. Exception ID = exceptionID. Interface = interfaceName, OID = oid"

exceptionID は例外のインターフェイス ID を示し、interfaceNameoid はそれぞれ呼び出された CORBA オブジェクトのインターフェイス ID とオブジェクト ID を示します。

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy