3.5.5 CORBAサーバー・アプリケーションの解放

CORBAサーバー・アプリケーションには、CORBAサーバー・アプリケーションを適切に停止するコードが必要です。release()メソッドは、その目的のために用意されています。release()メソッドの中では、次のようなCORBAサーバー・アプリケーションに固有のクリーンアップ・タスクを実行できます。

  • CORBAサーバー・アプリケーションで管理されるオブジェクト・ファクトリの登録解除
  • リソースの割当て解除
  • データベースのクローズ
  • XAリソース・マネージャのクローズ

停止のリクエストを受信したCORBAサーバー・アプリケーションは、ほかのリモート・オブジェクトからのリクエストを受信することができなくなります。このことは、管理タスクであるCORBAサーバー・アプリケーションの停止の順序に影響します。たとえば、あるサーバー・プロセスがあるとして、2番目のサーバー・プロセスのrelease()メソッドにその最初のサーバー・プロセスの呼出しが含まれている場合はそのサーバー・プロセスを停止しないでください。

サーバーを停止するときには、サーバー・アプリケーションの各ファクトリの登録を解除する必要があります。unregister_factory()メソッドの呼出しは、release()実装の最初のアクションとして行わなければなりません。unregister_factory()メソッドでは、サーバー・アプリケーションのファクトリの登録が削除されます。この操作では、次の入力引数が必要です。

  • ファクトリのオブジェクト参照
  • ファクトリ・オブジェクトのインタフェース・タイプコードに基づく文字列識別子(オブジェクトのOMG IDLインタフェースのインタフェース・リポジトリIDを識別するために使用します)

次のコード・スニペットには、サーバー・アプリケーションを解放し、CORBAサーバー・アプリケーションのファクトリを登録解除するC++コードが含まれています。

...
public void release() {
                TP::unregister_factory(
                        factory_reference.in(),
                        SimpleFactoryHelper - > id
                );
        }
        ...