「IDL-to-Java Language Mapping Specification」(準拠に関するドキュメントに基づいてJavaTM SE 6で実装)に従ってIDL-to-Javaコンパイラで生成されるファイル。
一般に、IDL名および識別子は、変更なしでJava名および識別子にマッピングされます。Java言語の性質のために、1つのIDL構文が複数の(名前が異なる) Java構文にマッピングされることがあります。追加の名前は、説明用の接尾辞を付加して構築されます。たとえば、IDLインタフェースfooはJavaインタフェースfooとfooOperations、および追加のJavaクラスfooHelper、fooHolder、fooPOA、および(オプションで) fooPOATieにマッピングされます。
実質的に、マッピングでは特定の目的に合わせて複数の名前の使用が予約されます。次に初期参照を示します。
ヘルパー・ファイルは、型の操作に必要な複数のstaticメソッドを提供します。これらには、リポジトリIDの取得、型コードの取得、ストリームに対する型の読み書きなど、型の挿入および抽出オペレーションすべてが含まれます。
マップされたIDLインタフェースまたは抽象インタフェースのヘルパー・クラスにはナロー操作も含まれます。staticナロー・メソッドにより、org.omg.CORBA.Objectがさらに特定の型のオブジェクト参照にナロー変換されます。オブジェクト参照がリクエストされた型をサポートしないためにナロー変換に失敗した場合は、IDL例外CORBA::BAD_PARAMがスローされます。その他の種類のエラーを示す場合は、異なるシステム例外がスローされます。nullのナロー変換は常に成功し、null値が返されます。
outおよびinoutパラメータの引渡しモードをサポートするには、追加のホルダー・クラスが必要です。これらのクラスは、org.omg.CORBAパッケージ内のすべての基本IDLデータ型に使用でき、typedefsで定義されたものを除くすべての名前付きユーザー定義IDL型についても生成されます。この場合、ユーザー定義には、インタフェース・リポジトリ用などのOMG仕様、およびその他のOMGサービスで定義される型が含まれます。
各ホルダー・クラスは、インスタンスからのコンストラクタ(デフォルトのコンストラクタ)と型の値であるpublicインスタンス・メンバーvalueを持ちます。デフォルトのコンストラクタは、値フィールドをJava言語で定義された型のデフォルト値に設定します。booleanの場合はfalse、数値およびchar型の場合は0、文字列の場合はnull、オブジェクト参照の場合はnullです。
ポータブル・スタブおよびスケルトンをサポートするため、ホルダー・クラスはorg.omg.CORBA.portable.Streamableインタフェースも実装します。
オペレーション・ファイル
非抽象IDLインタフェースは、シグネチャ・インタフェースとオペレーション・インタフェースの2つのパブリックJavaインタフェースにマップされています。シグネチャ・インタフェースは、IDLEntityを拡張したものでIDLインタフェース名と同じ名前を持ち、指定した型のインタフェースを他のインタフェースで使用する場合にメソッド宣言のシグネチャ型として使用します。オペレーション・インタフェースの名前はIDLインタフェースと同じですが、Operationsという接尾辞があり、同一の場所にあるクライアントとサーバーのために最適化された呼出しを提供するメカニズムとしてサーバー側マッピングで使用されます。
Javaオペレーション・インタフェースには、マップされたオペレーション・シグネチャが含まれます。Javaシグニチャ・インタフェースは、オペレーション・インタフェースである(マップされた)基底org.omg.CORBA.Objectおよびorg.omg.portable.IDLEntityを拡張します。メソッドは、シグニチャ・インタフェース上で呼び出すことができます。IDLで表現されるインタフェース継承は、Javaシグニチャ・インタフェース階層とオペレーション・インタフェース階層の両方で反映されます。
スタブ
非オブジェクト指向言語のマッピングでは、インタフェース型ごとにスタブに対するプログラミング・インタフェースがあります。一般にスタブは、OMG IDLに慣れているプログラマであれば簡単に予測できるような方法でオブジェクトのOMG IDLで定義されたオペレーションにアクセスする方法を表現したり、特定プログラミング言語の言語マッピングを表したりします。スタブは、特定のORBコアに対して非公開であり最適化されているインタフェースを使用して、ORBの残りで呼び出します。複数のORBが使用可能な場合、ORBごとに対応するスタブが異なることがあります。この場合、正しいスタブと特定のオブジェクト参照を関連付けるために、ORBおよび言語マッピングが協調する必要があります。
Java、C++、Smalltalkなどのオブジェクト指向言語では、スタブ・インタフェースは必要ありません。