接口 | 描述 |
---|---|
ARG_IN |
表示调用的“input”参数,这意味着参数正在从客户机传递到服务器。
|
ARG_INOUT |
在调用中表示用于输入和输出的参数,这意味着该参数是从客户端传递到服务器,然后从服务器传回到客户端。
|
ARG_OUT |
一个常量,表示一个调用的“输出”参数,这意味着该参数正在从服务器传递给客户端。
|
BAD_POLICY |
A
PolicyErrorCode将填写
PolicyError例外。
|
BAD_POLICY_TYPE |
A
PolicyErrorCode将填写
PolicyError例外。
|
BAD_POLICY_VALUE |
包含用于指示对ORB类中定义的
create_policy 方法的调用中有效策略类型不正确的策略值的值。
|
CTX_RESTRICT_SCOPE |
一个标志,可以用作方法
Context.get_values 的第二个
Context.get_values 来限制搜索范围。
|
Current |
从Current接口派生的
接口使得ORB和CORBA服务可以访问与运行线程相关联的信息(上下文)。
|
CurrentOperations |
界面为
Current 。
|
CustomMarshal |
意图由ORB使用的抽象值类型,而不是用户。
|
DataInputStream |
定义用于从输入流读取原始数据类型的方法,以解除对自定义值类型的调整。
|
DataOutputStream |
定义用于将原始数据类型写入到编组自定义值类型的输出流中的方法。
|
DomainManager |
提供建立和导航关系到上级和下级域以及创建和访问策略的机制。
|
DomainManagerOperations |
提供
DomainManager访问策略的方法。
|
DynAny | Deprecated
改用新的DynAny
|
DynArray | Deprecated
使用新的DynArray代替
|
DynEnum | Deprecated
改用新的DynEnum
|
DynFixed | Deprecated
改用新的DynFixed
|
DynSequence | Deprecated
改用新的DynSequence
|
DynStruct | Deprecated
改用新的DynStruct
|
DynUnion | Deprecated
改用新的DynUnion
|
DynValue | Deprecated
改用新的DynValue
|
IDLType |
由代表OMG IDL类型的所有Interface Repository(IR)对象继承的抽象接口。
|
IDLTypeOperations |
该接口必须由所有IDLType对象实现。
|
IRObject |
IRObject IDL接口代表所有其他接口存储库接口派生的最通用接口,即使是Repository本身。
|
IRObjectOperations |
这是IRObject映射的操作
界面 。
|
Object |
CORBA对象引用的定义。
|
OMGVMCID |
为OMG保留的供应商次要代码ID。
|
Policy |
从Policy接口派生的
接口允许ORB或CORBA服务访问影响其操作的某些选择。
|
PolicyOperations |
提供
Policy 对象的操作。
|
PRIVATE_MEMBER |
在
ValueMember 类中定义一个私有成员的
ValueMember 。
|
PUBLIC_MEMBER |
在
ValueMember 课程中定义公共成员的
ValueMember 。
|
UNSUPPORTED_POLICY |
其中
PolicyErrorCode个 S的将被填补,如果被请求
Policy的了解由ORB认为是有效的,但目前还不支持。
|
UNSUPPORTED_POLICY_VALUE |
如果该值要求为
Policy这将是填补了
PolicyErrorCode是该类型的有效范围内的有效类型和,但目前还不支持此有效值。
|
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 |
提供用于标识Interface Repository对象类型的常量的类。
|
DefinitionKindHelper |
助手为
DefinitionKind 。
|
DoubleHolder |
持有人为
Double 。
|
DoubleSeqHelper |
助手
DoubleSeq 。
|
DoubleSeqHolder |
持有人为
DoubleSeq 。
|
DynamicImplementation | Deprecated
org.omg.CORBA.DynamicImplementation
|
Environment |
即在用于异常的容器(座)
Request 操作,使异常可用于客户端。
|
ExceptionList |
用于
Request 操作中的一个对象来描述方法可以抛出的异常。
|
FieldNameHelper |
助手
FieldName 。
|
FixedHolder |
持有人为
Fixed 。
|
FloatHolder |
持有人为
Float 。
|
FloatSeqHelper |
助手为
FloatSeq 。
|
FloatSeqHolder |
持有人为
FloatSeq 。
|
IdentifierHelper |
助手
Identifier 。
|
IDLTypeHelper |
助手
IDLType 。
|
IntHolder |
持有人为
Int 。
|
LocalObject |
用作在Java语言映射中实现本地IDL接口的基类。
|
LongHolder |
持有人为
Long 。
|
LongLongSeqHelper |
助手
LongLongSeq 。
|
LongLongSeqHolder |
持有人为
LongLongSeq 。
|
LongSeqHelper |
助手为
LongSeqHelper 。
|
LongSeqHolder |
持有人为
LongSeq 。
|
NamedValue |
DII和DSI中使用的对象来描述参数和返回值。
|
NameValuePair |
将名称与作为IDL结构体的属性的值相关联,并在
DynStruct API中使用。
|
NameValuePairHelper |
助手
NameValuePair 。
|
NVList |
包含NamedValue
NamedValue 对象的可修改列表。
|
ObjectHelper | |
ObjectHolder |
持有人为
Object 。
|
OctetSeqHelper |
助手
OctetSeq 。
|
OctetSeqHolder |
持有人为
OctetSeq 。
|
ORB |
一个为CORBA对象请求代理功能提供API的类。
|
ParameterMode |
枚举参数的参数模式。
|
ParameterModeHelper |
枚举参数的参数模式。
|
ParameterModeHolder |
枚举参数的参数模式。
|
PolicyErrorCodeHelper |
封装“策略”可能无效的原因。
|
PolicyErrorHelper |
抛出指示参数值传递给
ORB.create_policy 操作的问题。
|
PolicyErrorHolder |
抛出指示参数值传递给
ORB.create_policy 操作的问题。
|
PolicyHelper |
助手
Policy 。
|
PolicyHolder |
持有人为
Policy 。
|
PolicyListHelper |
助手
PolicyList 。
|
PolicyListHolder |
持有人为
PolicyList 。
|
PolicyTypeHelper |
助手
PolicyType 。
|
Principal | Deprecated
被CORBA弃用2.2。
|
PrincipalHolder | Deprecated
被CORBA弃用2.2。
|
RepositoryIdHelper |
助手
RepositoryId 。
|
Request |
包含调用方法所需信息的对象。
|
ServerRequest |
捕获动态骨架接口(DSI)请求的显式状态的对象。
|
ServiceDetail |
表示ORB服务的对象:其
service_detail_type 字段包含ORB服务的类型,其
service_detail 字段包含ORB服务的描述。
|
ServiceDetailHelper | |
ServiceInformation |
CORBA模块中的IDL结构,用于存储有关ORB实现中可用的CORBA服务的信息,并从
ORB.get_service_information方法获取。
|
ServiceInformationHelper | |
ServiceInformationHolder |
持有人为
ServiceInformation 。
|
SetOverrideType |
CORBA
枚举 标记
SET_OVERRIDE 和
ADD_OVERRIDE ,指出策略是否应替代现有的
Object 或添加到它们。
|
SetOverrideTypeHelper |
助手
SetOverrideType 。
|
ShortHolder |
持有人为
Short 。
|
ShortSeqHelper |
助手为
ShortSeqHelper 。
|
ShortSeqHolder |
持有人为
ShortSeq 。
|
StringHolder |
持有人为
String 。
|
StringSeqHelper |
一串字符串
|
StringSeqHolder |
一串字符串
|
StringValueHelper |
助手
StringValue 。
|
StructMember |
描述了一种IDL的成员
struct 在接口库,包括名称
struct 构件,所述的类型
struct 构件,和表示的IDL类型的typedef
struct 构件描述的
struct 成员对象。
|
StructMemberHelper |
助手为
StructMember 。
|
TCKind |
IDL枚举
TCKind 的Java映射,它指定了一个
TypeCode 对象的种类。
|
TypeCode |
有关特定CORBA数据类型的信息的容器。
|
TypeCodeHolder |
持有人为
TypeCode 。
|
ULongLongSeqHelper |
助手
ULongLongSeq 。
|
ULongLongSeqHolder |
持有人为
ULongLongSeq 。
|
ULongSeqHelper |
助手
ULongSeq 。
|
ULongSeqHolder |
持有人为
ULongSeq 。
|
UnionMember |
IDL联盟成员的Interface Repository中的描述。
|
UnionMemberHelper |
助手
UnionMember 。
|
UnknownUserExceptionHelper |
助手
UnknownUserException 。
|
UnknownUserExceptionHolder |
持有人为
UnknownUserException 。
|
UShortSeqHelper |
助手为
UShortSeq 。
|
UShortSeqHolder |
持有人为
UShortSeq 。
|
ValueBaseHelper | |
ValueBaseHolder |
持有人为
ValueBase 。
|
ValueMember |
value 对象的成员的
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编译器(便携式)生成,从orb.idl版本“3.0”1999年5月31日22:27:30 GMT + 00:00类定义被修改,以符合以下OMG规范:ORB芯由CORBA 2.3.1所定义(
formal/99-10-07 )IDL / Java语言映射中定义
ptc/00-01-08
|
异常 | 描述 |
---|---|
ACTIVITY_COMPLETED |
可以在任何访问Activity上下文的方法上引发
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且对绑定对象引用的调用结果导致状态为OBJECT_FORWARD的LocateReply消息或状态为LOCATION_FORWARD的Reply消息时引发。
|
SystemException |
所有CORBA标准异常的根类。
|
TIMEOUT |
TIMEOUT 在没有交付和已经超过指定的生存时间段时被提出。
|
TRANSACTION_MODE |
如果检测到IOR中的InvocationPolicy与所选择的调用路径(即,直接或路由调用)之间的不匹配,则客户端ORB会抛出CORBA
TRANSACTION_MODE 异常。
|
TRANSACTION_REQUIRED |
异常表示请求携带一个空事务上下文,但需要一个活动事务。
|
TRANSACTION_ROLLEDBACK |
与请求相关联的事务已经回滚或标记回滚时抛出异常。
|
TRANSACTION_UNAVAILABLE |
由于ORB与
TRANSACTION_UNAVAILABLE 服务的连接异常终止,所以CORBA
TRANSACTION_UNAVAILABLE 异常由于无法处理事务服务上下文而被ORB抛出。
|
TRANSIENT |
当ORB尝试到达对象并失败时抛出异常。
|
UNKNOWN |
如果操作实现抛出非CORBA异常(例如特定于实现的编程语言的异常),或者操作引发不在操作的引用表达式中出现的用户异常,则会引发此异常。
|
UnknownUserException |
包含服务器返回的用户异常的类。
|
UserException |
CORBA IDL定义用户异常的根类。
|
WrongTransaction |
CORBA
WrongTransaction 用户定义的异常。
|
有关官方CORBA规范的受支持部分的精确列表,Java TM平台,标准版6符合,请参阅Official Specifications for CORBA support in Java[TM] SE 6 。
本节中描述的类和接口可以分为四个组: ORB classes ,异常, Helper类和Holder类。
ORB在客户端和方法在服务器上的实现之间处理(或经纪人)方法调用。 因为客户端和服务器可能在网络上的任何地方,并且由于调用和实现可能用不同的编程语言编写,所以ORB在后台进行大量的工作来完成此通信。
ORB的大部分功能对于用户来说都是完全透明的,并且CORBA包的主要部分由ORB幕后使用的类组成。 结果是大多数程序员只能直接使用这个包的一小部分。 实际上,大多数程序员只会使用ORB类中的几种方法,一些例外情况,偶尔还会有一个持有者类。
在应用程序进入CORBA环境之前,必须首先:
提供以下操作来初始化应用程序并获取适当的对象引用:
当应用程序需要CORBA环境时,它需要一种获取ORB对象引用和可能的OA对象引用(例如根POA)的机制。 这有两个目的。 首先,它将应用程序初始化到ORB和OA环境中。 其次,它将ORB对象引用和OA对象引用返回到应用程序,以供将来的ORB和OA操作使用。
为了获得ORB对象引用,应用程序调用ORB.init操作。 呼叫的参数可以包括需要对象引用的ORB的标识符,以及用于允许环境特定数据被传递到呼叫中的arg_list。
这些是提供对ORB访问的ORB方法:
使用没有参数的init()方法启动一个单例ORB,它只能通过idlj在Helper类中生成的代码中给出类型代码创建any所需的类型代码。
应用程序需要一种便携式手段来获取其初始对象引用。 根POA,POA Current,Interface Repository和各种对象服务实例需要引用。 应用程序所需的功能类似于命名服务提供的功能。 但是,OMG不希望将命名服务提供给所有应用程序,以便可以对其进行可移植的初始化。 因此,本节中显示的操作提供了简化的本地版本的命名服务,应用程序可以使用它来获取对其操作至关重要的小型定义的对象引用集。 因为只有一个很好的定义对象集合才能使用这种机制,所以命名上下文可以被平坦化成单级名称空间。 这种简化导致仅定义了两个操作来实现所需的功能。
初始引用通过ORB对象接口中提供的两个操作获得,提供列出和解析初始对象引用的功能。 这些是:
使用其中一些方法的示例是Getting Started with Java IDL 。
关于Java IDL exceptions的文档有更多的信息,并解释了系统异常和用户定义的异常之间的区别。
以下是包装org.omg.CORBA中定义的系统异常(未经检查通过 org.omg.CORBA.SystemException从java.lang.RuntimeException继承的异常 )的列表 :
BAD_CONTEXT BAD_INV_ORDER BAD_OPERATION BAD_PARAM BAD_TYPECODE COMM_FAILURE DATA_CONVERSION FREE_MEM IMP_LIMIT INITIALIZE INTERNAL INTF_REPOS INVALID_TRANSACTION INV_FLAG INV_IDENT INV_OBJREF INV_POLICY MARSHAL NO_IMPLEMENT NO_MEMORY NO_PERMISSION NO_RESOURCES NO_RESPONSE OBJECT_NOT_EXIST OBJ_ADAPTER PERSIST_STORE TRANSACTION_REQUIRED TRANSACTION_ROLLEDBACK TRANSIENT UNKNOWN
以下是包org.omg.CORBA中定义的用户定义异常的列表。
Bounds UnknownUserException WrongTransaction PolicyError
例如,包 org.omg.CORBA.TypeCodePackage包含两个例外通过方法在类TypeCode抛出。 这些例外是:
另一个包是CORBA的子包是portable包。 它提供了一组ORB API,使得一个供应商的IDL编译器生成的代码可以在另一个供应商的ORB上运行。
支持out和inout参数传递模式需要使用额外的holder classes 。 由于Java编程语言不支持out或inout参数,因此需要持有者类作为传递可修改参数的方法。 为了支持便携式存根和骨架,持有者类也实现了org.omg.CORBA.portable.Streamable接口。
持有人类通过将“持有人”附加到类型的名称来命名。 该类型的名称指的是其Java编程语言中的名称。 例如,对于Java编程语言命名为Account的接口holder类将被命名为AccountHolder。
org.omg.CORBA包中的所有基本IDL数据类型都支持持有者类。 因此,举例来说,目前已经定义的类LongHolder,ShortHolder,FloatHolder,等等。 除了typedefs定义的所有用户定义的IDL类型之外, 还会生成类 。 (请注意,在本文中,用户定义包括在OMG规范中定义的类型,例如Interface Repository和其他OMG服务的类型。)
每个持有人类有:
默认构造函数将值字段设置为由Java语言定义的类型的默认值:
例如,如果将OMG IDL中定义的接口Account
映射到Java编程语言,则将生成以下持有者类:
public final class AccountHolder implements
org.omg.CORBA.portable.Streamable
{
// field that holds an Account object
public Account value = null;
// default constructor
public AccountHolder ()
{
}
// creates a new AccountHolder from initialValue
public AccountHolder (Account initialValue)
{
value = initialValue;
}
// reads the contents of i and assigns the contents to value
public void _read (org.omg.CORBA.portable.InputStream i)
{
value = AccountHelper.read (i);
}
// writes value to o
public void _write (org.omg.CORBA.portable.OutputStream o)
{
AccountHelper.write (o, value);
}
// returns the typecode for Account
public org.omg.CORBA.TypeCode _type ()
{
return AccountHelper.type ();
}
}
关于Holder类的更多信息,请参见第1.4章, 映射在基本类型 OMG IDL to Java Language Mapping 。 包装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
助手文件提供了几种处理类型所需的静态方法。 这些包括:
ValueHelper
接口(如果是用户定义的值类型) 映射IDL接口或抽象接口的帮助类也包括窄操作。 静态窄方法允许将org.omg.CORBA.Object缩小为更具体类型的对象引用。 如果由于对象引用不支持所请求的类型,则narrow会导致IDL异常CORBA.BAD_PARAM抛出。 引起不同的系统异常以指示其他种类的错误。 尝试缩小null将始终成功,返回值为null 。 通常,应用程序员使用的唯一辅助方法是narrow
方法。 其他方法通常在幕后使用,对程序员是透明的。
助手班分为两大类: helpers for value types和helpers for non value types 。 因为一个类别中的所有帮助类都提供相同的方法,所以在这里给出了每类帮助类的一个通用说明。
当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
方法。 不是抽象的接口的帮助类将具有narrow
方法,该方法采用CORBA对象,而抽象接口的narrow
方法将采用Java编程语言中的对象。 具有至少一个抽象基础接口的非抽象接口的帮助类将提供narrow
方法的两个版本。
Hello World教程使用narrow方法,如下所示:
// create and initialize the ORB
ORB orb = ORB.init(args, null);
// get the root naming context
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
// Use NamingContextExt instead of NamingContext. This is
// part of latest Inter-Operable naming Service.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// resolve the Object Reference in Naming
String name = "Hello";
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
narrow
方法,如果在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
这就是为什么org.omg.CORBA包中的几个接口由一个字段value组成 ,这是一个short 。 此字段是用于诸如错误代码或值修饰符之类的常量。 例如,接口BAD_POLICY的value字段是被抛出的为异常PolicyError的可能原因之一。 要指定此错误代码,您将使用BAD_POLICY.value 。
例外PolicyError使用以下接口的value字段作为其可能的错误代码。
ValueMember
对象的访问方法返回,以表示ValueMember
对象的ValueMember
。
ORB不要求有一个接口存储库,Java IDL不包含一个。 即使此版本不包括接口存储库的实现,为了创建类型代码,已经包括以下IR类和接口(请参阅org.omg.CORBA.ORB接口中的create_value_tc,create_struct_tc,create_union_tc和create_exception_tc方法):
&nbs
org.omg子包中包含的一些API是为了符合当前的OMG CORBA规范而提供的,但在Sun发布的JDK TM中未实现 。 这使得其他JDK许可证持有者可以在标准扩展和产品中提供此API的实现。
由于种种原因, org.omg子包中的一些API引发了NO_IMPLEMENT个异常。 其中包括: