14.11.1.4 説明

このメンバー関数は、ORBの操作を初期化して、ORBへのポインタを返します。ORBでプログラミングする場合は、CORBA::releaseメンバー関数を使用して、CORBA::ORB_ptr ORB_initから返されたORBポインタに割り当てられたリソースを解放します。

返されるORBは、クライアント・タイプ(リモートまたはネイティブ)とサーバー・ポート番号という、処理方法を決定する2つの情報で初期化されています。クライアントのタイプは、orb_identifier引数、argv引数、またはシステム・レジストリで指定できます。サーバーのポート番号は、argv引数で指定できます。

通常、引数argcargvは、メイン・プログラムに渡されたパラメータと同じです。C++での指定のように、これらのパラメータには、クライアントを起動したコマンド行の文字列トークンが格納されます。2つのORBオプションは、以下の例で示すように、トークンのペアをそれぞれ使用してコマンド行で指定できます。

クライアント・タイプ

ORB_init関数は、次のステップでORBのクライアントのタイプを判別します。

  1. orb_identifier引数が指定されている場合、ORB_initは、文字列が"BEA_IIOP""BEA_TOBJ"かによって、クライアントのタイプがネイティブかリモートかを判別します。orb_identifier文字列がある場合、argvの -ORBidパラメータはすべて無視または削除されます。
  2. orb_identifierが指定されていないか、または明示的にゼロに指定されている場合、ORB_initargc/argvのエントリを確認します。argv"-ORBid"のエントリがある場合、次のエントリは、リモートまたはネイティブを表す"BEA_IIOP""BEA_TOBJ"のどちらかになります。このエントリのペアが出現するのは、コマンド行に"-ORBid BEA_IIOP"または"-ORBid BEA_TOBJ"のどちらかがある場合です。
  3. クライアントのタイプがargc/argvで指定されていない場合、ORB_initは、システム・レジストリのデフォルトのクライアントのタイプ(BEA_IIOPまたはBEA_TOBJ)を使用します。システム・レジストリは、Oracle Tuxedoのインストール時に初期化されています

サーバー・ポート

Oracle Tuxedoリモート共同クライアント/サーバーの場合、IIOPをサポートするために、定義上、サーバー用に作成されたオブジェクト参照にホストとポートが含まれている必要があります。一時オブジェクト参照の場合、ORBで動的に任意のポートを取得できます。しかし、これは永続オブジェクト参照には適用できません。永続的なリファレンスの場合、ORBの再起動後に同じポートを指定する必要があります。つまり、ORBでは、オブジェクト参照が作成されたのと同じポートでリクエストを受け付けなければなりません。このように、特定のポートを使用するようにORBを構成する方法は複数あります。

通常、システム管理者は、動的範囲ではなくポート番号の「ユーザー」範囲からクライアントのポート番号を割り当てます。これにより、共同クライアント/サーバーでポートの競合を防ぐことができます。

ポート番号を決定するために、ORB_initargvパラメータでトークン"-ORBport"とそれに続く数値トークンを検索します。たとえば、クライアントの実行可能ファイルの名前がsherryの場合、コマンド行では次のようにサーバーのポート937に指定します:

sherry -ORBport 937

ARGVパラメータの考慮事項

C++の場合、argvパラメータの処理順序がアプリケーションでは重要になります。アプリケーションで認識されないargvパラメータをアプリケーションで確実に処理不要にするには、ORB初期化関数を呼び出してから、残りのパラメータを処理する必要があります。したがって、ORB_initを呼び出した後、argvおよびargcパラメータは、ORBで認識された引数を削除するために変更されています。この際に重要なのは、ORB_init関数が、argvリストのパラメータの参照の順序変更または削除しかできない点です。この制限が設けられたのは、argvリストの一部の解放を試行したり、パラメータのargvリストの拡張を試行したりすることで発生する可能性のあるメモリー管理上の問題を防ぐためです。このような理由から、argvは、char**&ではなくchar**として渡されます。

ノート:

CORBA::ORB_initから返されたポインタに割り当てられたリソースを解放するには、CORBA::releaseメンバー関数を使用します。