初期化


Java プログラムは、CORBA オブジェクトを使用する前に、次のような方法で初期化する必要があります。

ここでは、以下の項目について説明します。

ORB オブジェクトの作成

CORBA オブジェクトを作成したり呼び出したりするには、アプレットまたはアプリケーションで ORB オブジェクトを作成しなければなりません。ORB オブジェクトを作成することで、アプレットまたはアプリケーションは、ORB から認識されるようになるとともに、その ORB オブジェクトで定義されている重要なオペレーションを利用できるようになります。

アプレットとアプリケーションでは、ORB のインスタンスの作成方法が多少異なります。これは、ORB.init() の呼び出し時に渡すパラメータが異なっているためです。

ORB の作成: アプリケーションの場合

アプリケーションの場合、ORB は次のようにして作成します。

    import org.omg.CORBA.ORB;
 
    public static void main(String args[])
    {
      try{
        ORB orb = ORB.init(args, null); 
    // code continues

ORB の作成: アプレットの場合

アプレットの場合、ORB は次のようにして作成します。

    import org.omg.CORBA.ORB;
 
    public void init() {
      try {
        ORB orb = ORB.init(this, null);
    // code continues

Web ブラウザのなかには、内部に ORB が組み込まれているものがあります。このようなブラウザでは、組み込まれている ORB が完全準拠でない場合、問題が生じることがあります。このような場合は、特別な手順により Java IDL ORB の初期化を行う必要があります。たとえば、Netscape Communicator 4.01 にインストールされている ORB では、いくつかのクラスが欠けているため、Netscape Communicator 4.01 で表示するアプレットの init() メソッドには次のようなコードが含まれていなければなりません。

    import java.util.Properties;
    import org.omg.CORBA.*;

    public class MyApplet extends java.applet.Applet {
      public void init()
      {
        // Instantiate the Java IDL ORB, passing in this applet 
        // so that the ORB can retrieve the applet properties.
        Properties props = new Properties();
        props.put("org.omg.CORBA.ORBClass", "com.sun.CORBA.iiop.ORB");
        ORB orb = ORB.init(this, props);
        ...
      }
    }
 

ORB.init() の引数

アプリケーションの場合もアプレットの場合も、ORB.init() メソッドには次の引数を渡します。

args または this
アプリケーションの引数またはアプレットのパラメータに ORB からアクセスできるようにする
null
java.util.Properties オブジェクト

init() オペレーションでは、システムプロパティに加えてこれらのパラメータを使用し、ORB の構成に必要な情報を取得します。init() オペレーションは、次の場所から次に示す順序で ORB の構成プロパティを探します。

  1. アプリケーションまたはアプレットのパラメータ (第 1 引数)
  2. 指定されている場合は、java.util.Properties オブジェクト (第 2 引数)
  3. System.getProperties() によって返される java.util.Properties オブジェクト

特定のプロパティに対して最初に見つかった値が、init() オペレーションが使用する値になります。上記の場所のどこからも構成プロパティが見つからなかった場合、init() オペレーションは、自分自身の実装に固有の値を割り当てます。ORB の実装間で最大の可搬性を得るため、アプレットまたはアプリケーションの動作に影響する構成プロパティ値は ORB が決めるのに任せず、アプレットまたはアプリケーションの中で明示的に指定するようにする必要があります。

システムプロパティ

Sun の Java Virtual Machine* では、システムの Properties オブジェクトに対してはコマンド行引数 -D を付加します。 ほかの Java Virtual Machine は、コマンド行引数 -D を付加するものと付加しないものとがあります。

現在のところ、すべての ORB 実装に対して次の設定プロパティが定義されています。

org.omg.CORBA.ORBClass
org.omg.CORBA.ORB インタフェースを実装する Java クラス名。アプレットおよびアプリケーションは、特定の ORB 実装を保持する必要がない限り、このプロパティを提供する必要はありません。Java IDL ORB に対応する値は com.sun.CORBA.iiop.ORB です。
org.omg.CORBA.ORBSingletonClass
org.omg.CORBA.ORB インタフェースを実装する Java クラス名。これは、引数なしで orb.init() を呼び出す場合に返されるオブジェクトです。主として、セキュリティ保護された環境で、信頼できないコード (署名のないアプレットなど) 間で共有可能なタイプコードインスタンスを作成するために使用されます。

この 2 つの標準プロパティに加え、Java IDL では次のプロパティもサポートしています。

org.omg.CORBA.ORBInitialHost
ネームサービスなどの初期ブートストラップサービスを提供するサーバまたはデーモンが動作しているマシンのホスト名。このプロパティのデフォルト値は、アプリケーションの場合は localhost になります。アプレットの場合はアプレットホストで、getCodeBase().getHost() と同等です。
org.omg.CORBA.ORBInitialPort
初期ネームサービスが待機するポート。デフォルト値は 900 です。


注: プロパティを Java IDL アプリケーションへのコマンド行引数として指定する場合は、プロパティ名の org.omg.CORBA. の部分は省略してください。たとえば、アプリケーションを起動するコマンド行は次のような形式になります。
-ORBInitialPort 800

アプレットのパラメータとしては、完全なプロパティ名を指定してください。アプリケーションの場合のプロパティ名の指定方法はアプレットとは異なっており、コマンド行での起動時に言語固有の詳細情報を明示しません。


初期オブジェクト参照の取得

CORBA オブジェクトを呼び出すには、アプレットまたはアプリケーションは、オブジェクト参照を取得しなければなりません。CORBA オブジェクトの参照を取得するには、次の 3 つの方法があります。

文字列化されたオブジェクト参照

文字列化された参照を実際のオブジェクト参照に変換する最初の方法は、ORB の実装に依存しません。アプレットまたはアプリケーションがどのような Java ORB で実行されるとしても、文字列化されたオブジェクト参照の変換は可能です。ただし、次の点はアプレットまたはアプリケーションの開発者に任されます。

サーバで、CORBA オブジェクトの参照を文字列に変換する方法を次に示します。

org.omg.CORBA.ORB orb =    // get an ORB object
org.omg.CORBA.Object obj = // create the object reference
String str = orb.object_to_string(obj);
// make the string available to the client

クライアントで、文字列化されたオブジェクト参照をオブジェクトに戻す方法を次に示します。

org.omg.CORBA.ORB orb =    // get an ORB object
String stringifiedref =    // read string
org.omg.CORBA.Object obj = orb.string_to_object(stringifiedref);

ORB からの参照の取得

初期 CORBA オブジェクトの取得に文字列化された参照を使用しない場合は、ORB 自体を使用して初期オブジェクト参照を取得することになります。しかし、CORBA の仕様で初期オブジェクト参照を取得するためのインタフェースが定義されているものの、ORB ベンダーがそのインタフェースを標準的な方法で実装するのに十分な情報がまだ提供されていないため、初期オブジェクト参照の取得に ORB を使用すると、アプレットまたはアプリケーションは ORB に依存したものになってしまう可能性があります。そのため、仕様が厳密に規定されるまでは、このオペレーションは慎重に使用する必要があります。ORB の実装に依存しないようにするには、文字列化されたオブジェクト参照を使用してください。

ORB インタフェースでは、オブジェクト参照を新たに起動されたアプリケーションまたはアプレットにブートストラップすることを目的とした resolve_initial_references() というオペレーションが定義されています。オペレーションが取る文字列引数を使って、認識されたオブジェクトの 1 つに名前が付けられます。返される CORBA オブジェクトは、アプレットまたはアプリケーションが識別する型にナロー変換する必要があります。現在のところ、次の 2 つの文字列値が定義されています。

NameService
この値を渡すと、ルートネーミングコンテキストへの参照が返されます。ナロー変換後、アプレットまたはアプリケーションが名前を知っているオブジェクトの参照を検索するため、この参照を使用できます (オブジェクトが、ルートネーミングコンテキストか下位のネーミングコンテキストにその名前で登録されている場合)。
InterfaceRepository
この値を渡すと、インタフェース定義が含まれた CORBA オブジェクトであるインタフェースリポジトリへの参照が返されます。現在リリースされている Java IDL には、インタフェースリポジトリの実装は含まれていません。なお、ほかのサーバ側 ORB を使用する場合も、resolve_initial_references() への引数として InterfaceRepository を使用できます。

Java IDL における resolve_initial_references() の実装では、ホストとポートが、前述した ORBInitialHost プロパティと ORBInitialPort か、そのデフォルト値により識別されるネームサービスが動作していることが必要です。Java IDL のネームサーバの起動方法の詳細については、「ネームサービス」を参照してください。

* この Web サイトで使用されている用語「Java Virtual Machine」または「JVM」は、Java プラットフォーム用の仮想マシンを表します。


ホーム


Copyright © 1996, 1997 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA. 94043-1100 USA., All rights reserved.