オブジェクト・リクエスト・ブローカー (ORB) サービスのためのクライアント・サイド・プログラミングのヒント

Internet InterORB Protocol (IIOP) の要求および応答の交換は、 すべてクライアント・サイドの ORB とサーバー・サイドの ORB から構成されています。 IIOP を使用するアプリケーションは、 クライアント・サイドのオブジェクト・リクエスト・ブローカー (ORB) と 通信できるよう、正しくプログラムされていることが重要です。

IIOP を使用して要求および応答の交換を処理するアプリケーションが、 クライアント・サイドのオブジェクト・リクエスト・ブローカー (ORB) と 通信できるように、正しくプログラムされているかどうかを確認するには、 以下のヒントが役に立ちます。

サービスへの初期参照の解決

クライアント・アプリケーションでは、ネーミングなどのサービスの検出に ORB サービスで使用されるネットワーク・ロケーションを構成する際、ORBInitRef および ORBDefaultInitRef プロパティーを使用できます。 設定すると、 これらのプロパティーは、以下の例のように、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 インスタンスが使用されるときに発生する可能性のある、意図しない矛盾を回避できます。

JNDI による方法: Java EE アプリケーション (エンタープライズ Bean、Java EE クライアント、およびサーブレットを含む) の場合、以下の例のように、JNDI InitialContext オブジェクトを作成し、名前 java:comp/ORB で 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 コンポーネントによって共有されています。
トラブルの回避 (Avoid trouble) トラブルの回避 (Avoid trouble): アプリケーション内の WLM 機能とクラスター・フェイルオーバーを利用したい場合は、JNDI アプローチを使用する必要があります。サーバー・クラスターから InitialContext を取得する方法については、CORBA オブジェクト URL を複数のネーム・サーバー・アドレスと一緒に使用するための例を参照してください。この例については、プロバイダー URL プロパティーの設定による初期コンテキストの取得に関するトピックを参照してください。gotcha
CORBA による方法: シン・クライアント・アプリケーションは、Java EE コンテナー内では実行されないため、JNDI インターフェースを使用して ORB を検索することができません。 このような場合、以下のように、CORBA プログラミング・インターフェースを使用して、ORB インスタンスを取得することができます。
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 の制限

パフォーマンス上の理由から、Java EE アプリケーション内の複数のコンポーネント間で、単一の ORB インスタンスを共有すると有益な場合が多々あります。 Java EE 仕様 (バージョン 1.3) で要求されているように、すべての Web コンテナーおよび EJB コンテナーでは、java:comp/ORB として、JNDI 名前空間に ORB インスタンスが指定されています。各コンテナーでは、アプリケーション・コンポーネント間でこのインスタンスを共有することができますが、必ずしも共有する必要はありません。アプリケーション・コンポーネント間の適切な独立性を保つために、アプリケーション・コードは、以下の制限に準拠している必要があります。
  • 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 変数に組み込まれていることも確認してください。


トピックのタイプを示すアイコン 参照トピック



タイム・スタンプ・アイコン 最終更新: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rorb_orbprog
ファイル名:rorb_orbprog.html