Java プログラムは、CORBA オブジェクトを使用する前に、次のような方法で初期化する必要があります。
このページでは、次の内容について説明します。
CORBA オブジェクトを作成したり呼び出したりするには、アプレットまたはアプリケーションで ORB オブジェクトを作成しなければなりません。ORB オブジェクトを作成することで、アプレットまたはアプリケーションは、ORB から認識されるようになるとともに、その ORB オブジェクトで定義されている重要なオペレーションを利用できるようになります。
アプレットとアプリケーションでは、ORB のインスタンスの作成方法が多少異なります。これは、ORB.init() の呼び出し時に渡すパラメータが異なっているためです。
アプリケーションの場合、ORB は次のようにして作成します。
import org.omg.CORBA.ORB; public static void main(String args[]) { try{ ORB orb = ORB.init(args, null); // code continues
アプレットの場合、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() メソッドには次の引数を渡します。
init() オペレーションでは、システムプロパティに加えてこれらのパラメータを使用し、ORB の構成に必要な情報を取得します。init() オペレーションは、次の場所から次に示す順序で ORB の構成プロパティを探します。
特定のプロパティに対して最初に見つかった値が、init() オペレーションが使用する値になります。上記の場所のどこからも構成プロパティが見つからなかった場合、init() オペレーションは、自分自身の実装に固有の値を割り当てます。ORB の実装間で最大の可搬性を得るため、アプレットまたはアプリケーションの動作に影響する構成プロパティ値は ORB が決めるのに任せず、アプレットまたはアプリケーションの中で明示的に指定するようにする必要があります。
Sun の Java Virtual Machine では、システムの Properties オブジェクトに対してはコマンド行引数 -D を付加します。ほかの Java Virtual Machine は、コマンド行引数 -D を付加するものと付加しないものとがあります。
現在、ORB のすべての実装に対して次の構成プロパティが定義されています。
この 2 つの標準プロパティに加え、Java IDL では次のプロパティもサポートしています。
-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);
初期 CORBA オブジェクトの取得に文字列化された参照を使用しない場合は、ORB 自体を使用して初期オブジェクト参照を取得することになります。しかし、CORBA の仕様で初期オブジェクト参照を取得するためのインタフェースが定義されているものの、ORB ベンダーがそのインタフェースを標準的な方法で実装するのに十分な情報がまだ提供されていないため、初期オブジェクト参照の取得に ORB を使用すると、アプレットまたはアプリケーションは ORB に依存したものになってしまう可能性があります。そのため、仕様が厳密に規定されるまでは、このオペレーションは慎重に使用する必要があります。ORB の実装に依存しないようにするには、文字列化されたオブジェクト参照を使用してください。
ORB インタフェースでは、オブジェクト参照を新たに起動されたアプリケーションまたはアプレットにブートストラップすることを目的とした resolve_initial_references() というオペレーションが定義されています。このオペレーションは、認識されるオブジェクトのうちのいずれかを文字列引数としてとり、戻り値として CORBA オブジェクトを返します。返された値は、アプレットまたはアプリケーションが認識できる型にナロー変換する必要があります。現在のところ、次の 2 つの文字列値が定義されています。
Java IDL における resolve_initial_references() の実装では、ホストとポートが、前述した ORBInitialHost プロパティと ORBInitialPort か、そのデフォルト値により識別されるネームサービスが動作していることが必要です。Java IDL のネームサーバの起動方法の詳細については、「ネームサービス」を参照してください。
ホーム |