JavaTM 2
Platform
Std. Ed. v1.4.0

パッケージ org.omg.CORBA

OMG CORBA API の JavaTM プログラミング言語 (ORB クラスを含む) へのマッピングを提供します。

参照:
          説明

インタフェースの概要
ARG_IN 呼び出しに対する入力引数を示します。
ARG_INOUT 呼び出しで入力と出力の両方に使用される引数を示します。
ARG_OUT 呼び出しに対する出力引数を示す定数です。
BAD_POLICY PolicyError 例外で書き込まれる PolicyErrorCode です。
BAD_POLICY_TYPE PolicyError 例外で書き込まれる PolicyErrorCode です。
BAD_POLICY_VALUE ORB クラスで定義される create_policy メソッドへの呼び出しで、有効なポリシー型に対して不正確なポリシー値を示すために使用される値を格納します。
CTX_RESTRICT_SCOPE Context.get_values メソッドへの 2 番目のパラメータとして使用できるフラグです。
Current Current インタフェースから派生したインタフェースです。
CurrentOperations Current のインタフェースです。
CustomMarshal ユーザではなく ORB によって使用されることを示す抽象値型です。
DataInputStream 非整列化カスタム値型の入力ストリームからプリミティブデータ型を読み込むのに使用されるメソッドを定義します。
DataOutputStream 整列化カスタム値型の出力ストリームにプリミティブデータ型を書き込むのに使用されるメソッドを定義します。
DomainManager 上位ドメインと下位ドメイン間の関係確立とナビゲート、およびポリシーの作成とアクセス用の機構を提供します。
DomainManagerOperations DomainManager に対し、ポリシーにアクセスする手段を提供します。
DynAny org.omg.CORBA.Any 値を、動的に解釈 (トラバーサル) および構築できるようにします。
DynArray 配列と関連付けられた DynAny オブジェクトを表します。
DynEnum IDL enum に関連付けられた DynAny オブジェクトを表します。
DynFixed IDL の fixed 型に関連している DynAny オブジェクトを表します。
DynSequence IDL のシーケンスに関連している DynAny オブジェクトを表します。
DynStruct IDL 構造体に関連している DynAny オブジェクトを表します。
DynUnion DynUnion インターフェースは、IDL 共用体に関連した DynAny オブジェクトを表します。
DynValue IDL 値型に関連している DynAny オブジェクトを表示します。
IDLType OMG の IDL のタイプを表すすべてのインタフェースリポジトリ (IR) オブジェクトが継承する abstract インタフェースです。
IDLTypeOperations このインタフェースは、IDLType オブジェクトによって実装される必要があります。
IRObject IRObject IDL インタフェースは、ほかのすべてのインタフェースリポジトリインタフェースの派生元である、もっとも包括的なインタフェースを表します。
IRObjectOperations IRObject からのマッピングに使用するオペレーションインタフェースです。
Object CORBA オブジェクト参照の定義です。
OMGVMCID OMG のために予約されたベンダーマイナーコード ID です。
Policy Policy インタフェースから派生したインタフェースです。
PolicyOperations Policy オブジェクトのオペレーションを提供します。
PRIVATE_MEMBER ValueMember クラスの private メンバを定義する定数です。
PUBLIC_MEMBER ValueMember クラスの public メンバを定義する定数です。
UNSUPPORTED_POLICY 要求された Policy が ORB により有効と認識されるが、現在サポートされていない場合に書き込まれる PolicyErrorCode の 1 つです。
UNSUPPORTED_POLICY_VALUE Policy に要求された値が有効な型でその型の有効範囲内にあるが、現在この有効な値がサポートされていない場合に書き込まれる PolicyErrorCode です。
VM_ABSTRACT 型コードの抽象インタフェースを表すのに使用されるコードを定義します。
VM_CUSTOM 型コードのカスタム整列化値型を表すのに使用されるコードを定義します。
VM_NONE 型コードの値型の値の 1 つを表すのに使用されるコードを定義します。
VM_TRUNCATABLE 型コードの切り捨て可能な値型を表すのに使用されるコードを定義します。
 

クラスの概要
_IDLTypeStub IDLType のスタブです。
_PolicyStub Policy のスタブです。
Any IDL で記述できるあらゆるデータのコンテナ、または IDL のプリミティブ型のコンテナとして機能します。
AnyHolder Any のホルダーです。
AnySeqHelper AnySeq のヘルパーです。
AnySeqHolder AnySeq のホルダーです。
BooleanHolder Boolean のホルダーです。
BooleanSeqHelper BooleanSeq のヘルパーです。
BooleanSeqHolder BooleanSeq のホルダーです。
ByteHolder Byte のホルダーです。
CharHolder Char のホルダーです。
CharSeqHelper CharSeq のヘルパーです。
CharSeqHolder CharSeq のホルダーです。
CompletionStatus SystemException がスローされたときにメソッドが動作を完了していたかどうかを示すオブジェクトです。
CompletionStatusHelper CompletionStatus のヘルパーです。
Context Request オペレーションで、この呼び出しとともに送出される前にコンテキスト文字列を解決する必要のあるコンテキストオブジェクトの指定で使用されるオブジェクトです。
ContextList プロパティ名を表わす String オブジェクトの修正可能なリストを格納するオブジェクトです。
CurrentHelper Current のヘルパーです。
CurrentHolder Current のホルダーです。
DefinitionKind インタフェースリポジトリオブジェクトの型を指定するときに使用する定数を提供するクラスです。
DefinitionKindHelper DefinitionKind のヘルパーです。
DoubleHolder Double のホルダーです。
DoubleSeqHelper DoubleSeq のヘルパーです。
DoubleSeqHolder DoubleSeq のホルダーです。
DynamicImplementation 推奨されていません。 org.omg.CORBA.DynamicImplementation
Environment クライアントで例外を使えるようにするために、Request オペレーションで使われる例外のコンテナ (ホルダー) です。
ExceptionList メソッドによりスローされる例外を記述するために Request オペレーションで使うオブジェクトです。
FieldNameHelper FieldName のヘルパーです。
FixedHolder Fixed のホルダーです。
FloatHolder Float のホルダーです。
FloatSeqHelper FloatSeq のヘルパーです。
FloatSeqHolder FloatSeq のホルダーです。
IdentifierHelper Identifier のヘルパーです。
IDLTypeHelper IDLType のヘルパーです。
IntHolder Int のホルダーです。
LocalObject Java 言語マッピングで、ローカル IDL インタフェースの実装基底クラスとして使用されます。
LongHolder Long のホルダーです。
LongLongSeqHelper LongLongSeq のヘルパーです。
LongLongSeqHolder LongLongSeq のホルダーです。
LongSeqHelper LongSeqHelper のヘルパーです。
LongSeqHolder LongSeq のホルダーです。
NamedValue DII と DSI で使用されるオブジェクトで、引数と戻り値を記述します。
NameValuePair 名前と IDL 構造体の属性である値とを関連付けます。
NameValuePairHelper NameValuePair のヘルパーです。
NVList NamedValue オブジェクトが格納された変更可能リストです。
ObjectHelper  
ObjectHolder Object のホルダーです。
OctetSeqHelper OctetSeq のヘルパーです。
OctetSeqHolder OctetSeq のホルダーです。
ORB CORBA Object Request Broker 機能のための API を提供するクラスです。
ParameterMode Parameter のパラメータモードの列挙です。
ParameterModeHelper Parameter のパラメータモードの列挙です。
ParameterModeHolder Parameter のパラメータモードの列挙です。
PolicyErrorCodeHelper ポリシーが無効になる可能性のある理由をカプセル化します。
PolicyErrorHelper ORB.create_policy オペレーションに渡されたパラメータ値の問題を示すためにスローされます。
PolicyErrorHolder ORB.create_policy オペレーションに渡されたパラメータ値の問題を示すためにスローされます。
PolicyHelper Policy のヘルパーです。
PolicyHolder Policy のホルダーです。
PolicyListHelper PolicyList のヘルパーです。
PolicyListHolder PolicyList のホルダーです。
PolicyTypeHelper PolicyType のヘルパーです。
Principal 推奨されていません。 CORBA 2.2 では推奨されません。
PrincipalHolder 推奨されていません。 CORBA 2.2 では推奨されません。
RepositoryIdHelper RepositoryId のヘルパーです。
Request メソッドを呼び出すために必要な情報を格納するオブジェクトです。
ServerRequest Dynamic Skeleton Interface (DSI) の明示的な状態を取り込むオブジェクトです。
ServiceDetail ORB サービスを表すオブジェクトです。
ServiceDetailHelper  
ServiceInformation CORBA モジュール内の IDL 構造体です。
ServiceInformationHelper  
ServiceInformationHolder ServiceInformation のホルダーです。
SetOverrideType SET_OVERRIDEADD_OVERRIDE をタグ付けする CORBA enum のマッピングです。
SetOverrideTypeHelper SetOverrideType のヘルパーです。
ShortHolder Short.のホルダーです。
ShortSeqHelper ShortSeqHelper のヘルパーです。
ShortSeqHolder ShortSeq のホルダーです。
StringHolder String のホルダーです。
StringSeqHelper String の配列です。
StringSeqHolder String の配列です。
StringValueHelper StringValue のヘルパーです。
StructMember インタフェースリポジトリの IDL struct メンバを記述します。
StructMemberHelper StructMember のヘルパーです。
TCKind TypeCode オブジェクトの種類を指定する、IDL の列挙型 TCKind の Java マッピングです。
TypeCode 特定の CORBA データ型についての情報を格納するコンテナです。
TypeCodeHolder TypeCode のホルダーです。
ULongLongSeqHelper ULongLongSeq のヘルパーです。
ULongLongSeqHolder ULongLongSeq のホルダーです。
ULongSeqHelper ULongSeq のヘルパーです。
ULongSeqHolder ULongSeq のホルダーです。
UnionMember IDL 共用体のメンバのインタフェースリポジトリ内の説明です。
UnionMemberHelper UnionMember のヘルパーです。
UnknownUserExceptionHelper UnknownUserException のヘルパーです。
UnknownUserExceptionHolder UnknownUserException のホルダーです。
UShortSeqHelper UShortSeq のヘルパーです。
UShortSeqHolder UShortSeq のホルダーです。
ValueBaseHelper  
ValueBaseHolder ValueBase のホルダーです。
ValueMember value オブジェクトのメンバのインタフェースリポジトリ内の説明です。
ValueMemberHelper ValueMember のヘルパーです。
VersionSpecHelper VersionSpec のヘルパーです。
VisibilityHelper Visibility のヘルパーです。
WCharSeqHelper WCharSeq のヘルパーです。
WCharSeqHolder WCharSeq のホルダーです。
WrongTransactionHelper WrongTransaction のヘルパーです。
WrongTransactionHolder WrongTransaction のホルダーです。
WStringSeqHelper WString の配列です。
WStringSeqHolder WString の配列です。
WStringValueHelper IDL-to-Java コンパイラ (ポータブル) バージョン 3.0 により orb.idl から生成された org/omg/CORBA/WStringValueHelper.java。
 

例外の概要
BAD_CONTEXT クライアントがオペレーションを呼び出したが、オペレーションに必要なコンテキスト値がコンテキトに含まれていない場合、例外がスローされます。
BAD_INV_ORDER この例外は、呼び出し側が間違った順序でオペレーションを呼び出したことを示します。
BAD_OPERATION オブジェクト参照が既存のオブジェクトを指すが、そのオブジェクトが呼び出されたオペレーションをサポートしない場合にスローされる例外です。
BAD_PARAM 呼び出し側に渡されたパラメータが範囲外、あるいは不正と見なされる場合にスローされる例外です。
BAD_TYPECODE ORB が無効な型コード (たとえば、無効な TCKind 値の型コード) を検出したときにスローされる例外です。
Bounds メソッドがアクセスしようとしているオブジェクトに対して、パラメータが有効な範囲内にない場合にスローされるユーザ例外です。
COMM_FAILURE この例外は、クライアントから要求が送信された後で、サーバからの応答がクライアントに返る前、処理の実行中に通信が失われた場合にスローされます。
DATA_CONVERSION この例外は、ORB が、整列化されたデータ表現とネイティブ表現との間の変換ができない場合にスローされます。
FREE_MEM ヒープの破壊やメモリセグメントのロックなどが原因で、ORB が動的メモリの解放に失敗した場合にスローされる例外です。
IMP_LIMIT この例外は、ORB 実行時に実装限界を超えたことを示します。
INITIALIZE ORB が初期化時にエラーを検出した (ネットワークリソースの取得時に障害が発生した、構成エラーを検出したなど) 場合にスローされる例外です。
INTERNAL この例外は、ORB の内部エラーを示します。
INTF_REPOS ORB がインタフェースリポジトリに到達できない場合、またはインタフェースリポジトリに関係するその他のエラーを検出した場合にスローされる例外です。
INV_FLAG 無効なフラグがオペレーションに渡された場合 (DII 要求の作成時など) にスローされる例外です。
INV_IDENT この例外は、IDL 識別子が構文的に無効であることを示します。
INV_OBJREF この例外は、レポジトリ ID の構文が正しくないか、アドレス情報が無効であるなどの理由で、オブジェクト参照が内部的に不正であることを示します。
INV_POLICY 特定の呼び出しに適用される Policy オーバーライド間の互換性がないため、呼び出しできない場合にスローされる標準例外です。
INVALID_TRANSACTION 要求により無効なトランザクションコンテキストが送信された場合にスローされる例外です。
MARSHAL ネットワークからの要求または応答が構造的に無効です。
NO_IMPLEMENT この例外は、呼び出されたオペレーションは存在するが (IDL 定義あり) そのオペレーションが実装されていないことを示します。
NO_MEMORY ORB ランタイムがメモリ不足になった場合にスローされる例外です。
NO_PERMISSION 呼び出し元に十分な特権がないため、呼び出しが失敗した場合にスローされる例外です。
NO_RESOURCES ORB が一般的なリソース限界を検出した場合にスローされる例外です。
NO_RESPONSE この例外は、クライアントが遅延同期呼び出しの結果を取得しようとしたが、要求の応答がまだ使用できない場合にスローされます。
OBJ_ADAPTER この例外は通常、管理上の不一致を示します。
OBJECT_NOT_EXIST 削除されたオブジェクトの呼び出しが実行されるたびにスローされる例外です。
PERSIST_STORE この例外は、データベース接続の確立失敗やデータベースの破壊など、持続的な記憶領域の障害を示します。
PolicyError ポリシーエラーが発生した場合にスローされるユーザ例外です。
SystemException すべての CORBA 標準例外のルートクラスです。
TRANSACTION_REQUIRED 要求で null トランザクションコンテキストが送られたが、アクティブなトランザクションが必要なことを示す例外です。
TRANSACTION_ROLLEDBACK 要求に関連付けられているトランザクションがロールバックされた、またはロールバックするようにマークされた場合にスローされる例外です。
TRANSIENT ORB がオブジェクトに到達しようとして失敗した場合にスローされる例外です。
UNKNOWN オペレーション実装が CORBA 以外の例外 (実装のプログラミング言語に固有の例外など) をスローするか、オペレーションの発生式に指定されていないユーザ例外をオペレーションがスローする場合に、発生する例外です。
UnknownUserException サーバから返されたユーザ例外を格納するクラスです。
UserException CORBA IDL 定義のユーザ例外のルートクラスです。
WrongTransaction CORBA の WrongTransaction ユーザ定義例外です。
 

パッケージ org.omg.CORBA の説明

OMG CORBA API の JavaTM プログラミング言語 (ORB クラスを含む) へのマッピングを提供します。ORB クラスは、プログラマがフル機能の Object Request Broker (ORB) として使用できるように実装されています。

Java 2 Platform Standard Edition v.1.4 が準拠する公式の CORBA 仕様のサポートセクションの正確なリストは、「J2SE 1.4 での正式な CORBA サポート仕様」 を参照してください。

一般的な情報

このセクションでは、Interface Definition Language (IDL) ファイルをコンパイルし、ORB を使用してクライアントおよびサーバを記述するユーザに関係する情報を提供します。

このセクションで説明するクラスとインタフェースは、ORB クラス、例外、Helper クラス、および Holder クラスの 4 つにグループ化できます。

ORB クラス

ORB は、クライアントとサーバ上のメソッドの実装間での、メソッド呼び出しを処理 (仲介) します。クライアントとサーバはネットワーク上のどこにあってもよく、呼び出しと実装は異なるプログラミング言語で記述されている可能性があるため、ORB はこの通信を実現するために内部でさまざまな処理を行います。

ORB の機能のほとんどはユーザに対して完全に透明であり、CORBA パッケージの主要部分は、ORB によって内部で使用されるクラスで構成されています。そのため、ほとんどのプログラマは、このパッケージの一部分しか直接には使用しません。実際には、ORB クラス、一部の例外、および場合によってホルダークラスの一部のメソッドだけを使用します。

ORB メソッド

アプリケーションを CORBA 環境で使用するには、最初に次を実行する必要があります。

アプリケーションを初期化して適切なオブジェクト参照を取得するために、次のオペレーションが用意されています。

アプリケーションが CORBA 環境を必要する場合、ORB オブジェクト参照およびルート POA などの OA オブジェクト参照 (可能な場合) を取得する機構が必要です。これには、アプリケーションを ORB と OA 環境に初期化する、および ORB オブジェクト参照と OA オブジェクト参照をアプリケーションに返し、以降の ORB および OA オペレーションで使用する、という 2 つの目的があります。

ORB オブジェクト参照を取得するには、アプリケーションで ORB.init オペレーションを呼び出します。呼び出しパラメータは、オブジェクト参照を必要とする ORB の識別子、および環境固有のデータを呼び出し先に渡すために使用する arg_list で構成できます。

次に示すのは、ORB へのアクセスを提供する ORB メソッドです。

パラメータなしで init() メソッドを使用すると、単体 ORB が起動します。単体 ORB は、idlj が Helper クラス内で生成するコードに必要な any を、型コード作成に提供します。

アプリケーションには、その初期のオブジェクト参照を取得するための移植性ある手段が必要です。ルート POA、POA Current、インタフェースリポジトリ、および各種のオブジェクトサービスインスタンスの参照が必要です。アプリケーションが必要とする機能は、ネームサービスが提供される機能と同様です。ただし、アプリケーションを移植性の高い方法で初期化するために、すべてのアプリケーションでネームサービスを使用可能にすべきだと指示することを、OMG は望んでいません。したがって、このセクションで説明するオペレーションは、ネームサービスの単純なローカルバージョンであり、アプリケーションはこれを使用して、オペレーションに不可欠な小規模の定義済みオブジェクト参照セットを取得できます。この機構では明確に定義された小規模のオブジェクトセットのみを対象に考えているため、ネーミングコンテキストは単一レベルの名前空間に平板化できます。この単純化により、2 つのオペレーションを定義するだけで必要な機能を実現できます。

初期参照は、ORB オブジェクトインタフェースで提供される 2 つのオペレーションにより取得され、初期オブジェクト参照のリストおよび解決機能を提供します。以下に初期参照を示します。

これらのメソッドの使用例は、 「Java IDL 入門」 を参照してください。

例外

Java IDL の例外は、Java プログラミング言語で記述されたコードの例外と似ています。メソッドが例外をスローするように定義されている場合、そのメソッドを使用するコードには、try/catch ブロックを記述して、例外がスローされたときにその例外を処理しなければなりません。

詳細は、「Java IDL 例外」を参照してください。システム例外とユーザ定義例外の違いを説明しています。

次に、システム例外のリストを示します。これらは、org.omg.CORBA パッケージで定義されている java.lang.RuntimeException から org.omg.CORBA.SystemException を介して継承する、チェックされていない例外です。


        BAD_CONTEXT
        BAD_INV_ORDER
        BAD_OPERATION
        BAD_PARAM
        BAD_TYPECODE
        COMM_FAILURE
        DATA_CONVERSION
        FREE_MEM
        IMP_LIMIT
        INITIALIZE
        INTERNAL
        INTF_REPOS
        INVALID_TRANSACTION
        INV_FLAG
        INV_IDENT
        INV_OBJREF
        INV_POLICY
        MARSHAL
        NO_IMPLEMENT
        NO_MEMORY
        NO_PERMISSION
        NO_RESOURCES
        NO_RESPONSE
        OBJECT_NOT_EXIST
        OBJ_ADAPTER
        PERSIST_STORE
        TRANSACTION_REQUIRED
        TRANSACTION_ROLLEDBACK
        TRANSIENT
        UNKNOWN

次に、org.omg.CORBA で定義されているユーザ定義例外のリストを示します。


        Bounds
        UnknownUserException
        WrongTransaction 
        PolicyError

サブパッケージ

CORBA パッケージの中には、名前の一部に「Package」が付いているパッケージがいくつかあります。これらのパッケージは、CORBA パッケージのインタフェースおよびクラスによって使用される例外またはクラスを提供するだけなので、一般にかなり小さいものです。

たとえば、org.omg.CORBA.TypeCodePackage パッケージには、TypeCode クラスのメソッドによってスローされる例外が 2 つあります。それら 2 つの例外を次に示します。

org.omg.CORBA.ORBPackage パッケージには、次の 2 つの例外があります。

CORBA のサブパッケージである別のパッケージは、 「portable」 パッケージです。これは、あるベンダのIDL コンパイラで生成されたコードを別のベンダの ORB で実行可能にする ORB API セットを提供します。

ホルダークラス

out および inout パラメータの引渡しモードをサポートするには、追加のホルダークラスが必要です。Java プログラミング言語は out または inout パラメータをサポートしないため、変更可能なパラメータを渡す手段としてホルダークラスが必要になります。ポータブルスタブおよびスケルトンをサポートするため、ホルダークラスは org.omg.CORBA.portable.Streamable インタフェースも実装します。

ホルダークラスの名前は、型の名前に「Holder」が追加されて付けられています。型の名前によって、Java プログラミング言語での名前が参照されます。たとえば、Java プログラミング言語で Account という名前のインタフェースのホルダークラスは、AccountHolder という名前になります。

ホルダークラスは org.omg.CORBA パッケージ内のすべての基本 IDL データ型に使用できます。たとえば、LongHolderShortHolder, tt>FloatHolder などには、定義済みのクラスが存在します。typedefs で定義されたものを除くすべての名前付きユーザ定義 IDL 型についてもクラスが生成されます。この場合、ユーザ定義には、インタフェースリポジトリ用などの OMG 仕様、およびその他の OMG サービスで定義される型が含まれます。

各ホルダークラスには、以下が含まれます。

デフォルトのコンストラクタは、値フィールドを Java 言語で定義された型のデフォルト値に設定します。

たとえば、OMG IDL で定義されたインタフェース Account が Java プログラミング言語にマッピングされている場合は、次のホルダークラスが生成されます。

public final class AccountHolder implements 
org.omg.CORBA.portable.Streamable
{
// field that holds an Account object
public Account value = null;
// default constructor
public AccountHolder ()
  {
  }
  
// creates a new AccountHolder from initialValue
public AccountHolder (Account initialValue)
  {
value = initialValue;
  }
  
// reads the contents of i and assigns the contents to value
public void _read (org.omg.CORBA.portable.InputStream i)
  {
value = AccountHelper.read (i);
  }
// writes value to o
public void _write (org.omg.CORBA.portable.OutputStream o)
  {
AccountHelper.write (o, value);
  }
 
// returns the typecode for Account
public org.omg.CORBA.TypeCode _type ()
  {
return AccountHelper.type ();
  }
}

Holder クラスの詳細は、 「OMG IDL から Java 言語へのマッピング」 の第 1.4 章 「基本型のマッピング」を参照してください。org.omg.CORBA パッケージで定義された Holder クラスは次のとおりです。

     AnyHolder
     AnySeqHolder
     BooleanHolder
     BooleanSeqHolder
     ByteHolder
     CharHolder
     CharSeqHolder
     CurrentHolder
     DoubleHolder
     DoubleSeqHolder
     FixedHolder
     FloatHolder
     FloatSeqHolder
     IntHolder
     LongHolder
     LongLongSeqHolder
     LongSeqHolder
     ObjectHolder
     OctetSeqHolder
     ParameterModeHolder
     PolicyErrorHolder
     PolicyListHolder
     PrincipalHolder
     ServiceInformationHolder
     ShortHolder
     ShortSeqHolder
     StringHolder
     StringSeqHolder
     TypeCodeHolder
     ULongLongSeqHolder
     ULongSeqHolder
     UnknownUserExceptionHolder
     UShortSeqHolder
     ValueBaseHolder
     WCharSeqHolder
     WrongTransactionHolder
     WStringSeqHolder

ヘルパークラス

ヘルパーファイルは、型の操作に必要な複数の static メソッドを提供します。以下が含まれます。

マップされた IDL インタフェースまたは抽象インタフェースのヘルパークラスにはナロー操作も含まれます。static ナローメソッドにより、org.omg.CORBA.Object がさらに特定の型のオブジェクト参照にナロー変換されます。オブジェクト参照が要求された型をサポートしないためにナロー変換に失敗した場合は、IDL 例外 CORBA.BAD_PARAM がスローされます。その他の種類のエラーを示す場合は、異なるシステム例外がスローされます。null のナロー変換は常に成功し、null 値が返されます。一般的に、アプリケーションプログラマが使用するヘルパーメソッドは narrow メソッドのみです。その他のメソッドは、通常は内部で使用され、プログラマは意識する必要がありません。

ヘルパークラスは、値型のヘルパー値型以外のヘルパー の 2 つに大きく分類されます。1 つのカテゴリのヘルパークラスすべてが同じメソッドを提供するため、ここではヘルパークラスの各カテゴリの汎用的な説明を行います。

OMG IDL が Java プログラミング言語にマッピングされると、各ユーザ定義型に対して「ヘルパー」クラスが生成されます。この生成されたクラスには、接尾辞 Helper が追加され、ユーザ定義型の名前が付けられます。たとえば、OMG IDL でインタフェース Account が定義されると、idlj コンパイラにより AccountHelper という名前のクラスが自動的に生成されます。AccountHelper クラスには、型のインスタンス (この場合は Account オブジェクト) の操作に必要な static メソッドが含まれます。

narrow メソッド

オブジェクトがメソッドの戻り値の場合は、汎用オブジェクトである org.omg.CORBA.Object オブジェクトまたは java.lang.Object オブジェクトのどちらかの形式で返されます。このオブジェクトは、操作される前に特定の型にキャストされる必要があります。たとえば、Account オブジェクトは汎用オブジェクトとして返され、Account メソッドが呼び出されるように、Account オブジェクトにナロー変換される必要があります。

narrow メソッドには 2 つの形式があります。1 つは org.omg.CORBA.Object オブジェクトを使用し、もう 1 つは java.lang.Object オブジェクトを使用します。インタフェースが abstract かどうかは、ヘルパークラスで提供される narrow メソッドによって決まります。abstract ではないインタフェースのヘルパークラスには、CORBA オブジェクトを使用する narrow メソッドがあります。一方、abstract インタフェースの narrow メソッドでは、Java プログラミング言語のオブジェクトが使用されます。少なくとも 1 つの abstract 基底インタフェースを持つ、abstract 以外のインタフェースのヘルパークラスでは、2 つのバージョンの narrow メソッドが提供されます。

「Hello World」 チュートリアルでは、次のように narrow メソッドを使用します。

// create and initialize the ORB
	ORB orb = ORB.init(args, null);
// get the root naming context
org.omg.CORBA.Object objRef = 
	    orb.resolve_initial_references("NameService");
// Use NamingContextExt instead of NamingContext. This is 
// part of latest Inter-Operable naming Service.  
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
 
// resolve the Object Reference in Naming
String name = "Hello";
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));

基本ヘルパークラスの例

ここで説明する基本ヘルパークラスは、すべてのヘルパークラス、および OMG IDL で定義された型が Java プログラミング言語のインタフェースにマッピングされる場合に narrow メソッドで指定されるメソッドを含むクラスです。値型ではない型には、それに対して生成された基本ヘルパークラスがあります。

たとえば、インタフェース Account が値型の IDL 型または抽象インタフェースではなく、抽象基底インタフェースがない場合、AccountHelper クラスは次のようになります。

abstract public class AccountHelper
{
private static String  _id = "IDL:Account:1.0";
// inserts an Account object into an Any object
public static void insert (org.omg.CORBA.Any a, Account that)
  {
org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
a.type (type ());
write (out, that);
a.read_value (out.create_input_stream (), type ());
  }
// extracts an Account object from an Any object
public static Account extract (org.omg.CORBA.Any a)
  {
return read (a.create_input_stream ());
  }
  
private static org.omg.CORBA.TypeCode __typeCode = null;
// gets the typecode for this type
synchronized public static org.omg.CORBA.TypeCode type ()
  {
if (__typeCode == null)
    {
__typeCode = org.omg.CORBA.ORB.init ().create_interface_tc (AccountHelper.id (), "Account");
    }
return __typeCode;
  }
// gets the repository id for this type
public static String id ()
  {
return _id;
  }
// reads an Account object from an input stream
public static Account read (org.omg.CORBA.portable.InputStream istream)
  {
return narrow (istream.read_Object (_AccountStub.class));
  }
// writes an Account object to an outputstream
public static void write (org.omg.CORBA.portable.OutputStream ostream, Account value)
  {
ostream.write_Object ((org.omg.CORBA.Object) value);
  }
// converts (narrows) an Object to an Account object
public static Account narrow (org.omg.CORBA.Object obj)
  {
if (obj == null)
return null;
else if (obj instanceof Account)
return (Account)obj;
else if (!obj._is_a (id ()))
throw new org.omg.CORBA.BAD_PARAM ();
else
    {
org.omg.CORBA.portable.Delegate delegate = ((org.omg.CORBA.portable.ObjectImpl)obj)._get_delegate ();
_AccountStub stub = new _AccountStub ();
stub._set_delegate(delegate);
return stub;
    }
  }
}

値型のヘルパークラス

値型のヘルパークラスには、値型以外のメソッド用に生成された同じメソッドの異なる表現が含まれます。主な違いは、値型は、メソッドのパラメータまたは戻り値として値を渡すことが可能であるため、直列化可能でなければならないことです。

Address が値型の場合、AddressHelper クラスは次のようになります。

abstract public class AddressHelper
{
private static String  _id = "IDL:Address:1.0";
// same as for non-value type
public static void insert (org.omg.CORBA.Any a, Address that)
  {
org.omg.CORBA.portable.OutputStream out = a.create_output_stream ();
a.type (type ());
write (out, that);
a.read_value (out.create_input_stream (), type ());
  }
// same as for non-value type
public static Address extract (org.omg.CORBA.Any a)
  {
return read (a.create_input_stream ());
  }
private static org.omg.CORBA.TypeCode __typeCode = null;
private static boolean __active = false;
  
// getting the typecode for the type
synchronized public static org.omg.CORBA.TypeCode type ()
  {
if (__typeCode == null)
    {
synchronized (org.omg.CORBA.TypeCode.class)
      {
if (__typeCode == null)
        {
if (__active)
          {
return org.omg.CORBA.ORB.init().create_recursive_tc ( _id );
          }
__active = true;
org.omg.CORBA.ValueMember[] _members0 = new org.omg.CORBA.ValueMember[0];
org.omg.CORBA.TypeCode _tcOf_members0 = null;
__typeCode = org.omg.CORBA.ORB.init ().create_value_tc (_id, "Address", org.omg.CORBA.VM_NONE.value, null, _members0);
__active = false;
        }
      }
    }
return __typeCode;
  }
// same as for non-value type
public static String id ()
  {
return _id;
  }
// reads a serializable instance of Address from the given input stream
public static Address read (org.omg.CORBA.portable.InputStream istream)
  {
return (Address)((org.omg.CORBA_2_3.portable.InputStream) istream).read_value (id ());
  }
// writes a serializable instance of Address to the given output stream
public static void write (org.omg.CORBA.portable.OutputStream ostream, Address value)
  {
((org.omg.CORBA_2_3.portable.OutputStream) ostream).write_value (value, id ());
  }
}

次に、org.omg.CORBA パッケージで定義されているヘルパークラスを示します。


     AnySeqHelper
     BooleanSeqHelper
     CharSeqHelper
     CompletionStatusHelper
     CurrentHelper
     DefinitionKindHelper
     DoubleSeqHelper
     FieldNameHelper
     FloatSeqHelper
     IdentifierHelper
     IDLTypeHelper
     LongLongSeqHelper
     LongSeqHelper
     NameValuePairHelper
     ObjectHelper
     OctetSeqHelper
     ParameterModeHelper
     PolicyErrorCodeHelper
     PolicyErrorHelper
     PolicyHelper
     PolicyListHelper
     PolicyTypeHelper
     RepositoryIdHelper
     ServiceDetailHelper
     ServiceInformationHelper
     SetOverrideTypeHelper
     ShortSeqHelper
     StringSeqHelper
     StringValueHelper
     StructMemberHelper
     ULongLongSeqHelper
     ULongSeqHelper
     UnionMemberHelper
     UnknownUserExceptionHelper
     UShortSeqHelper
     ValueBaseHelper
     ValueMemberHelper
     VersionSpecHelper
     VisibilityHelper
     WCharSeqHelper
     WrongTransactionHelper
     WStringSeqHelper
     WStringValueHelper

その他のクラス

CORBA パッケージのほかのクラスおよびインターフェース (内部で使用される) は、4 つのグループに分類できます。そのうちの 3 つのグループは、要求に付随して使用され、4 番目のグループ (インタフェースリポジトリに関連) は、それ自身カテゴリとなります。

ORB によって作成されるクラス

最初のグループには、ORB によって作成され、要求オペレーションで使用される情報を格納するクラスが含まれます。

要求を処理するクラス

2 番目のグループのクラスは、次のように要求を処理します。

定数として機能するインタフェース

3 番目のグループには、定数として機能するインタフェースが含まれます。IDL から Java へのマッピングでは、public static final フィールドとして表される列挙値を含む Java クラス (DefinitionKind など) に IDL の enum 型がマッピングされる必要があります。また、IDL インタフェース外で定義された IDL 定数は、各定数の Java インタフェースにマッピングされます。

このため、org.omg.CORBA パッケージの複数のインタフェースが short の単一フィールド、value で構成されます。このフィールドは、エラーコードまたは値修飾子などに使用される定数です。たとえば、インタフェース BAD_POLICYvalue フィールドは、例外 PolicyError がスローされる理由の 1 つになる可能性があります。このエラーコードを指定するには、BAD_POLICY.value を使用します。

例外 PolicyError では、可能なエラーコードとして次のインタフェースの value フィールドが使用されます。

メソッド TypeCode.type_modifier は、次のインタフェースの 1 つの value フィールドを返します。これらのインタフェースの名前にある VM は、「値修飾子」を表します。 次の定数は、ValueMember オブジェクトのアクセスメソッドによって返され、ValueMember オブジェクトの可視性を示します。 NamedValue オブジェクトで、またはメソッドへのパラメータとして使用されるこれらのフラグは、次のインタフェースで定義されます。

インタフェースリポジトリインタフェースとクラス

4 番目のグループには、OMG IDL インタフェース ir.idl から、idlj コンパイラによって生成されるインタフェースリポジトリインタフェースとクラスがあります。インタフェースリポジトリの目的は、ORB がアクセスできるように、そこに格納されているインタフェースを識別することです。各モジュール、型、インタフェース、属性、オペレーション、パラメータ、例外、定数などは、インタフェースリポジトリ API によって完全に記述されます。

ORB ではインタフェースリポジトリを必要としないため、Java IDL にはインタフェースリポジトリは含まれません。このリリースではインタフェースリポジトリが実装されていませんが、型コードを作成するために、次の IR クラスおよびインタフェースが含まれています (インタフェース org.omg.CORBA.ORB の create_value_tc、create_struct_tc、create_union_tc、および create_exception_tc メソッドを参照)。
&nbs


関連項目

概要、ガイド、およびチュートリアルについては、

Java IDL で実装されていない CORBA 機能

org.omg サブパッケージに含まれている API は、現在の OMG CORBA 仕様に準拠するために提供されるものもありますが、Sun の JDKTM リリースでは実装されていません。これにより、ほかの JDK のライセンス保持者は、標準拡張機能および製品でこの API の実装を提供できるようになります。

NO_IMPLEMENT をスローする機能

org.omg サブパッケージに含まれる API には、さまざまな理由により NO_IMPLEMENT 例外をスローするものがあります。その理由として、以下の点を挙げることができます。

このリリースで実装されていない機能または API の概要


org.omg.CORBA パッケージで実装されていない機能のリスト

org.omg.CORBA パッケージで実装されていないメソッド

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

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.