モジュール java.corba

パッケージ org.omg.CosNaming

Java IDLのネーム・サービスを提供します。 Object Request Broker Daemon (ORBD)にも一時的および永続的なネーム・サービスがあります。

このパッケージ、およびこのパッケージに含まれているすべてのクラスおよびインタフェースは、OMG IDLで記述されたモジュールであるファイルnameservice.idlで、idljツールを実行することにより生成されています。

パッケージの仕様

Java(TM) Platform, Standard Edition 6 ORBが準拠する公式の仕様のサポート・セクションの正確なリストは、「Java(TM) SE 6での正式なCORBAサポート仕様」を参照してください。

インタフェース

パッケージorg.omg.CosNamingには、2つのpublicインタフェースと、いくつかの補助クラスが含まれています。

インタフェースは次の2つです。

  • NamingContext
  • BindingIterator

この2つのインタフェースは、名前とオブジェクト参照のバインドとアンバインド、バインドされたオブジェクト参照の取得、およびバインディングをリストから次々に返すための手段を提供します。 NamingContextインタフェースは、ネーム・サービスの主要な機能を提供し、BindingIteratorインタフェースは、名前とオブジェクト参照のバインディングをリストから次々に返すための手段を提供します。

補助クラス

OMG IDLインタフェースをJavaプログラミング言語にマッピングするために、idljコンパイラは、補助クラスとみなされるJavaクラスを作成します。 生成された補助クラスは、NamingContextインタフェースおよびBindingIteratorインタフェースによって使用されます。補助クラスについてのコメントを次に示します。

NamingContextおよびBindingIteratorによって使用されるクラス

ネーム・サービスによって使用されるクラスを次に示します。 これらのクラスそれぞれに対して生成されるヘルパー・クラスおよびホルダー・クラスについてはあとで説明します。
  • public final class NameComponent -- 名前の基本単位です。 名前は、ネーミング・コンテキストでオブジェクト参照にバインドされます。

    名前は、1つまたは複数のNameComponentオブジェクトから成る配列です。 1つのNameComponentを持つ名前を単純名と呼び、複数のNameComponentオブジェクトを持つ名前を複合名と呼びます。

    NameComponentオブジェクトは2つのフィールドから構成されています。

    1. id -- 識別子として使用されるString
    2. kind -- 記述の目的で使用されるString これは、構文に影響を与えることなくオブジェクトを記述できるという点で重要。 たとえば、Cプログラミング言語では、ソース・コード・ファイルであることを示すために、ファイル名に「.c」拡張子を付加する構文規則が用いられる。 NameComponentオブジェクトでは、ファイル拡張子などの構文規則を使用せず、kindフィールドを使用してオブジェクトの型を記述できる。 kindフィールドの値の例としては、"c_source""object_code""executable""postscript"""などの文字列がある。 kindフィールドが空の文字列であることもある。

    名前では、最後以外の各NameComponentオブジェクトはNamingContextオブジェクトを表します。最後のNameComponentオブジェクトはバインドされているオブジェクト参照を表します。 これは、最後の名前がファイル名で、その前のすべての名前がディレクトリ名を表すパス名の形式と似ています。

  • public final class Binding -- 名前をオブジェクト参照またはネーミング・コンテキストに関連したオブジェクト。 Bindingオブジェクトには次の2つのフィールドがある。
    1. binding_name - バウンド名を表す1つまたは複数のNameComponentオブジェクトの配列
    2. binding_type - 名前とオブジェクト参照のバインディングか、名前とネーミング・コンテキストのバインディングかを示すBindingTypeオブジェクト

    NamingContextインタフェースには、名前とオブジェクト参照または名前とネーミング・コンテキストのバインドやアンバインド、バインディングのリストの取得、バインディングの解決(名前を指定すると、resolveメソッドがその名前にバインドされているオブジェクト参照を返す)のためのメソッドがあります。

  • public final class BindingType -- 指定されたBindingオブジェクトが、名前と(ネーミング・コンテキストではなく)オブジェクト参照のバインドか、あるいは名前とネーミング・コンテキストのバインドかを指定するオブジェクト。

    BindingTypeクラスは、2つのメソッドと4つの定数からなります。 それらの定数のうちの2つはBindingTypeオブジェクトで、残りの2つはintです。

    BindingTypeオブジェクトは、Bindingクラスのコンストラクタに渡したり、パラメータまたは戻り値として使用したりすることができます。 BindingTypeオブジェクトには、次のものがあります。

    • public static final BindingType nobject -- オブジェクト参照とのバインディングであることを示す
    • public static final BindingType ncontext -- ネーミング・コンテキストとのバインディングであることを示す

    int定数は、BindingTypeオブジェクトを作成するfrom_intメソッドに指定したり、valueメソッドの戻り値として使用したりすることができます。 このような定数には次のものがあります。

    • public static final int _nobject
    • public static final int _ncontext
    from_intメソッドに_nobjectまたは_ncontext以外何も指定されなかった場合は、org.omg.CORBA.BAD_PARAM例外がスローされます。

    使用例を次に示します。

           BindingType btObject = from_int(_nobject);
           BindingType btContext = from_int(_ncontext);
        
    変数btObjectは、オブジェクト参照とのバインディングを表すために初期化されたBindingTypeオブジェクトを参照します。 変数btContextは、NamingContexオブジェクトとのバインディングを表すために初期化されたBindingTypeオブジェクトを参照します。

    valueメソッドは_nobjectまたは_ncontextを返します。したがって次のコードでは、変数btには_nobjectまたは_ncontextが格納されます。

           int bt = BindingType.value();
        

ホルダー・クラス

OMG IDLは、操作から値を返すためにOUTパラメータおよびINOUTパラメータを使用します。 OUTパラメータおよびINOUTパラメータを持たないJavaプログラミング言語へマッピングすることにより、それぞれの型にホルダー・クラスと呼ばれる特殊なクラスが作成されます。 ホルダー・クラスのインスタンスは、パラメータとしてJavaメソッドに渡すことができ、値をvalueフィールドに代入できます。 これにより、OUTパラメータまたはINOUTパラメータの機能を果たすことができます。

org.omg.CosNamingパッケージでは、次のホルダー・クラスが生成されます。

  • NamingContextHolder
  • BindingIteratorHolder
  • BindingHolder
  • BindingListHolder
  • BindingTypeHolder
  • NameComponentHolder
  • NameHolder

org.omg.CORBAパッケージでは、Javaの基本型のそれぞれについて、ホルダー・クラス(IntHolderShortHolderStringHolderなど)があります。

また、Nameクラスがない場合でもNameHolderクラスがあります。同様に、BindingListクラスがない場合でもBindingListHolderがあります。 これは、OMG IDLインタフェースでは、NameおよびBindingListtypedefであるためです。 IDLのtypedefからJavaの構造体へのマッピングはできませんが、typedefがシーケンス用または配列用である場合はホルダー・クラスが生成されます。 Javaプログラミング言語にマッピングされた場合は、NameNameComponentオブジェクトの配列になり、BindingListBindingオブジェクトの配列になります。 すべてのホルダー・クラスには少なくとも2つのコンストラクタと1つのフィールドがあります。

  • valueフィールド -- OUTパラメータまたはINOUTパラメータとして使用される型のインスタンス。 たとえば、NamingContextHoldervalueフィールドはNamingContextオブジェクトになる。
  • デフォルト・コンストラクタ -- 型のデフォルト値を使用して初期化されたホルダー・オブジェクトを新しく生成するコンストラクタ。 たとえば、デフォルト・コンストラクタで生成された新しいBindingHolderオブジェクトのvalueフィールドはnullに設定される。これは、その値がオブジェクトのデフォルト値であるため。 この他のデフォルト値としては、booleanfalse、numeric型およびchar型の0、オブジェクト参照のnullなどがある。
  • インスタンスからのコンストラクタ -- 指定されたインスタンスを使ってvalueフィールドが初期化されたホルダー・オブジェクトを新しく生成するコンストラクタ

ユーザー定義型(Javaクラス)のホルダー・クラスには、このほかに3つのメソッドがありますが、アプリケーション開発者が直接これらのメソッドを使うことはありません。

ヘルパー・クラス

OMG IDLインタフェースのすべてのユーザー定義型で生成されるヘルパー・クラスは、ユーザー定義型の操作に必要なstaticメソッドを提供します。

ヘルパー・クラスには、アプリケーション・プログラマが使用するメソッドが1つだけあります。narrowメソッドです。 IDLインタフェースからマッピングされたJavaインタフェースのみが、narrowメソッドのあるヘルパー・クラスを持ちます。このため、CosNamingパッケージでは、NamingContextHelperクラスとBindingIteratorHelperクラスのみにnarrowメソッドがあります。

  • public static NamingContext narrow(org.omg.CORBA.Object obj) -- 指定されたCORBAオブジェクトをNamingContextオブジェクトに変換する
  • public static BindingIterator narrow(org.omg.CORBA.Object obj) -- 指定されたCORBAオブジェクトをBindingIteratorオブジェクトに変換する

パッケージorg.omg.CosNaming.NamingContextPackage

このパッケージは、org.omg.CosNamingパッケージで使用される例外と、NotFound例外の理由を提供するNotFoundReasonクラスのHelperクラスおよびHolderクラスを提供します。

次の例外のHelperクラスおよびHolderクラスがあります。

  • AlreadyBound
  • CannotProceed
  • InvalidName
  • NotEmpty
  • NotFound

ネーム・サービス互換性

SunのCosNamingパッケージの実装は、OMG COSNaming仕様に従っています。 つまり、Sunのネーム・サービスのAPIは、OMGが提供するネーム・サービスのガイドラインに従って実装されます。 したがって、サード・パーティのベンダーがOMG準拠のネーム・サービスを実装していれば、SunのCosNamingの実装とサード・パーティのベンダーの実装との間での切替えが可能です。 ただし、例外文字列の相違など、ネーム・サービスを実装するベンダーによって多少の違いがあることを理解しておく必要があります。

サード・パーティのネーム・サービスを使用する際のガイド

同じベンダーのORBとORBサービスを使うことをお勧めしますが、Sun以外のCOSNaming実装にSunのRMI-IIOP ORBを接続することも可能です。 次のステップに従います。
  1. Bootstrapサーバーにプロパティ・ファイルを作成し、そのファイルに2つのエントリを作成します。 たとえば、このプロパティ・ファイルを/tmp/servicesと名付けて、そのファイルにNameService,<Stringified IOR of the Root Naming Context>を入れます。

    これによって、NameServiceと、使いたいCosNaming実装のRoot Naming Contextとが関連付けられます。

  2. 次のコマンドを使って、スタンドアロンBootstrapサーバーを起動します。
          
          java -classpath $(CLASSPATH)
          com.sun.corba.ee.internal.CosNaming.BootstrapServer -InitialServicesFile
          "/tmp/services" [-ORBInitialPort port]
          
      

    コマンドの最後の角括弧は、ポート番号の指定がオプションであることを示します。

アプリケーションがorg.omg.CORBA.ORB.resolve_initial_referencesメソッドを呼び出すと、CORBAプロセスがBootstrap Serverに接続してRoot Naming Contextを取得します。

パッケージの仕様

関連項目

CosNaming APIの概要および使用例については、次を参照してください。

Java IDLの概要については、次を参照してください。

導入されたバージョン:
JDK1.3