オブジェクト・リクエスト・ブローカー (ORB) サービスのためのクライアント・サイド・プログラミングのヒント
Internet InterORB Protocol (IIOP) の要求および応答の交換は、 すべてクライアント・サイドの ORB とサーバー・サイドの ORB から構成されています。 IIOP を使用するアプリケーションは、 クライアント・サイドのオブジェクト・リクエスト・ブローカー (ORB) と 通信できるよう、正しくプログラムされていることが重要です。
IIOP を使用して要求および応答の交換を処理するアプリケーションが、 クライアント・サイドのオブジェクト・リクエスト・ブローカー (ORB) と 通信できるように、正しくプログラムされているかどうかを確認するには、 以下のヒントが役に立ちます。
サービスへの初期参照の解決
org.omg.CORBA.ORB.init(java.lang.String[] args,
java.util.Properties props)
これらのプロパティーは、クライアント・コード内またはコマンド行の引数で設定することができます。複数の ORBInitRef プロパティー設定 (それぞれのサービスごとに 1 つ) を使用すると、 複数のサービス・ロケーションを指定することができますが、指定できる単一の値は ORBDefaultInitRef のみです。 2 つのプロパティー、および ORB が、 サービスを探す際に使用する優先順位の詳細に ついては、CORBA/IIOP の仕様書を参照してください。
クライアント・コードで設定する場合、これらのプロパティーは、それぞれ、com.ibm.CORBA.ORBInitRef.service_name および com.ibm.CORBA.ORBDefaultInitRef です。例えば、ポート 2809 の sample.server.com にある ネーミング・サービス (NameService) を指定する場合は、 com.ibm.CORBA.ORBInitRef.NameService プロパティーを corbaloc::sample.server.com:2809/NameService に設定します。
コマンド行の引数を使用して 設定する場合、これらのプロパティーはそれぞれ、-ORBInitRef および -ORBDefaultInitRef です。前に指定したのと同じネーミング・サービスを見つけるには、以下の Java コマンドを使用します。
ORB でサポートされるサービスに対してこれらのプロパティーを設定した後、Java Platform, Enterprise Edition (Java EE) アプリケーションは、CORBA/IIOP 仕様の定義に従って、ORB で resolve_initial_references 関数を呼び出し、指定されたサービスへの初期参照を取得します。
ORB インスタンスの取得に適した API
Java EE アプリケーションの場合、以下のいずれかの方法を使用することができます。 ただし、Java Naming and Directory Interface (JNDI) による方法を使用して、クライアント・アプリケーション全体で必ず同じ ORB インスタンスが使用されるようにすることを強くお勧めします。 こうすることで、異なる ORB インスタンスが使用されるときに発生する可能性のある、意図しない矛盾を回避できます。
javax.naming.Context ctx = new javax.naming.InitialContext();
org.omg.CORBA.ORB orb =
(org.omg.CORBA.ORB)javax.rmi.PortableRemoteObject.narrow(ctx.lookup("java:comp/ORB"),
org.omg.CORBA.ORB.class);
JNDI を使用して取得された ORB インスタンスは、singleton オブジェクトであり、同じ Java 仮想マシン・プロセスで実行されているすべての Java EE コンポーネントによって共有されています。
java.util.Properties props = new java.util.Properties();
java.lang.String[] args = new java.lang.String[0];
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, props);
JNDI による方法とは異なり、CORBA 仕様の場合、ORB.init メソッドが呼び出されるたびに 新規 ORB インスタンス が作成されるよう要求されます。 ORB のデフォルト設定を変更する必要がある 場合は、ORB.init メソッド呼び出しに 渡される Properties オブジェクトに、ORB プロパティー設定を追加することができます。
この製品の以前のリリースでサポートされていた、 com.ibm.ejs.oa.EJSORB.getORBinstance メソッドは使用されなくなりました。
Java EE アプリケーション・コンポーネント間で ORB インスタンスを共有する場合の API の制限
- ORB シャットダウンを呼び出したり、メソッドを破棄したりしないでください。
- org.omg.CORBA_2_3.ORB の register_value_factory メソッド、 または unregister_value_factory メソッドを 呼び出さないでください。
また、ORB インスタンスは、異なる Java EE アプリケーションのアプリケーション・コンポーネント間では共有しないでください。
IBM Developer Kit に同梱されている rmic および idlj の使用
この製品で使用される Java ランタイム環境 (JRE) には、ツール rmic および idlj が組み込まれています。 これらのツールは、CORBA/IIOP プロトコル用の Java 言語バインディングを生成する際に使用します。
製品のインストール時、 これらのツールは app_server_root/java/ibm_bin ディレクトリーにインストールされます。 $JAVA_HOME/bin ディレクトリーにある Java Development Kit に組み込まれているこれらのツール (この製品とともにインストールされる IBM Developer Kit を除く) のバージョンには、この製品との互換性がありません。
この製品をインストールすると、$PATH 検索順序に app_server_root/java/ibm_bin ディレクトリーが組み込まれ、IBM によって提供される rmic および idlj スクリプトを使用できるようになります。 このスクリプトは、JRE 標準の app_server_root/java/bin ディレクトリーではなく、app_server_root/java/ibm_bin ディレクトリーに入っているため、IBM によって提供されたものではない JRE に保守を適用する際に、上書きされることはありません。
rmic および idlj ツールに加えて、JRE にはインターフェース定義言語 (IDL) のファイルも組み込まれています。 このファイルはオブジェクト管理グループ (OMG) が定義するファイルに基づくもので、選択した ORB インターフェースの IDL 定義を必要とするアプリケーションで使用できます。 このファイルは app_server_root/java/ibm_lib ディレクトリーにあります。
rmic または idlj ツールのいずれかを使用する前に、app_server_root/java/ibm_bin ディレクトリーが、環境内の適切な PATH 変数検索順序に組み込まれていることを確認してください。 アプリケーションが app_server_root/java/ibm_lib ディレクトリーにある IDL ファイルを使用する場合は、そのディレクトリーが PATH 変数に組み込まれていることも確認してください。