5 CORBAオブジェクトを使用するクライアントの開発
この章の内容は次のとおりです。
CORBAオブジェクト・タイプの拡張と制限事項
CORBAの拡張と制限事項について学習します。RMI-IIOPランタイムが拡張され、すべてのCORBAオブジェクト・タイプ(RMI値タイプではなく)とCORBAスタブがサポートされるようになりました。
拡張の内容は次のとおりです。
-
outおよびin-outパラメータをサポートします
-
トランザクションおよびセキュリティを使用したWebLogic ServerからCORBAサービスへの呼出しのサポート
-
旧リリースで使用されていたJDK ORBのインスタンスではなく、JNDIでホストされるWebLogic ORBのサポート
CORBAオブジェクト・タイプのサポートには以下の制限があります。
-
WebLogic Serverインスタンスから別のWebLogic Serverインスタンスへの呼出しには使用できません。
-
クラスタリングはサポートされません。クラスタリングされたオブジェクト参照が検出されると、WebLogic Serverでは内部RMI-IIOPサポートによって呼出しが行われます。outおよびin-outパラメータはサポートされません。
-
ORB.connect()
によって作成されたCORBAサービスは、サーバー内でホストされる別のオブジェクトとなります。オブジェクトが不要になった場合、ORB.disconnect()
を使用して削除する必要があります。
発信CORBA呼出しの実行:主なステップ
発信呼出し用にCORBAを使用する顧客向け開発モデルを実装する手順について学習します。
次に、発信呼出し用にCORBA APIを使用する顧客向けに、典型的な開発モデルを実装するステップを示します。
-
JDKのIDLコンパイラであるidljを使用して、IDLからCORBAスタブを生成します。
-
javacを使用してスタブをコンパイルします。
-
jar内の生成済みスタブを含むEJBをビルドします。
-
JNDIでホストされるWebLogic ORBを使用して、外部サービスを参照します。
JNDIでホストされるWebLogic ORBの使用
この項にあげられている例を使用して、WebLogic ORBにアクセスする様々な仕組みについて学習します。これらのメカニズムは同じ効果を持つので、ある程度はそれらの構成要素を組合せられます。
narrow()
で返されるオブジェクトは、外部ORBサービスを表すCORBAスタブであり、通常のCORBA参照で呼び出せます。以下の各サンプル・コードでは、CORBAインタフェースがMySvcで、サービスはexthost:extport
にある外部ORBのCosNamingサービスの「where」でホストされるものとします。
JNDIからORB
次の例は、JNDIからWebLogic ORBにアクセスする方法を示しています。
例5-1 JNDIからWebLogic ORBへのアクセス
. . . ORB orb = (ORB)new InitialContext().lookup("java:comp/ORB"); NamingContext nc = NamingContextHelper.narrow(orb.string_to_object("corbaloc:iiop:exthost:extport/NameService")); MySvc svc = MySvcHelper.narrow( nc.resolve(new NameComponent[] { new NameComponent("where", "")})); . . .
ORBの直接作成
次の例は、WebLogic ORBの作成方法を示しています。
例5-2 ORBの直接作成
. . . ORB orb = ORB.init(); MySvc svc = MySvcHelper.narrow(orb.string_to_object("corbaname:iiop:exthost:extport#where")); . . .
JNDIの使用
次の例は、JNDIを使用してWebLogic ORBにアクセスする方法を示しています。
例5-3 JNDIを使用したWebLogic ORBへのアクセス
. . . MySvc svc = MySvcHelper.narrow(new InitialContext().lookup("corbaname:iiop:exthost:extport#where")); . . .
WebLogic ORBでは、DII (Dynamic Invocation Interface)を始めとするほとんどのクライアントORB機能がサポートされます。このサポートを利用するには、外部ORBをサーバー内でインスタンス化しないようにする必要があります。インスタンス化すると、WebLogic ORBによる統合メリットを活かせなくなります。
着信CORBA呼出しのサポート
WebLogic Serverでは、サーバー内でORBをホストする以外の方法として、基本的な着信CORBA呼出しもサポートされています。この方法では、CORBAインタフェースを実装するRMIオブジェクトを記述し、ORB.connect()
を使用してCORBAサーバーがWebLogic Server内部にパブリッシュされるようにします。
上記のMySVCサンプルの場合、次のようになります。
例5-4 着信CORBA呼出しのサポート
. . . class MySvcImpl implements MvSvcOperations, Remote { public void do_something_remote() {} public static main() { MySvc svc = new MySvcTie(this); InitialContext ic = new InitialContext(); ((ORB)ic.lookup("java:comp/ORB")).connect(svc); ic.bind("where", svc); } } . . .
起動クラスとして登録すると、CORBAサービスを「where」に指定されたWebLogic ServerのCosNamingサービスで使用できるようになります。