Платформа Java™
Стандарт Эд. 7

Пакет org.omg. CORBA

Обеспечивает отображение OMG API CORBA к языку программирования JavaTM, включая класс ORB, который реализуется так, чтобы программист мог использовать это в качестве полностью функционального Посредника запросов к объектам (ШАР).

См.: Описание

Пакет org.omg. Описание CORBA

Обеспечивает отображение OMG API CORBA к языку программирования JavaTM, включая класс ORB, который реализуется так, чтобы программист мог использовать это в качестве полностью функционального Посредника запросов к объектам (ШАР).

Для точного списка поддерживаемых разделов официальных спецификаций CORBA, которым Java [ТМ] подчиняется Платформа, Standard Edition 6, см. Официальные Спецификации для поддержки CORBA в Java [ТМ] SE 6.

Общая информация

Информацией в этом разделе является информация, относящаяся к кому-то, кто компилирует Язык определения интерфейсов (IDL) файлы и использует ШАР, чтобы записать клиенты и серверы.

Классы и интерфейсы, описанные в этом разделе, могут быть помещены в четыре группы: ORB classes, Исключения, классы Helper, и классы Holder.

Класс ORB

ШАР обрабатывает (или брокеры) вызовы метода между клиентом и реализацией метода на сервере. Поскольку клиент и сервер может быть где угодно в сети, и потому что вызов и реализация могут быть записаны в различных языках программирования, ШАР делает большую работу негласно, чтобы выполнить эту передачу.

Большая часть того, что делает ШАР, абсолютно прозрачна пользователю, и главная часть пакета CORBA состоит из классов, используемых ШАРОМ негласно. Результат состоит в том, что большинство программистов будет использовать только небольшую часть этого пакета непосредственно. Фактически, большинство программистов будет использовать только несколько методов от класса ORB, некоторые исключения, и иногда, класса держателя.

Методы ORB

Прежде, чем приложение может ввести среду CORBA, оно должно сначала:

Следующие операции обеспечиваются, чтобы инициализировать приложения и получить соответствующие ссылки на объект:

Когда приложение требует среды CORBA, оно нуждается в механизме, чтобы получить ссылку на объект ШАРА и возможно ПОЛНУЮ ссылку на объект (такую как корневой POA). Это служит двум целям. Во-первых, это инициализирует приложение в ШАР и ПОЛНЫЕ среды. Во-вторых, это возвращает ссылку на объект ШАРА и ПОЛНУЮ ссылку на объект на приложение для использования в будущем ШАРЕ и ПОЛНЫХ операциях.

Чтобы получить ссылку на объект ШАРА, приложения вызывают работу ORB.init. Параметры к вызову могут включить идентификатор для ШАРА, для которого ссылка на объект требуется, и arg_list, который используется, чтобы позволить специфичным для среды данным быть переданными в вызов.

Они - методы ORB, которые обеспечивают доступ к ШАРУ:

Используя метод init() без новичков параметров одноэлементный ШАР, который может только дать typecode созданию any s необходимый в коде, сгенерированном в классах Помощника idlj.

Приложения требуют переносимого средства, которым можно получить их начальные ссылки на объект. Ссылки требуются для корневого POA, POA Текущий, Интерфейсный Репозитарий, и различные Объектные экземпляры Служб. Функциональность, требуемая приложением, подобна обеспеченному Службой Именования. Однако, OMG не хочет передавать под мандат это Служба Именования быть сделанным доступным для всех приложений, чтобы они могли быть портативно инициализированы. Следовательно, операции, показанные в этом разделе, обеспечивают упрощенную, локальную версию Службы Именования, которую приложения могут использовать, чтобы получить маленький, определенный набор ссылок на объект, которые важны для его работы. Поскольку только маленький четко определенный набор объектов ожидается с этим механизмом, контекст именования может быть сглажен, чтобы быть одноуровневым пространством имен. Это упрощение приводит только к двум операциям, определяемым, чтобы достигнуть требуемой функциональности.

Начальные ссылки получаются через две операции, обеспеченные в интерфейсе объекта ШАРА, предоставляя услуги, чтобы перечислить и разрешить начальные ссылки на объект. Они:

Пример, который использует некоторые из этих методов , Начинает с IDL Java.

Исключения

Исключения в IDL Java подобны тем в любом коде, записанном в языке программирования Java. Если метод определяется, чтобы выдать исключение, то любой код, используя тот метод должен иметь try/catch блок и обработать то исключение, когда это бросается.

Документация относительно исключений IDL Java имеет больше информации и объясняет различие между системными исключениями и определяемыми пользователем исключениями.

Следующее является списком системных исключений (которые являются исключениями непроверенными, наследовавшимися через org.omg.CORBA.SystemException от java.lang.RuntimeException), которые определяются в пакете org.omg.CORBA:


       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 с "Пакетом" как часть их имен. Эти пакеты являются обычно довольно маленькими, потому что все, что они делают, обеспечивают исключения или классы для использования интерфейсами и классы в пакете CORBA.

Например, пакет org.omg.CORBA.TypeCodePackage содержит два исключения, выданные методами в классе TypeCode. Эти исключения:

Пакет org.omg.CORBA.ORBPackage содержит два исключения:

Другой пакет, который является подпакетом CORBA, является пакетом portable. Это обеспечивает ряд API ШАРА, который позволяет коду, сгенерированному компилятором IDL одного поставщика работать на ШАРЕ другого поставщика.

Классы держателя

Поддержка и режимы передачи параметра, являющегося одновременно входным и выходным требует использования дополнительных классов держателя. Поскольку язык программирования Java не поддерживает или параметры, являющиеся одновременно входным и выходным, классы держателя необходимы как средство передачи параметра, который может быть изменен. Чтобы поддерживать переносимые тупики и скелеты, классы держателя также реализуют интерфейс org.omg.CORBA.portable.Streamable .

Классы держателя называют, добавляя "Держателя" к имени типа. Имя типа обращается к его имени в языке программирования Java. Например, класс держателя для интерфейса под названием Account в языке программирования Java назвали бы AccountHolder.

Классы держателя доступны для всех основных типов данных IDL в пакете org.omg.CORBA. Так, например, есть уже определенные классы для LongHolder, ShortHolder, FloatHolder, и так далее. Классы также сгенерированы для всех именованных определяемых пользователем типов IDL кроме определенных typedefs. (Отметьте, что в этом определяемом пользователем контексте включает типы, которые определяются в спецификациях OMG, таких как те для Интерфейсного Репозитария, и других служб OMG.)

Каждый класс держателя имеет:

Конструктор по умолчанию устанавливает поле значения в значение по умолчанию для типа как определено языком Java:

Как пример, если интерфейс Account, определенный в IDL OMG, были отображены на язык программирования 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 ();
  }

}

Для получения дополнительной информации по классам Держателя см. Главу 1.4, Отображающуюся для Основных типов в IDL OMG к Отображению Языка Java. Классы Держателя, определенные в пакете org.omg.CORBA:

    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

Классы помощника

Предоставление файлов помощника несколько статических методов должно было управлять типом. Они включают:

Класс помощника для отображенного интерфейса IDL или абстрактного интерфейса также включает узкую работу (ы). Статический узкий метод позволяет org.omg.CORBA.Object быть суженным к ссылке на объект более определенного типа. CORBA.BAD_PARAM исключения IDL бросается, если узкие сбои, потому что ссылка на объект не поддерживает требуемый тип. Различное системное исключение повышается, чтобы указать на другие виды ошибок. Попытка сузить null будет всегда успешно выполняться с возвращаемым значением null. Обычно, единственный метод помощника, который использует прикладной программист, narrow метод. Другие методы обычно используются негласно и прозрачны программисту.

Классы помощника попадают в две широких категории, помощники для типов значения и помощники для не оценивают типы. Поскольку все классы помощника в одной категории обеспечивают те же самые методы, одно универсальное объяснение каждой категории классов помощника представляется здесь.

Когда IDL OMG отображается на язык программирования Java, класс "помощника" сгенерирован для каждого определяемого пользователем типа. У этого сгенерированного класса будет имя определяемого пользователем типа с суффиксом Helper добавленный. Например, если интерфейс Account определяется в IDL OMG, idlj компилятор автоматически генерирует названный класс AccountHelper. AccountHelper класс будет содержать статические методы, необходимые для того, чтобы управлять экземплярами типа, в этом случае, Account объекты.

narrow Метод

Когда объект является возвращаемым значением для метода, это возвращается в форме универсального объекта, любой org.omg.CORBA.Object объект или a java.lang.Object объект. Этот объект должен быть брошен к его более определенному типу прежде, чем на нем можно будет управлять. Например, Account объект будет возвращен как универсальный объект и должен быть сужен к Account объект так, чтобы Account методы можно вызвать на этом.

narrow у метода есть две формы, тот, который берет org.omg.CORBA.Object объект и тот, который берет a java.lang.Object объект. Абстрактен ли интерфейс или не определяет который narrow метод его класс помощника обеспечит. У класса помощника для интерфейса, который не абстрактен, будет a narrow метод, который берет объект CORBA, тогда как narrow метод для интерфейса, который абстрактен, возьмет объект в языке программирования Java. Класс помощника для неабстрактного интерфейса, у которого есть по крайней мере один абстрактный интерфейс, обеспечит обе версии narrow метод.

Привет Мировое учебное руководство использует метод 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));

Пример Основного Класса Помощника

Основной класс помощника, в целях этого объяснения, один с методами, которые обеспечиваются каждым классом помощника плюс a narrow метод, если тип, определенный в IDL OMG, отображается на интерфейс в языке программирования Java. У типов, которые не являются типами значения, будет основной класс помощника сгенерированным для них.

Например, предполагая, что интерфейс 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, которые используются негласно, могут быть помещены в четыре группы. Три из групп используются с запросами в некоторой емкости, и четвертая группа, относительно Интерфейсного Репозитария, является категорией отдельно.

Классы, Создаваемые ШАРОМ

Первая группа содержит классы, которые создаются ШАРОМ и содержат информацию, используемую в операциях запроса.

Классы То Соглашение с Запросами

Вторая группа классов имеет дело с запросами:

Интерфейсы, Которые Служат Константами

Третья группа содержит интерфейсы, которые служат константами. Отображение IDL к Java передает под мандат тот IDL, перечисления отображаются на класс Java с перечисляемыми значениями, представленными как общедоступные статические заключительные поля в том классе (например. DefinitionKind). С другой стороны константы IDL, определенные за пределами интерфейса IDL, отображаются на интерфейс Java для каждой константы.

Это - то, почему несколько интерфейсов в пакете org.omg.CORBA состоят из единственного поля, value, который является short. Это поле является константой, используемой для таких вещей как модификатор значения или код ошибки. Например, поле value интерфейсного BAD_POLICY является одной из возможных причин исключения PolicyError, который будет брошен. Чтобы определить этот код ошибки, Вы использовали бы BAD_POLICY.value.

Исключение PolicyError использует поле value следующих интерфейсов как его возможные коды ошибки.

Метод TypeCode.type_modifier возвращает поле value одного из следующих интерфейсов. VM на имена этих интерфейсов обозначает "модификатор значения." Следующие константы возвращаются a ValueMember метод доступа объекта, чтобы обозначить видимость ValueMember объект. Эти флаги, используемые в объектах NamedValue или как параметры к методам, определяются в следующих интерфейсах:

Интерфейсные Интерфейсы Репозитария и Классы

Четвертая группа содержит Интерфейсные интерфейсы Репозитария и классы, которые сгенерированы компилятором idlj от интерфейса IDL OMG ir.idl. Цель Интерфейсного Репозитария состоит в том, чтобы идентифицировать интерфейсы, сохраненные в этом так, чтобы к ним мог получить доступ ШАР. Каждый модуль, введите, соедините интерфейсом, припишите, работа, параметр, исключение, постоянное, и так далее описывается полностью Интерфейсным API Репозитария.

ШАР не требует, чтобы был интерфейсный репозитарий, и IDL Java не включает тот. Даже при том, что этот выпуск не включает реализацию интерфейсного репозитария, следующие классы IR и интерфейсы были включены с целью создания typecodes (см. create_value_tc, create_struct_tc, create_union_tc и create_exception_tc методы в интерфейсе org.omg. CORBA.ORB):
&nbs


Связанная Документация

Для кратких обзоров, руководств, и учебного руководства, пожалуйста, см.:

Опции CORBA, Не реализованные в IDL Java

Часть API, включенного в подпакеты org.omg, обеспечивается для соответствия с текущим OMG спецификацию CORBA, но не реализуется в выпуске Sun JDKTM. Это позволяет другим лицам, имеющим патент JDK обеспечить реализации этого API в стандартных расширениях и продуктах.

Функции Тот Бросок NO_IMPLEMENT

Часть API, включенного в подпакеты org.omg, выдает исключения NO_IMPLEMENT по различным причинам. Среди этих причин:

Общая Сводка Функций или API, Не Реализованного в Этом Выпуске:


Определенный Список Нереализованных Функций в Пакете org.omg.CORBA

Нереализованные Методы в пакете org.omg.CORBA:

С тех пор:
JDK1.2
 Платформа Java™
Стандарт Эд. 7

Представьте ошибку или функцию
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.




Spec-Zone.ru - all specs in one place