ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

パッケージ org.omg.CORBA

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

参照: 説明

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

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

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

一般的な情報

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

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

ORBクラス

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

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

ORBメソッド

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

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

アプリケーションがCORBA環境を必要とする場合、ORBオブジェクト参照およびルートPOAなどのOAオブジェクト参照(可能な場合)を取得するメカニズムが必要です。このことは、次の2つの目的のために行われます。まず、アプリケーションをORBとOA環境に初期化します。2つ目に、ORBオブジェクト参照とOAオブジェクト参照をアプリケーションに返し、以降のORBおよびOA操作で使用します。

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つあります。そのような例外は次のとおりです。

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データ型に使用できます。たとえば、LongHolderShortHolderFloatHolderなどには、定義済みのクラスが存在します。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メソッドを参照)。


関連項目

概要、ガイド、およびチュートリアルについては、次を参照してください。

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
ナビゲーション・リンクをスキップ
Java(tm) Platform
Standard Edition 8

バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2018, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。