Пакет org.omg.CORBA
Обеспечивает отображение API OMG CORBA в язык программирования JavaTM, включая класс ORB, который реализован таким образом, что программист может использовать его в качестве полностью функционального объектного посредника запросов (ORB).
См.: Описание
| Интерфейс | Описание |
|---|---|
| ARG_IN | Указывает на аргумент "ввода" для вызова, означая, что аргумент передается от клиента к серверу. |
| ARG_INOUT | Указывает на аргумент, используемый как для ввода, так и для вывода при вызове, означая, что аргумент передается от клиента к серверу, а затем обратно от сервера к клиенту. |
| ARG_OUT | Постоянная величина, обозначающая аргумент "вывода" для вызова, означая, что аргумент передается от сервера к клиенту. |
| BAD_POLICY | А |
| BAD_POLICY_TYPE | А |
| BAD_POLICY_VALUE | Содержит значение, используемое для указания значения политики, которое неверно для допустимого типа политики в вызове метода |
| CTX_RESTRICT_SCOPE | Флаг, который можно использовать в качестве второго параметра к методу |
| Current | Интерфейсы, производные от интерфейса |
| CurrentOperations | Интерфейс для |
| CustomMarshal | Абстрактный тип значения, который предназначен для использования ORB, а не пользователем. |
| DataInputStream | Определяет методы, используемые для чтения примитивных типов данных из входных потоков для распаковки пользовательских типов значений. |
| DataOutputStream | Определяет методы, используемые для записи примитивных типов данных в выходные потоки для упаковки пользовательских типов значений. |
| DomainManager | Предоставляет механизмы для установления и навигации по отношениям к доменам вышестоящего и подчиненного уровня, а также для создания и доступа к политикам. |
| DomainManagerOperations | Предоставляет |
| DynAny | Устарело Используйте новый DynAny вместо него |
| DynArray | Устарело Используйте новый DynArray вместо него |
| DynEnum | Устарело Используйте новый DynEnum вместо него |
| DynFixed | Устарело Используйте новый DynFixed вместо него |
| DynSequence | Устарело Используйте новый DynSequence вместо него |
| DynStruct | Устарело Используйте новый DynStruct вместо него |
| DynUnion | Устарело Используйте новый DynUnion вместо него |
| DynValue | Устарело Используйте новый DynValue вместо него |
| IDLType | Абстрактный интерфейс, унаследованный всеми объектами хранилища интерфейсов (IR), представляющими типы OMG IDL. |
| IDLTypeOperations | Этот интерфейс должен быть реализован всеми объектами IDLType. |
| IRObject | Интерфейс IRObject IDL представляет собой наиболее общий интерфейс, от которого производятся все другие интерфейсы хранилища интерфейсов, даже само хранилище. |
| IRObjectOperations | Это интерфейс операций для отображения из |
| Object | Определение ссылки на объект CORBA. |
| OMGVMCID | Идентификатор кода поставщика младшего уровня, зарезервированный для OMG. |
| Policy | Интерфейсы, производные от интерфейса |
| PolicyOperations | Предоставляет операции для объекта |
| PRIVATE_MEMBER | Константа для определения закрытого члена в классе |
| PUBLIC_MEMBER | Константа для определения открытого члена в классе |
| UNSUPPORTED_POLICY | Один из |
| UNSUPPORTED_POLICY_VALUE | А |
| VM_ABSTRACT | Определяет код, используемый для представления абстрактного интерфейса в коде типа. |
| VM_CUSTOM | Определяет код, используемый для представления пользовательского маршаллированного типа значения в коде типа. |
| VM_NONE | Определяет код, используемый для представления одного из значений типа значения в коде типа. |
| VM_TRUNCATABLE | Определяет код, используемый для представления усекаемого типа значения в коде типа. |
| Класс | Описание |
|---|---|
| _IDLTypeStub | Плечо для |
| _PolicyStub | Плечо для |
| Any | Служит контейнером для любых данных, которые могут быть описаны в IDL или для любого примитивного типа IDL. |
| AnyHolder | Держатель для |
| AnySeqHelper | Помощник для |
| AnySeqHolder | Держатель для |
| BooleanHolder | Держатель для |
| BooleanSeqHelper | Помощник для |
| BooleanSeqHolder | Держатель для |
| ByteHolder | Держатель для |
| CharHolder | Держатель для |
| CharSeqHelper | Помощник для |
| CharSeqHolder | Держатель для |
| CompletionStatus | Объект, указывающий, завершилось ли выполнение метода при возникновении |
| CompletionStatusHelper | Помощник для |
| Context | Объект, используемый в операциях |
| ContextList | Объект, содержащий изменяемый список объектов |
| CurrentHelper | Помощник для |
| CurrentHolder | Держатель для |
| DefinitionKind | Класс, предоставляющий константы, используемые для идентификации типа объекта репозитория интерфейса. |
| DefinitionKindHelper | Помощник для |
| DoubleHolder | Держатель для |
| DoubleSeqHelper | Помощник для |
| DoubleSeqHolder | Держатель для |
| DynamicImplementation | Устарело org.omg.CORBA.DynamicImplementation |
| Environment | Контейнер (держатель) для исключения, используемого в операциях |
| ExceptionList | Объект, используемый в операциях |
| FieldNameHelper | Помощник для |
| FixedHolder | Держатель для |
| FloatHolder | Держатель для |
| FloatSeqHelper | Помощник для |
| FloatSeqHolder | Держатель для |
| IdentifierHelper | Помощник для |
| IDLTypeHelper | Помощник для |
| IntHolder | Держатель для |
| LocalObject | Используется в качестве базового класса для реализации локального IDL-интерфейса в Java-отображении. |
| LongHolder | Держатель для |
| LongLongSeqHelper | Помощник для |
| LongLongSeqHolder | Держатель для |
| LongSeqHelper | Помощник для |
| LongSeqHolder | Держатель для |
| NamedValue | Объект, используемый в DII и DSI для описания аргументов и возвращаемых значений. |
| NameValuePair | Связывает имя со значением, которое является атрибутом IDL-структуры, и используется в API |
| NameValuePairHelper | Помощник для |
| NVList | Изменяемый список, содержащий объекты |
| ObjectHelper | |
| ObjectHolder | Держатель для |
| OctetSeqHelper | Помощник для |
| OctetSeqHolder | Держатель для |
| ORB | Класс, предоставляющий API для функций CORBA Object Request Broker. |
| ParameterMode | Перечисление режимов параметров для параметра. |
| ParameterModeHelper | Перечисление режимов параметров для параметра. |
| ParameterModeHolder | Перечисление режимов параметров для параметра. |
| PolicyErrorCodeHelper | Захват причины недействительности политики. |
| PolicyErrorHelper | Выбрасывается для указания проблем со значениями параметров, переданными в операцию |
| PolicyErrorHolder | Выбрасывается для указания проблем со значениями параметров, переданными в операцию |
| PolicyHelper | Помощник для |
| PolicyHolder | Держатель для |
| PolicyListHelper | Помощник для |
| PolicyListHolder | Держатель для |
| PolicyTypeHelper | Помощник для |
| Principal | Устарело Устарело CORBA 2.2. |
| PrincipalHolder | Устарело Устарело CORBA 2.2. |
| RepositoryIdHelper | Помощник для |
| Request | Объект, содержащий информацию, необходимую для вызова метода. |
| ServerRequest | Объект, который фиксирует явное состояние запроса для динамического интерфейса скелета (DSI). |
| ServiceDetail | Объект, представляющий службу ORB: его поле |
| ServiceDetailHelper | |
| ServiceInformation | IDL-структура в модуле CORBA, хранящая информацию о доступной в реализации ORB службе CORBA, полученная из метода |
| ServiceInformationHelper | |
| ServiceInformationHolder | Держатель для |
| SetOverrideType | Отображение CORBA-метки |
| SetOverrideTypeHelper | Помощник для |
| ShortHolder | Держатель для |
| ShortSeqHelper | Помощник для |
| ShortSeqHolder | Держатель для |
| StringHolder | Держатель для |
| StringSeqHelper | Массив строк |
| StringSeqHolder | Массив строк |
| StringValueHelper | Помощник для |
| StructMember | Описывает член IDL |
| StructMemberHelper | Помощник для |
| TCKind | Java-отображение IDL-перечисления |
| TypeCode | Контейнер для информации о конкретном типе данных CORBA. |
| TypeCodeHolder | Хранитель для |
| ULongLongSeqHelper | Помощник для |
| ULongLongSeqHolder | Хранитель для |
| ULongSeqHelper | Помощник для |
| ULongSeqHolder | Хранитель для |
| UnionMember | Описание в репозитории интерфейса члена объединения IDL. |
| UnionMemberHelper | Помощник для |
| UnknownUserExceptionHelper | Помощник для |
| UnknownUserExceptionHolder | Хранитель для |
| UShortSeqHelper | Помощник для |
| UShortSeqHolder | Хранитель для |
| ValueBaseHelper | |
| ValueBaseHolder | Хранитель для |
| ValueMember | Описание в репозитории интерфейса члена объекта |
| ValueMemberHelper | Помощник для |
| VersionSpecHelper | Помощник для |
| VisibilityHelper | Помощник для |
| WCharSeqHelper | Помощник для |
| WCharSeqHolder | Хранитель для |
| WrongTransactionHelper | Помощник для |
| WrongTransactionHolder | Хранитель для |
| WStringSeqHelper | Массив WStrings |
| WStringSeqHolder | Массив WStrings |
| WStringValueHelper | org/omg/CORBA/WStringValueHelper.java Сгенерировано компилятором IDL-в-Java (портативный), версия "3.0" из orb.idl 31 мая 1999 г. 22:27:30 по Гринвичу Определение класса было изменено в соответствии со следующими спецификациями OMG: Основные элементы ORB, как определено в CORBA 2.3.1 (formal/99-10-07) Картирование IDL/Java, как определено в ptc/00-01-08 |
| Исключение | Описание |
|---|---|
| ACTIVITY_COMPLETED | Исключение системы |
| ACTIVITY_REQUIRED | Исключение системы |
| BAD_CONTEXT | Исключение, сгенерированное, когда операция вызывается клиентом, но переданный контекст не содержит значений контекста, необходимых для операции. |
| BAD_INV_ORDER | Это исключение указывает, что вызывающий элемент вызвал операции в неправильном порядке. |
| BAD_OPERATION | Исключение, генерируемое, когда ссылка на объект обозначает существующий объект, но объект не поддерживает вызываемую операцию. |
| BAD_PARAM | Исключение, генерируемое, когда параметр, переданный в вызов, находится вне допустимого диапазона или иным образом считается недопустимым. |
| BAD_QOS | Исключение |
| BAD_TYPECODE | Исключение, генерируемое, когда ORB обнаружил неверный код типа (например, код типа с недопустимым значением |
| Bounds | Пользовательское исключение, генерируемое, когда параметр не находится в допустимых пределах для объекта, к которому пытается обратиться метод. |
| CODESET_INCOMPATIBLE | Это исключение генерируется всякий раз, когда осмысленная коммуникация невозможна между кодовыми наборами клиента и сервера. |
| COMM_FAILURE | Это исключение генерируется, если связь теряется во время выполнения операции, после того, как запрос был отправлен клиентом, но до того, как ответ от сервера был возвращен клиенту. |
| DATA_CONVERSION | Это исключение генерируется, если ORB не может преобразовать представление данных, маршализованных в его собственное внутреннее представление, или наоборот. |
| FREE_MEM | Исключение, генерируемое, когда ORB потерпел неудачу при попытке освободить динамическую память, например, из-за повреждения кучи или блокировки сегментов памяти. |
| IMP_LIMIT | Это исключение указывает на превышение предела реализации во время выполнения ORB. |
| INITIALIZE | Исключение, генерируемое, когда ORB столкнулся с ошибкой во время его инициализации, например, с неудачей в получении сетевых ресурсов или обнаружением ошибки конфигурации. |
| INTERNAL | Это исключение указывает на внутреннюю ошибку в ORB, например, если ORB обнаружил повреждение своих внутренних структур данных. |
| INTF_REPOS | Исключение, генерируемое, когда ORB не может достичь репозитория интерфейсов или обнаружена какая-либо другая ошибка, связанная с репозиторием интерфейсов. |
| INV_FLAG | Исключение, генерируемое, когда в операцию был передан недопустимый флаг (например, при создании запроса DII). |
| INV_IDENT | Это исключение указывает, что идентификатор IDL имеет синтаксическую ошибку. |
| INV_OBJREF | Это исключение указывает, что ссылка на объект имеет внутреннюю ошибку. |
| INV_POLICY | Стандартное исключение, генерируемое, когда вызов не может быть выполнен из-за несовместимости переопределений |
| INVALID_ACTIVITY | Исключение системы |
| INVALID_TRANSACTION | Исключение, генерируемое, когда запрос содержит недействительный контекст транзакции. |
| MARSHAL | Запрос или ответ из сети структурно неверны. |
| NO_IMPLEMENT | Это исключение указывает, что даже если вызываемая операция существует (у неё есть определение IDL), реализация этой операции отсутствует. |
| NO_MEMORY | Исключение, генерируемое, когда в ORB закончилась память. |
| NO_PERMISSION | Исключение, генерируемое, когда вызов завершился неудачей из-за недостаточных привилегий вызывающего элемента. |
| NO_RESOURCES | Исключение, генерируемое, когда ORB столкнулся с ограничением ресурсов. |
| NO_RESPONSE | Это исключение генерируется, если клиент пытается получить результат отложенного синхронного вызова, но ответ на запрос еще недоступен. |
| OBJ_ADAPTER | Это исключение, как правило, указывает на административный несоответствие, например, сервер может попытаться зарегистрировать себя в репозитории реализации под именем, которое уже используется или неизвестно репозиторию. |
| OBJECT_NOT_EXIST | Исключение, генерируемое при выполнении вызова на удаленный объект. |
| PERSIST_STORE | Это исключение указывает на ошибку постоянного хранения, например, на ошибку установления соединения с базой данных или на повреждение базы данных. |
| PolicyError | Пользовательское исключение, генерируемое при возникновении ошибки политики. |
| REBIND |
|
| SystemException | Базовый класс для всех стандартных исключений CORBA. |
| TIMEOUT |
|
| TRANSACTION_MODE | Исключение CORBA |
| TRANSACTION_REQUIRED | Исключение указывает, что запрос содержал пустой контекст транзакции, но активная транзакция требуется. |
| TRANSACTION_ROLLEDBACK | Исключение, генерируемое, когда транзакция, связанная с запросом, уже была откатана или помечена на откат. |
| TRANSACTION_UNAVAILABLE | Исключение CORBA |
| TRANSIENT | Исключение, генерируемое, когда ORB пытался связаться с объектом и потерпел неудачу. |
| UNKNOWN | Это исключение генерируется, если реализация операции генерирует исключение, отличное от CORBA (например, исключение, специфичное для языка программирования реализации), или если операция генерирует пользовательское исключение, которое не появляется в выражении raises операции. |
| UnknownUserException | Класс, содержащий пользовательские исключения, возвращаемые сервером. |
| UserException | Базовый класс для пользовательских исключений, определенных IDL CORBA. |
| WrongTransaction | Пользовательское исключение CORBA |
Описание пакета org.omg.CORBA
Предоставляет отображение OMG CORBA API на язык программирования JavaTM, включая класс ORB, который реализован так, чтобы программист мог использовать его в качестве полностью функционального Object Request Broker (ORB).
Для получения точного списка поддерживаемых разделов официальных спецификаций CORBA, с которыми совместима Java[TM] Platform, Standard Edition 6, см. Официальные спецификации поддержки CORBA в Java[TM] SE 6.
Общая информация
Информация в этом разделе относится к тому, кто компилирует файлы Interface Definition Language (IDL) и использует ORB для написания клиентов и серверов.Классы и интерфейсы, описанные в этом разделе, можно разделить на четыре группы: ORB classes, Исключения, Helper классы и Holder классы.
Класс ORB
ORB обрабатывает (или выступает в роли посредника) вызовы методов между клиентом и реализацией метода на сервере. Поскольку клиент и сервер могут находиться в любой точке сети, а вызов и реализация могут быть написаны на разных языках программирования, ORB выполняет значительную работу за кулисами для достижения этой коммуникации.
Большая часть работы ORB полностью прозрачна для пользователя, и большая часть пакета CORBA состоит из классов, используемых ORB за кулисами. В результате большинство программистов будут использовать только небольшую часть этого пакета напрямую. Фактически, большинство программистов будут использовать только несколько методов из класса ORB, некоторые исключения и иногда класс-держатель.
Методы ORB
Прежде чем приложение сможет войти в среду CORBA, оно должно:
- Быть инициализированным в средах ORB и, возможно, адаптера объектов (POA).
- Получить ссылки на объект ORB (для использования в будущих операциях ORB) и, возможно, другие объекты (включая корневой POA или некоторые объекты адаптера объектов).
Для инициализации приложений и получения соответствующих ссылок на объекты предоставляются следующие операции:
- Операции, предоставляющие доступ к ORB, которые обсуждаются в этом разделе.
- Операции, предоставляющие доступ к адаптерам объектов, хранилищу интерфейсов, службе именования и другим объектным службам. Эти операции описаны в Другие классы.
Когда приложение требует среды CORBA, ему нужен механизм для получения ссылки на объект ORB и, возможно, ссылки на объект OA (например, корневой POA). Это служит двум целям. Во-первых, это инициализирует приложение в средах ORB и OA. Во-вторых, это возвращает ссылку на объект ORB и ссылку на объект OA приложению для использования в будущих операциях ORB и OA.
Для получения ссылки на объект ORB приложения вызывают операцию ORB.init. Параметры вызова могут включать идентификатор ORB, для которого требуется ссылка на объект, и список аргументов, используемый для передачи данных, специфичных для среды, в вызов.
Это методы ORB, которые предоставляют доступ к ORB:
-
init () -
init (String [] args, Properties props) -
init (Applet app, Properties props)
Использование метода init() без параметров запускает одноэлементный ORB, который может предоставлять только создание типкода anys, необходимые в коде, сгенерированном в классах-помощниках с помощью idlj.
Приложениям требуется переносимый способ получения начальных ссылок на объекты. Ссылки требуются для корневого POA, текущего POA, хранилища интерфейсов и различных экземпляров объектных служб. Функциональность, необходимая приложению, аналогична той, что предоставляется службой именования. Однако OMG не хочет предписывать предоставление службы именования всем приложениям для их переносимой инициализации. Следовательно, операции, показанные в этом разделе, предоставляют упрощенную локальную версию службы именования, которую приложения могут использовать для получения небольшого, определенного набора ссылок на объекты, необходимых для его работы. Поскольку с этим механизмом ожидается только небольшой хорошо определенный набор объектов, контекст именования может быть уплощен, чтобы стать одноуровневым пространством имен. Это упрощение приводит к определению только двух операций для достижения необходимой функциональности.
Первоначальные ссылки получаются с помощью двух операций, предоставляемых в интерфейсе объекта ORB, обеспечивающих средства для перечисления и разрешения начальных ссылок на объекты. Это:
-
resolve_initial_references (String name) -
list_initial_services () -
register_initial_reference (String id, org.omg.CORBA.Object obj)
Пример, использующий некоторые из этих методов, можно найти в Начальное руководство по Java IDL.
Исключения
Исключения в Java IDL аналогичны исключениям в любом коде, написанном на языке программирования Java. Если метод определен как выбрасывающий исключение, любой код, использующий этот метод, должен иметь блокtry/catch и обрабатывать это исключение при его возникновении. Дополнительную информацию и объяснение различий между системными исключениями и пользовательскими исключениями можно найти в документации на исключения Java IDL.
Ниже приведен список системных исключений (которые являются необрабатываемыми исключениями, наследуемыми через 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 есть несколько пакетов с частью "Package" в их имени. Эти пакеты обычно довольно малы, так как все, что они делают, — это предоставляют исключения или классы для использования интерфейсами и классами в пакете CORBA. Например, пакет org.omg.CORBA.TypeCodePackage содержит два исключения, выбрасываемые методами в классе TypeCode. Эти исключения:
-
BadKind -
Bounds
org.omg.CORBA.ORBPackage содержит два исключения: -
InvalidName -
InconsistentTypeCode
Другим подпакетом CORBA является пакет portable. Он предоставляет набор ORB API, который позволяет коду, сгенерированному компилятором IDL одного поставщика, работать в ORB другого поставщика.
Классы-держатели
Поддержка режимов передачи параметров out и inout требует использования дополнительных классов-держателей. Так как язык программирования Java не поддерживает параметры out или inout, классы-держатели необходимы как способ передачи параметра, который может быть изменён. Для обеспечения переносимых заглушек и скелетов классы-держатели также реализуют интерфейс org.omg.CORBA.portable.Streamable .
Классы-держатели называются добавлением "Holder" к имени типа. Имя типа относится к его имени на языке программирования Java. Например, класс-держатель для интерфейса с именем Account на языке программирования Java будет называться AccountHolder.
Классы-держатели доступны для всех основных типов данных IDL в пакете org.omg.CORBA. Таким образом, например, уже определены классы для LongHolder, ShortHolder, FloatHolder и так далее. Классы также генерируются для всех именованных пользовательских типов IDL, за исключением типов, определенных typedefs. (Обратите внимание, что в этом контексте пользовательские типы включают типы, определённые в спецификациях OMG, такие как хранилище интерфейсов и другие службы OMG.)
Каждый класс-держатель имеет:
- Конструктор из экземпляра
- Конструктор по умолчанию
- Общедоступное поле-член
value, представляющее типизированное значение. - Метод для чтения входного потока и присвоения содержимого полю типа
value - Метод для записи значения поля
valueв выходной поток - Метод для получения типкода типа
Конструктор по умолчанию устанавливает поле значения в значение по умолчанию для типа, как определено языком Java:
-
falseдля boolean -
0для числовых и символьных типов -
nullдля строк и ссылок на объекты
В качестве примера, если интерфейс Account, определённый в OMG IDL, был бы сопоставлен с языком программирования 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, Сопоставление для основных типов, в Сопоставлении OMG IDL с языком 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
Классы-помощники
Файлы-помощники предоставляют несколько статических методов, необходимых для обработки типа. К ним относятся:
-
Anyоперации вставки и извлечения для типа - Получение идентификатора хранилища
- Получение типкода
- Чтение и запись типа из и в поток
- Реализация интерфейса
ValueHelper(если это пользовательский тип значения)
Класс-помощник для сопоставленного интерфейса IDL или абстрактного интерфейса также включает операцию сужения. Статический метод сужения позволяет сузить org.omg.CORBA.Object до ссылки на объект более конкретного типа. Исключение IDL CORBA.BAD_PARAM выбрасывается, если сужение не удается, потому что ссылка на объект не поддерживает запрошенный тип. Другое системное исключение возбуждается для указания других видов ошибок. Попытка сузить null всегда приведет к успеху с возвращаемым значением null. Как правило, единственный метод-помощник, который использует программист приложений, — это метод narrow. Другие методы обычно используются за кулисами и прозрачны для программиста.
Классы-помощники делятся на две основные категории: помощники для типов-значений и помощники для типов, не являющихся типами-значениями. Поскольку все классы-помощники в одной категории предоставляют одни и те же методы, здесь представлено общее объяснение каждой категории классов-помощников.
При сопоставлении OMG IDL с языком программирования Java для каждого пользовательского типа генерируется класс "помощник". Название этого сгенерированного класса будет содержать имя пользовательского типа с добавленным суффиксом Helper. Например, если интерфейс Account определен в OMG IDL, компилятор idlj автоматически сгенерирует класс с именем AccountHelper. Класс AccountHelper будет содержать статические методы, необходимые для работы с экземплярами типа, в данном случае объектами Account.
Метод narrow
org.omg.CORBA.Object, либо объекта java.lang.Object. Этот объект необходимо привести к своему более конкретному типу, прежде чем с ним можно будет работать. Например, объект Account будет возвращён как универсальный объект и должен быть приведен к объекту типа Account, чтобы на нём можно было вызвать методы Account. Метод narrow имеет две формы: одна, принимающая объект org.omg.CORBA.Object, и другая, принимающая объект java.lang.Object. От того, является ли интерфейс абстрактным или нет, зависит, какой метод narrow будет предоставлять его вспомогательный класс. Вспомогательный класс для интерфейса, который не является абстрактным, будет иметь метод narrow, принимающий объект CORBA, тогда как метод narrow для абстрактного интерфейса будет принимать объект языка программирования Java. Вспомогательный класс для неабстрактного интерфейса, имеющего хотя бы один абстрактный базовый интерфейс, будет предоставлять обе версии метода narrow.
Пример использования метода narrow можно увидеть в руководстве Hello World:
// 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, если тип, определённый в OMG IDL, соответствует интерфейсу языка программирования 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, используемые в фоновом режиме, можно разделить на четыре группы. Три группы связаны с запросами, а четвёртая группа, относящаяся к хранилищу интерфейсов, представляет собой отдельную категорию. Классы, созданные ORB
Первая группа содержит классы, созданные ORB, и содержит информацию, используемую в операциях с запросами.-
TCKind— указывает вид (тип данных) для объектаTypeCode -
TypeCode— указывает тип данных и, возможно, другую информацию -
Any— содержит значение и его тип -
NamedValue— содержит имя, объектAny, и флаг режима аргумента. ОбъектыNamedValueсодержат информацию об аргументах метода, возвращаемых значениях метода или контексте. -
ContextList— список строк, описывающих контексты, которые нужно разрешить и отправить вместе с вызовом -
ExceptionList— списокTypeCodeдля исключений, которые могут быть выброшены методом -
Environment— контейнер для исключения, выброшенного во время вызова метода -
Context— список объектовNamedValue, используемых для передачи вспомогательной информации от клиента к серверу -
NVList— список объектовNamedValue, используемых для передачи аргументов или получения результатов
Классы, работающие с запросами
Вторая группа классов работает с запросами:-
Object— базовый класс для всех ссылок на объекты CORBA -
Request— основной класс в DII, содержащий методы для добавления аргументов к запросу, для доступа к информации о вызываемом методе (имя метода, его аргументы, выбрасываемые им исключения и так далее) и для выполнения вызовов на запросе -
DynamicImplementation— базовый класс для реализации сервера, использующего DSI. Он имеет методinvoke, который используется реализацией этого класса для определения состояния объектаServerRequestи установки его результата или исключения -
ServerRequest— фиксирует явное состояние запроса для динамического скелетного интерфейса
Интерфейсы, служащие константами
Третья группа содержит интерфейсы, которые служат константами. Сопоставление IDL с Java требует, чтобы перечисления IDL были сопоставлены с классом Java, где перечисленные значения представлены как общедоступные статические конечные поля в этом классе (например, DefinitionKind). С другой стороны, константы IDL, определённые вне интерфейса IDL, отображаются на интерфейс Java для каждой константы.Вот почему несколько интерфейсов в пакете org.omg.CORBA состоят из одного поля value, которое является short. Это поле — константа, используемая, например, для кода ошибки или модификатора значения. Например, поле value интерфейса BAD_POLICY — одна из возможных причин выброса исключения PolicyError. Для указания этого кода ошибки используется BAD_POLICY.value.
Исключение PolicyError использует поле value следующих интерфейсов в качестве возможных кодов ошибок.
-
BAD_POLICY -
BAD_POLICY_TYPE -
BAD_POLICY_VALUE -
UNSUPPORTED_POLICY -
UNSUPPORTED_POLICY_VALUE
TypeCode.type_modifier возвращает поле value одного из следующих интерфейсов. VM в названиях этих интерфейсов обозначает "модификатор значения". -
VM_NONE -
VM_ABSTRACT -
VM_CUSTOM -
VM_TRUNCATABLE
ValueMember для обозначения видимости объекта ValueMember. -
PRIVATE_MEMBER -
PUBLIC_MEMBER
NamedValue или в качестве параметров методов, определены в следующих интерфейсах: -
ARG_IN -
ARG_INOUT -
ARG_OUT -
CTX_RESTRICT_SCOPE
Интерфейсы и классы хранилища интерфейсов
Четвёртая группа содержит интерфейсы и классы хранилища интерфейсов, которые генерируются компиляторомidlj из интерфейса OMG IDL ir.idl. Целью хранилища интерфейсов является идентификация хранящихся в нём интерфейсов, чтобы к ним мог получить доступ ORB. Каждая модуль, тип, интерфейс, атрибут, операция, параметр, исключение, константа и так далее полностью описаны API хранилища интерфейсов. ORB не требует наличия хранилища интерфейсов, и Java IDL не включает его. Хотя в этом релизе нет реализации хранилища интерфейсов, следующие классы и интерфейсы IR включены для создания кодов типов (см. методы create_value_tc, create_struct_tc, create_union_tc и create_exception_tc в интерфейсе org.omg.CORBA.ORB):
&nbs
- IRObject
- IDLType
- DefinitionKind
- StructMember
- UnionMember
- ValueMember
Связанная документация
Для обзоров, руководств и учебного пособия обратитесь к:Функциональные возможности CORBA, не реализованные в Java IDL
Некоторые API, включенные в подпакеты org.omg, предоставляются для соответствия текущему спецификации OMG CORBA, но не реализованы в релизе JDKTM Sun. Это позволяет другим лицензиатам JDK предоставлять реализации этого API в стандартных расширениях и продуктах.
Функциональные возможности, вызывающие исключение NO_IMPLEMENT
Некоторые API, включенные в подпакеты org.omg, выбрасывают исключения NO_IMPLEMENT по различным причинам. Среди этих причин:
- В некоторых случаях, например,
LocalObject, полная реализация в соответствии со спецификацией предполагает, что эти API должны вызывать исключениеNO_IMPLEMENT. - В большинстве случаев, например, методы в
ORB.java, методы, выбрасывающиеNO_IMPLEMENT, фактически реализованы в подклассах в другом месте кода ORB. - В некоторых случаях, например,
_get_interface_def()и_get_interface, API ещё не реализованы.
Общий обзор функций или API, не реализованных в данном релизе:
- Хранилище интерфейсов. Для нормальной работы Java IDL хранилище интерфейсов не требуется.
- Java IDL не поддерживает
long double. - Политики (
org.omg.CORBA.Policy) и методы для их получения не реализованы. - Управляющие домены (
org.omg.CORBA.DomainManager) и методы для их получения не реализованы. - Справочная информация о сервисе
org.omg.CORBA.ServiceInformationи метод ORBpublic boolean get_service_information(short service_type, ServiceInformationHolder service_info)не реализованы. - Методы ORB для поддержки однопотокового выполнения (
perform_work,work_pending) не реализованы. - Контексты IDL.
Специфический список нереализованных функций в пакете org.omg.CORBA
Нереализованные методы в пакете org.omg.CORBA:
-
ORB-
public org.omg.CORBA.Policy create_policy(int type, org.omg.CORBA.Any val) -
public void perform_work() -
public boolean work_pending() -
public org.omg.CORBA.Current get_current() -
create_operation_list -
get_default_context -
get_service_information - устаревший
DynAnys(устарел в пользу пакетаDynamicAny)
-
- С момента:
- JDK1.2
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.