Spec-Zone.ru › OpenJDK 8

Пакет org.omg.CORBA

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

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

Интерфейс Описание
ARG_IN

Указывает на аргумент "ввода" для вызова, означая, что аргумент передается от клиента к серверу.

ARG_INOUT

Указывает на аргумент, используемый как для ввода, так и для вывода при вызове, означая, что аргумент передается от клиента к серверу, а затем обратно от сервера к клиенту.

ARG_OUT

Постоянная величина, обозначающая аргумент "вывода" для вызова, означая, что аргумент передается от сервера к клиенту.

BAD_POLICY

А PolicyErrorCode, которая будет заполнена в исключении PolicyError.

BAD_POLICY_TYPE

А PolicyErrorCode, которая будет заполнена в исключении PolicyError.

BAD_POLICY_VALUE

Содержит значение, используемое для указания значения политики, которое неверно для допустимого типа политики в вызове метода create_policy , определенного в классе ORB.

CTX_RESTRICT_SCOPE

Флаг, который можно использовать в качестве второго параметра к методу Context.get_values для ограничения области поиска.

Current

Интерфейсы, производные от интерфейса Current, позволяют службам ORB и CORBA получать доступ к информации (контексту), связанной с потоком выполнения, в котором они выполняются.

CurrentOperations

Интерфейс для Current.

CustomMarshal

Абстрактный тип значения, который предназначен для использования ORB, а не пользователем.

DataInputStream

Определяет методы, используемые для чтения примитивных типов данных из входных потоков для распаковки пользовательских типов значений.

DataOutputStream

Определяет методы, используемые для записи примитивных типов данных в выходные потоки для упаковки пользовательских типов значений.

DomainManager

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

DomainManagerOperations

Предоставляет DomainManager средства для доступа к политикам.

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

Это интерфейс операций для отображения из IRObject.

Object

Определение ссылки на объект CORBA.

OMGVMCID

Идентификатор кода поставщика младшего уровня, зарезервированный для OMG.

Policy

Интерфейсы, производные от интерфейса Policy, позволяют ORB или службе CORBA получить доступ к определенным вариантам, которые влияют на ее работу.

PolicyOperations

Предоставляет операции для объекта Policy.

PRIVATE_MEMBER

Константа для определения закрытого члена в классе ValueMember.

PUBLIC_MEMBER

Константа для определения открытого члена в классе ValueMember.

UNSUPPORTED_POLICY

Один из PolicyErrorCode , который будет заполнен, если запрашиваемая Policy считается допустимой ORB, но в настоящее время не поддерживается.

UNSUPPORTED_POLICY_VALUE

А PolicyErrorCode, которая будет заполнена, если запрашиваемое значение для Policy имеет допустимый тип и находится в допустимом диапазоне для этого типа, но это допустимое значение в настоящее время не поддерживается.

VM_ABSTRACT

Определяет код, используемый для представления абстрактного интерфейса в коде типа.

VM_CUSTOM

Определяет код, используемый для представления пользовательского маршаллированного типа значения в коде типа.

VM_NONE

Определяет код, используемый для представления одного из значений типа значения в коде типа.

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

Используется в качестве базового класса для реализации локального IDL-интерфейса в Java-отображении.

LongHolder

Держатель для Long.

LongLongSeqHelper

Помощник для LongLongSeq.

LongLongSeqHolder

Держатель для LongLongSeq.

LongSeqHelper

Помощник для LongSeqHelper.

LongSeqHolder

Держатель для LongSeq.

NamedValue

Объект, используемый в DII и DSI для описания аргументов и возвращаемых значений.

NameValuePair

Связывает имя со значением, которое является атрибутом IDL-структуры, и используется в API DynStruct.

NameValuePairHelper

Помощник для NameValuePair.

NVList

Изменяемый список, содержащий объекты NamedValue.

ObjectHelper
ObjectHolder

Держатель для Object.

OctetSeqHelper

Помощник для OctetSeq.

OctetSeqHolder

Держатель для OctetSeq.

ORB

Класс, предоставляющий API для функций CORBA Object Request Broker.

ParameterMode

Перечисление режимов параметров для параметра.

ParameterModeHelper

Перечисление режимов параметров для параметра.

ParameterModeHolder

Перечисление режимов параметров для параметра.

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

Объект, который фиксирует явное состояние запроса для динамического интерфейса скелета (DSI).

ServiceDetail

Объект, представляющий службу ORB: его поле service_detail_type содержит тип службы ORB, а его поле service_detail содержит описание службы ORB.

ServiceDetailHelper
ServiceInformation

IDL-структура в модуле CORBA, хранящая информацию о доступной в реализации ORB службе CORBA, полученная из метода ORB.get_service_information.

ServiceInformationHelper
ServiceInformationHolder

Держатель для ServiceInformation.

SetOverrideType

Отображение CORBA-метки enum маркирования SET_OVERRIDE и ADD_OVERRIDE, которые указывают, должны ли политики заменять существующие политики Object или добавляться к ним.

SetOverrideTypeHelper

Помощник для SetOverrideType.

ShortHolder

Держатель для Short.

ShortSeqHelper

Помощник для ShortSeqHelper.

ShortSeqHolder

Держатель для ShortSeq.

StringHolder

Держатель для String.

StringSeqHelper

Массив строк

StringSeqHolder

Массив строк

StringValueHelper

Помощник для StringValue.

StructMember

Описывает член IDL struct в репозитории интерфейса, включая имя члена struct, тип члена struct, и typedef, который представляет IDL-тип члена struct, описывающего член объекта struct.

StructMemberHelper

Помощник для StructMember.

TCKind

Java-отображение IDL-перечисления TCKind, которое определяет тип объекта TypeCode.

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

Массив 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_COMPLETED может быть поднято для любого метода, для которого обращается к контексту активности.

ACTIVITY_REQUIRED

Исключение системы ACTIVITY_REQUIRED может быть поднято для любого метода, для которого требуется контекст активности.

BAD_CONTEXT

Исключение, сгенерированное, когда операция вызывается клиентом, но переданный контекст не содержит значений контекста, необходимых для операции.

BAD_INV_ORDER

Это исключение указывает, что вызывающий элемент вызвал операции в неправильном порядке.

BAD_OPERATION

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

BAD_PARAM

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

BAD_QOS

Исключение BAD_QOS генерируется всякий раз, когда объект не может поддерживать требуемое качество обслуживания, заданное параметром вызова, для которого заданы семантики качества обслуживания.

BAD_TYPECODE

Исключение, генерируемое, когда ORB обнаружил неверный код типа (например, код типа с недопустимым значением TCKind).

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

Стандартное исключение, генерируемое, когда вызов не может быть выполнен из-за несовместимости переопределений Policy, которые применяются к данному вызову.

INVALID_ACTIVITY

Исключение системы 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

REBIND генерируется, когда текущая эффективная политика RebindPolicy имеет значение NO_REBIND или NO_RECONNECT, и вызов на ссылку на связанный объект приводит к сообщению LocateReply со статусом OBJECT_FORWARD или сообщению Reply со статусом LOCATION_FORWARD.

SystemException

Базовый класс для всех стандартных исключений CORBA.

TIMEOUT

TIMEOUT генерируется, когда доставка не была произведена, и истек указанный период времени жизни.

TRANSACTION_MODE

Исключение CORBA TRANSACTION_MODE генерируется клиентом ORB, если он обнаруживает несоответствие между InvocationPolicy в IOR и выбранным путем вызова (т.е., прямым или маршрутизированным вызовом).

TRANSACTION_REQUIRED

Исключение указывает, что запрос содержал пустой контекст транзакции, но активная транзакция требуется.

TRANSACTION_ROLLEDBACK

Исключение, генерируемое, когда транзакция, связанная с запросом, уже была откатана или помечена на откат.

TRANSACTION_UNAVAILABLE

Исключение CORBA TRANSACTION_UNAVAILABLE генерируется ORB, когда он не может обработать контекст службы транзакций, потому что его подключение к службе транзакций было аномально прервано.

TRANSIENT

Исключение, генерируемое, когда ORB пытался связаться с объектом и потерпел неудачу.

UNKNOWN

Это исключение генерируется, если реализация операции генерирует исключение, отличное от CORBA (например, исключение, специфичное для языка программирования реализации), или если операция генерирует пользовательское исключение, которое не появляется в выражении raises операции.

UnknownUserException

Класс, содержащий пользовательские исключения, возвращаемые сервером.

UserException

Базовый класс для пользовательских исключений, определенных IDL CORBA.

WrongTransaction

Пользовательское исключение CORBA WrongTransaction.

Описание пакета 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

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

Для обзоров, руководств и учебного пособия обратитесь к:
  • Главная страница Java IDL

Функциональные возможности 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 и метод ORB public 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API