3.7.1.4.5 説明

サーバー停止の最初のステップとして呼び出されるreleaseコールバック・メソッドを使用すると、サーバー・アプリケーションがアプリケーション固有のクリーンアップを実行できます。ユーザーは、仮想関数の定義をオーバーライドする必要があります。

このメソッドでアプリケーションによって実行される一般的なタスクは次のとおりです:

  • XAリソース・マネージャを閉じます。
  • Server::initialize()でFactoryFinderに登録されたCORBAオブジェクト・ファクトリの登録を解除します。
  • まだ解放されていないサーバー・リソースの割当てを解除します。

このメソッドは、通常は管理者またはオペレータからのtmshutdownコマンドに対して呼び出されます。

TPフレームワークには、Server::release()のデフォルト実装が用意されています。デフォルト実装は、サーバー用のXAリソース・マネージャを閉じます。この処理は、UBBCONFIGファイルでサーバーのグループに対してデフォルトとして構成されているCLOSEINFOを使用するtx_close()呼出しによって行われます。

アプリケーションでは、開かれているXAリソース・マネージャを閉じる必要があります。この処理には、以下のいずれかのメソッドを呼び出します。

  • TP::close_xa_rm()

    ノート:

    INSブートストラップ処理メカニズムを使用して初期オブジェクト参照を取得する場合は、TP::close_xa_rm()メソッドを使用する必要があります。
  • Tobj::TransactionCurrent::close_xa_rm()。TransactionCurrentオブジェクトのリファレンスは、Bootstrapオブジェクトから取得できます。Bootstrapオブジェクトのリファレンスの取得方法については、「TP::bootstrap()」を参照してください。TransactionCurrentオブジェクトの詳細は、「CORBAブートストラップ処理のプログラミング・リファレンス」『CORBAトランザクションの使用』を参照してください。

    ノート:

    サーバーがtmshutdown(1)コマンドから停止リクエストを受信すると、ほかのリモート・オブジェクトからのリクエストを受信できなくなります。サーバーを停止する場合、順序を考慮しなければならないことがあります。たとえば、サーバー1のServer::release()メソッドからサーバー2にあるオブジェクトのメソッドにアクセスする必要がある場合、サーバー1を停止してから、サーバー2を停止しなければなりません。特に、TP::unregister_factory()メソッドは、別のサーバーにあるFactoryFinder Registrarオブジェクトにアクセスします。通常、TP::unregister_factory()メソッドはrelease()メソッドから呼び出されるので、FactoryFinderサーバーは、Server::release()メソッドでTP::unregister_factory()を呼び出すすべてのサーバーの後に停止する必要があります。