|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のパッケージ 次のパッケージ | フレームあり フレームなし |
参照:
説明
インタフェースの概要 | |
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_OVERRIDE と ADD_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 ユーザ定義例外です。 |
OMG CORBA API の JavaTM プログラミング言語 (ORB クラスを含む) へのマッピングを提供します。ORB クラスは、プログラマがフル機能の Object Request Broker (ORB) として使用できるように実装されています。
Java 2 Platform Standard Edition v.1.4 が準拠する公式の CORBA 仕様のサポートセクションの正確なリストは、「J2SE 1.4 での正式な CORBA サポート仕様」 を参照してください。
このセクションで説明するクラスとインタフェースは、ORB クラス、例外、Helper クラス、および Holder クラスの 4 つにグループ化できます。
ORB は、クライアントとサーバ上のメソッドの実装間での、メソッド呼び出しを処理 (仲介) します。クライアントとサーバはネットワーク上のどこにあってもよく、呼び出しと実装は異なるプログラミング言語で記述されている可能性があるため、ORB はこの通信を実現するために内部でさまざまな処理を行います。
ORB の機能のほとんどはユーザに対して完全に透明であり、CORBA パッケージの主要部分は、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 例外」を参照してください。システム例外とユーザ定義例外の違いを説明しています。
次に、システム例外のリストを示します。これらは、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
たとえば、org.omg.CORBA.TypeCodePackage パッケージには、TypeCode クラスのメソッドによってスローされる例外が 2 つあります。それら 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 データ型に使用できます。たとえば、LongHolder、ShortHolder, tt>FloatHolder などには、定義済みのクラスが存在します。typedefs で定義されたものを除くすべての名前付きユーザ定義 IDL 型についてもクラスが生成されます。この場合、ユーザ定義には、インタフェースリポジトリ用などの OMG 仕様、およびその他の OMG サービスで定義される型が含まれます。
各ホルダークラスには、以下が含まれます。
デフォルトのコンストラクタは、値フィールドを Java 言語で定義された型のデフォルト値に設定します。
false
たとえば、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 メソッドを提供します。以下が含まれます。
ValueHelper
インタフェースの実装 (ユーザ定義値型の場合)
マップされた 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));
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
このため、org.omg.CORBA パッケージの複数のインタフェースが short の単一フィールド、value で構成されます。このフィールドは、エラーコードまたは値修飾子などに使用される定数です。たとえば、インタフェース BAD_POLICY の value フィールドは、例外 PolicyError がスローされる理由の 1 つになる可能性があります。このエラーコードを指定するには、BAD_POLICY.value を使用します。
例外 PolicyError では、可能なエラーコードとして次のインタフェースの value フィールドが使用されます。
ValueMember
オブジェクトのアクセスメソッドによって返され、ValueMember
オブジェクトの可視性を示します。
ORB ではインタフェースリポジトリを必要としないため、Java IDL にはインタフェースリポジトリは含まれません。このリリースではインタフェースリポジトリが実装されていませんが、型コードを作成するために、次の IR クラスおよびインタフェースが含まれています (インタフェース org.omg.CORBA.ORB の create_value_tc、create_struct_tc、create_union_tc、および create_exception_tc メソッドを参照)。
&nbs
org.omg サブパッケージに含まれている API は、現在の OMG CORBA 仕様に準拠するために提供されるものもありますが、Sun の JDKTM リリースでは実装されていません。これにより、ほかの JDK のライセンス保持者は、標準拡張機能および製品でこの API の実装を提供できるようになります。
org.omg サブパッケージに含まれる API には、さまざまな理由により NO_IMPLEMENT 例外をスローするものがあります。その理由として、以下の点を挙げることができます。
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
前のパッケージ 次のパッケージ | フレームあり フレームなし |
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.