©
本文档使用
php.cn手册 发布
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一个软件包 下一个软件包 | 框架 无框架 |
请参见:
描述
接口摘要 | |
---|---|
ARG_IN | 向调用符号化 "input" 参数,表示从客户端将该参数传递到服务器。 |
ARG_INOUT | 表示用于某一调用的输入和输出的参数,意味着将该参数从客户端传到服务器,然后再从服务器传回客户端。 |
ARG_OUT | 表示调用的 "input" 参数的常量,意味着从服务器将该参数传递到客户端。 |
BAD_POLICY | 将填充在 PolicyError 异常中的 PolicyErrorCode。 |
BAD_POLICY_TYPE | 将填充在 PolicyError 异常中的 PolicyErrorCode。 |
BAD_POLICY_VALUE | 包含指示某个策略值的值,该策略值对于 create_policy 方法(在 ORB 类中定义)调用中的有效策略类型而言是不正确的。 |
CTX_RESTRICT_SCOPE | 可以用作 Context.get_values 方法的第二个参数以限制搜索范围的标志。 |
Current | 从 Current 接口派生的接口允许 ORB 和 CORBA 服务访问与它们正运行的执行线程关联的信息(上下文)。 |
CurrentOperations | Current 的接口。 |
CustomMarshal | 将由 ORB 而不是由用户使用的抽象 value 类型。 |
DataInputStream | 定义用来从输入流读取基本数据类型的方法,以便解组自定义值类型。 |
DataOutputStream | 定义用来将基本数据类型写入输出流的方法,以便编组自定义值类型。 |
DomainManager | 提供用来建立关系并将其导航到高级域和从属域的机制,以及用来创建和访问策略的机制。 |
DomainManagerOperations | 向 DomainManager 提供访问策略的方法。 |
DynAny | 已过时。 使用新的 DynAny 替代 |
DynArray | 已过时。 使用新的 DynArray 替代 |
DynEnum | 已过时。 使用新的 DynEnum 替代 |
DynFixed | 已过时。 使用新的 DynFixed 替代 |
DynSequence | 已过时。 使用新的 DynSequence 替代 |
DynStruct | 已过时。 使用新的 DynStruct 替代 |
DynUnion | 已过时。 使用新的 DynUnion 替代 |
DynValue | 已过时。 使用新的 DynValue 替代 |
IDLType | 由所有表示 OMG IDL 类型的接口存储库(Interface Repository,IR)对象继承的抽象接口。 |
IDLTypeOperations | 此接口必须由所有 IDLType 对象实现。 |
IRObject | IRObject IDL 接口表示最一般的接口,其他所有 Interface Repository 接口(甚至包括 Repository 自身)都派生自该接口。 |
IRObjectOperations | 这是用于 IRObject 的映射的 Operations 接口。 |
Object | CORBA 对象引用的定义。 |
OMGVMCID | 为 OMG 保留的供应商次要代码 (minor code) ID。 |
Policy | 派生自 Policy 接口的接口允许 ORB 或 CORBA 服务访问影响其操作的某些选项。 |
PolicyOperations | 提供针对某一 Policy 对象的操作。 |
PRIVATE_MEMBER | 定义 ValueMember 类中私有成员的常量。 |
PUBLIC_MEMBER | 定义 ValueMember 类中公共成员的常量。 |
UNSUPPORTED_POLICY | 在所请求的 Policy 被 ORB 认为是有效的,但目前不受支持时将被填充的一个 PolicyErrorCode。 |
UNSUPPORTED_POLICY_VALUE | 当所请求的 Policy 值是有效类型并且在该类型的有效范围内,但该有效值目前不受支持时将被填充的 PolicyErrorCode。 |
VM_ABSTRACT | 定义用来表示 typecode 中的 Abstract 接口的代码。 |
VM_CUSTOM | 定义用来表示类型代码中自定义编组值类型的代码。 |
VM_NONE | 定义代码,用来表示一个 typecode 中值类型的值。 |
VM_TRUNCATABLE | 定义用来表示 typecode 中可截断值类型的代码。 |
类摘要 | |
---|---|
_IDLTypeStub | IDLType 的 Stub。 |
_PolicyStub | Policy 的 Stub。 |
Any | 充当可用 IDL 描述的任何数据或任何 IDL 基本类型的容器。 |
AnyHolder | Any 的 Holder。 |
AnySeqHelper | AnySeq 的 Helper。 |
AnySeqHolder | AnySeq 的 Holder。 |
BooleanHolder | Boolean 的 Holder。 |
BooleanSeqHelper | BooleanSeq 的 Helper。 |
BooleanSeqHolder | BooleanSeq 的 Holder。 |
ByteHolder | Byte 的 Holder。 |
CharHolder | Char 的 Holder。 |
CharSeqHelper | CharSeq 的 Helper。 |
CharSeqHolder | CharSeq 的 Holder。 |
CompletionStatus | 指示某一方法抛出 SystemException 时是否已结束运行的对象。 |
CompletionStatusHelper | CompletionStatus 的 Helper。 |
Context | 用于在 Request 操作中指定上下文对象的对象,上下文字符串在与请求调用一起被发送之前,必须在该指定的上下文对象中进行解析。 |
ContextList | 一个对象,它包含表示属性名称的 String 对象所组成的可修改列表。 |
CurrentHelper | Current 的 Helper。 |
CurrentHolder | Current 的 Holder。 |
DefinitionKind | 该类提供用来标识接口存储库 (Interface Repository) 对象类型的常量。 |
DefinitionKindHelper | DefinitionKind 的 Helper。 |
DoubleHolder | Double 的 Holder。 |
DoubleSeqHelper | DoubleSeq 的 Helper。 |
DoubleSeqHolder | DoubleSeq 的 Holder。 |
DynamicImplementation | 已过时。 org.omg.CORBA.DynamicImplementation |
Environment | 用于 Request 操作的异常的容器 (holder),使异常可用于客户端。 |
ExceptionList |
Request 操作中使用的对象,用于描述可由某一方法抛出的异常。 |
FieldNameHelper | FieldName 的 Helper。 |
FixedHolder | Fixed 的 Holder。 |
FloatHolder | Float 的 Holder。 |
FloatSeqHelper | FloatSeq 的 Helper。 |
FloatSeqHolder | FloatSeq 的 Holder。 |
IdentifierHelper | Identifier 的 Helper。 |
IDLTypeHelper | IDLType 的 Helper。 |
IntHolder | Int 的 Holder。 |
LocalObject | 用作 Java 语言映射中的本地 IDL 接口实现的基本类。 |
LongHolder | Long 值的 Holder。 |
LongLongSeqHelper | LongLongSeq 的 Helper。 |
LongLongSeqHolder | LongLongSeq 的 Holder。 |
LongSeqHelper | LongSeqHelper 的 Helper。 |
LongSeqHolder | LongSeq 的 Holder。 |
NamedValue | 在 DII 和 DSI 中用来描述参数和返回值的对象。 |
NameValuePair | 将某一名称与一个属性为 IDL struct 的值关联,并在 DynStruct API 中使用。 |
NameValuePairHelper | NameValuePair 的 Helper。 |
NVList | 包含 NamedValue 对象所组成的可修改列表。 |
ObjectHelper | |
ObjectHolder | Object 的 Holder。 |
OctetSeqHelper | OctetSeq 的 Helper。 |
OctetSeqHolder | OctetSeq 的 Holder。 |
ORB | 为 CORBA 对象请求代理 (Object Request Broker) 特性提供 API 的类。 |
ParameterMode | Parameter 参数模式的枚举。 |
ParameterModeHelper | Parameter 参数模式的枚举。 |
ParameterModeHolder | Parameter 参数模式的枚举。 |
PolicyErrorCodeHelper | 封装 Policy 无效的原因。 |
PolicyErrorHelper | 抛出 PolicyError 指示传递给 ORB.create_policy 操作的参数值存在问题。 |
PolicyErrorHolder | 抛出 PolicyError 指示传递给 ORB.create_policy 操作的参数值存在问题。 |
PolicyHelper | Policy 的 Helper。 |
PolicyHolder | Policy 的 Holder。 |
PolicyListHelper | PolicyList 的 Helper。 |
PolicyListHolder | PolicyList 的 Holder。 |
PolicyTypeHelper | PolicyType 的 Helper。 |
Principal | 已过时。 已由 CORBA 2.2 取代。 |
PrincipalHolder | 已过时。 Deprecated by CORBA 2.2. |
RepositoryIdHelper | RepositoryId 的 Helper。 |
Request | 包含调用某一方法所必需的信息的对象。 |
ServerRequest | 捕获对动态框架接口(Dynamic Skeleton Interface,DSI)请求的显式状态的对象。 |
ServiceDetail | 表示 ORB 服务的对象:其 service_detail_type 字段包含 ORB 服务的类型,其 service_detail 字段包含 ORB 服务的描述。 |
ServiceDetailHelper | |
ServiceInformation | CORBA 模块中的 IDL struct,用于存储关于 ORB 实现中可用 CORBA 服务的信息,可使用 ORB.get_service_information 方法获取。 |
ServiceInformationHelper | |
ServiceInformationHolder | ServiceInformation 的 Holder。 |
SetOverrideType | 标记 SET_OVERRIDE 和 ADD_OVERRIDE 的 CORBA enum 的映射,它指示这些策略是应该替换 Object 的现有策略还是应该被添加到现有策略中。 |
SetOverrideTypeHelper | SetOverrideType 的 Helper。 |
ShortHolder | Short 的 Holder。 |
ShortSeqHelper | ShortSeqHelper 的 Helper。 |
ShortSeqHolder | ShortSeq 的 Holder。 |
StringHolder | String 的 Holder。 |
StringSeqHelper | String 数组 |
StringSeqHolder | String 数组 |
StringValueHelper | StringValue 的 Helper。 |
StructMember | 描述接口存储库 (Interface Repository) 中一个 IDL struct 成员,包括该 struct 成员的名称、该 struct 成员的类型以及表示该 struct 成员(被描述为 struct 成员对象)IDL 类型的 typedef。 |
StructMemberHelper | StructMember 的 Helper。 |
TCKind | IDL enum TCKind 的 Java 映射,TCKind 指定 TypeCode 对象的种类。 |
TypeCode | 用于有关特定 CORBA 数据类型的信息的容器。 |
TypeCodeHolder | TypeCode 的 Holder。 |
ULongLongSeqHelper | ULongLongSeq 的 Helper。 |
ULongLongSeqHolder | ULongLongSeq 的 Holder。 |
ULongSeqHelper | ULongSeq 的 Helper。 |
ULongSeqHolder | ULongSeq 的 Holder。 |
UnionMember | 接口存储库 (Interface Repository) 中关于 IDL union 成员的描述。 |
UnionMemberHelper | UnionMember 的 Helper。 |
UnknownUserExceptionHelper | UnknownUserException 的 Helper。 |
UnknownUserExceptionHolder | UnknownUserException 的 Holder。 |
UShortSeqHelper | UShortSeq 的 Helper。 |
UShortSeqHolder | UShortSeq 的 Holder。 |
ValueBaseHelper | |
ValueBaseHolder | ValueBase 的 Holder。 |
ValueMember | 接口存储库 (Interface Repository) 中关于 value 对象成员的描述。 |
ValueMemberHelper | ValueMember 的 Helper。 |
VersionSpecHelper | VersionSpec 的 Helper。 |
VisibilityHelper | Visibility 的 Helper。 |
WCharSeqHelper | WCharSeq 的 Helper。 |
WCharSeqHolder | WCharSeq 的 Holder。 |
WrongTransactionHelper | WrongTransaction 的 Helper。 |
WrongTransactionHolder | WrongTransaction 的 Holder。 |
WStringSeqHelper | WString 数组 |
WStringSeqHolder | WString 数组 |
WStringValueHelper | org/omg/CORBA/WStringValueHelper.java 由 "3.0" 版的 IDL-to-Java 编译器(可移植)从 orb.idl 中生成,生成时间为 1999 年 5 月 31 日 22:27:30 (GMT+00:00) 类定义已经修改,以遵守以下 OMG 规范: 由 CORBA 2.3.1 定义的 ORB 核心 (formal/99-10-07) ptc/00-01-08 中定义的 IDL/Java 语言映射 |
异常摘要 | |
---|---|
ACTIVITY_COMPLETED |
ACTIVITY_COMPLETED 系统异常可以在任何访问 Activity 上下文的方法上引发。 |
ACTIVITY_REQUIRED |
ACTIVITY_REQUIRED 系统异常可以在任何需要 Activity 上下文的方法上引发。 |
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 | 此异常指示在 OBR 运行时超过了某一项实现限制。 |
INITIALIZE | ORB 在其初始化期间出错(例如无法获得网络资源或检测配置错误)时,抛出此异常。 |
INTERNAL | 此异常指示 ORB 中存在内部错误,例如,在 ORB 检测到其内部数据结构被损坏时将抛出此异常。 |
INTF_REPOS | 当 ORB 无法到达接口存储库,或者检测到其他与接口存储库相关的错误时,引发此异常。 |
INV_FLAG | 在将无效标志传递给某项操作时(例如,在创建 DII 请求时),抛出此异常。 |
INV_IDENT | 此异常指示 IDL 标识符在语法上是无效的。 |
INV_OBJREF | 此异常指示对象引用存在内部错误。 |
INV_POLICY | 当应用于特定调用的 Policy 重写之间不兼容而导致无法进行调用时,抛出此标准异常。 |
INVALID_ACTIVITY | 如果在不同于其处于挂起状态时所在的上下文中恢复事务或 Activity,则在该 Activity 或 Transaction 服务的恢复方法上引发 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 | 如果当前有效 RebindPolicy 具有 NO_REBIND 或 NO_RECONNECT 值,且对绑定的对象引用执行调用时生成状态为 OBJECT_FORWARD 的 LocateReply 消息或状态为 LOCATION_FORWARD 的 Reply 消息,则将引发 REBIND 。 |
SystemException | 所有 CORBA 标准异常的根类。 |
TIMEOUT | 当已超过指定生存时间却没有做出任何交付时,引发 TIMEOUT 异常。 |
TRANSACTION_MODE | 如果客户端 ORB 检测到 IOR 中的 InvocationPolicy 与选中的调用路径(即直接或路由调用)不匹配,则它将抛出 CORBA TRANSACTION_MODE 异常。 |
TRANSACTION_REQUIRED | 此异常指示请求带有一个 null 事务上下文,但需要的是激活的事务。 |
TRANSACTION_ROLLEDBACK | 当与请求处理关联的事务已回滚或已标记为回滚时,抛出此异常。 |
TRANSACTION_UNAVAILABLE | 当由于到事务服务 (Transaction Service) 的连接已异常终止而无法处理事务服务上下文时,由 ORB 抛出 CORBA TRANSACTION_UNAVAILABLE 异常。 |
TRANSIENT | 当 ORB 试图到达某一对象但失败时,抛出此异常。 |
UNKNOWN | 如果操作实现抛出一个非 CORBA 异常(比如特定于该实现编程语言的异常),或者某一操作引发没有出现在该操作引发表达式中的用户异常,则将引发此异常。 |
UnknownUserException | 包含由服务器返回的用户异常的类。 |
UserException | CORBA IDL 定义的用户异常的根类。 |
WrongTransaction | CORBA WrongTransaction 用户定义异常。 |
提供 OMG CORBA API 到 JavaTM 编程语言的映射,包括 ORB 类,如果已实现该类,则程序员可以使用此类作为全功能对象请求代理(Object Request Broker,ORB)。
有关 Java[TM] Platform,Standard Edition 6 遵守的受支持官方 CORBA 规范部分的明确列表,请参阅 Official Specifications for CORBA support in Java[TM] SE 6。
这一节中描述的类和接口可分为四组:ORB 类、异常、Helper 类和 Holder 类。
ORB 处理(或代理)客户端与服务器上的方法实现之间的方法调用。因为客户端和服务器可能位于网络的任何地方,调用和实现可能以不同的编程语言编写,所以 ORB 在后台做了很多工作来实现此通信。
ORB 所做的大部分工作对于用户而言是完全透明的,CORBA 包的主要部分由 ORB 在后台使用的类组成。因此大部分程序员将只直接使用此包的一小部分。实际上,大多数程序员仅使用 ORB 类和一些异常中的少数方法,偶尔也使用 holder 类中的少数方法。
在应用程序进入 CORBA 环境之前,它必须先执行以下操作:
提供以下操作来初始化应用程序及获得适当的对象引用:
当应用程序需要 CORBA 环境时,它需要一个机制来获取 ORB 对象引用,也可能是 OA 对象引用(比如根 POA)。此机制有两个用途。第一个用途是将应用程序初始化为 ORB 和 OA 环境。第二个用途是将 ORB 对象引用和 OA 对象引用返回给应用程序,以便在以后的 ORB 和 OA 操作中使用。
若要获取 ORB 对象引用,应用程序应调用 ORB.init 操作。该调用的参数可能由 ORB 的标识符和 arg_list 组成,前者是对象引用所需要的,后者用于允许将特定于环境的数据传递给调用。
以下 ORB 方法可以访问 ORB:
使用不带参数的 init() 方法可以实例化一个单件 ORB,它只能为创建 typecode 提供 any,在通过 idlj 在 Helper 类中生成的代码中需要这些 any。
应用程序需要一个用来获得其初始对象引用的可移植方法。根 POA、POA Current、Interface Repository 和各种 Object Service 实例都需要引用。应用程序所需的功能类似于 Naming Service 提供的那些功能。但是,OMG 不应该要求 Naming Service 可用于所有应用程序以便能够以可移植方式初始化。因此,这一节中展示的操作提供了一个简化的本地 Naming Service,应用程序可以使用它来获取其操作所必须的一小组已定义对象引用。因为只期望从此机制中获得一小组定义良好的对象,所以命名上下文可能被简化为单一级别的名称空间。这种简化的结果是只定义两个操作来获得所需的功能。
初始引用是通过 ORB 对象接口中提供的两个操作获得的,该接口中提供了一些设施来列出并解析初始对象引用。这些工具包括:
使用其中一些方法的示例见 Java IDL 入门。
关于 Java IDL 异常 的文档中有更多信息,这些文档解释了系统异常和用户定义异常之间的不同。
以下是包 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,这些 API 使得某个供应商的 IDL 编译器所生成的代码能够在另一个供应商的 ORB 上运行。
支持 out 和 inout 参数传递模式需要使用附加 holder 类。因为 Java 编程语言不支持 out 或 inout 参数,holder 类便作为一种可修改的传递参数方式出现。为了支持可移植 stub 和 skeleton,holder 类还实现了 org.omg.CORBA.portable.Streamable 接口。
Holder 类是通过将 "Holder" 追加到类型名称中来命名的。类型名称是指它在 Java 编程语言中的名称。例如,在 Java 编程语言中名为 Account 的接口所对应的 holder 类应该命名为 AccountHolder。
Holder 类可用于 org.omg.CORBA 包中的所有基本 IDL 数据类型。因此,对于 LongHolder、ShortHolder、FloatHolder 等,都已经定义了相应的类。对于所有已命名用户定义的 IDL 类型(typedef 定义的除外),同样会生成一些类。(注意,在这种情况下,用户定义类型包括那些在 OMG 规范中定义的类型(如用于 Interface Repository 的那些类型)和其他 OMG 服务。)
每个 holder 类都包含:
对于 Java 语言定义的类型,默认构造方法将 value 字段设置为以下默认值:
举例来说,如果用 OMG IDL 定义的 Account
接口被映射到 Java 编程语言,则将生成以下 holder 类:
public final class AccountHolder implements org.omg.CORBA.portable.Streamable { // field that holds an Account object public Account value = null; // default constructor public AccountHolder () { } // creates a new AccountHolder from initialValue public AccountHolder (Account initialValue) { value = initialValue; } // reads the contents of i and assigns the contents to value public void _read (org.omg.CORBA.portable.InputStream i) { value = AccountHelper.read (i); } // writes value to o public void _write (org.omg.CORBA.portable.OutputStream o) { AccountHelper.write (o, value); } // returns the typecode for Account public org.omg.CORBA.TypeCode _type () { return AccountHelper.type (); } }
关于 Holder 类的更多信息,请参阅 OMG IDL to Java Language Mapping 中的第 1.4 章 Mapping for Basic Types。org.omg.CORBA 包中定义的 Holder 类有:
AnyHolder AnySeqHolder BooleanHolder BooleanSeqHolder ByteHolder CharHolder CharSeqHolder CurrentHolder DoubleHolder DoubleSeqHolder FixedHolder FloatHolder FloatSeqHolder IntHolder LongHolder LongLongSeqHolder LongSeqHolder ObjectHolder OctetSeqHolder ParameterModeHolder PolicyErrorHolder PolicyListHolder PrincipalHolder ServiceInformationHolder ShortHolder ShortSeqHolder StringHolder StringSeqHolder TypeCodeHolder ULongLongSeqHolder ULongSeqHolder UnknownUserExceptionHolder UShortSeqHolder ValueBaseHolder WCharSeqHolder WrongTransactionHolder WStringSeqHolder
Helper 文件提供了一些操作类型所需的静态方法。这些操作包括:
ValueHelper
接口(如果它是用户定义的 value 类型)
用于映射的 IDL 接口或抽象接口的 helper 类还包括收缩操作。静态收缩方法允许将 org.omg.CORBA.Object 收缩成更具体的某种类型的对象引用。如果因为该对象引用不支持所请求的类型而导致收缩失败,则将抛出 IDL 异常 CORBA.BAD_PARAM。引发不同的系统异常则指示存在其他种类的错误。尝试收缩 null 将总是可以成功,并返回 null 值。通常,应用程序编程人员唯一使用的 helper 方法是 narrow
方法。其他方法通常在后台使用,它们对于程序员是透明的。
Helper 类分为两大类,即用于 value 类型的 helper 和用于非 value 类型的 helper。因为一种类别中的所有 helper 类提供的都是相同的方法,所以这里只提供每种 helper 类的一般性解释。
在将 OMG IDL 映射到 Java 编程语言时,为每个用户定义的类型生成一个 "helper" 类。生成的这个类将具有用户定义类型的名称以及追加的 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
对象。根据该接口是否是抽象的来确定其 helper 类将提供哪一种 narrow
方法。用于非抽象接口的 helper 类将有一个带 CORBA 对象的 narrow
方法,而用于抽象接口的 narrow
方法将带有 Java 编程语言中的一个对象。对于至少有一个抽象基本接口的非抽象接口,helper 类将同时提供两种形式的 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
方法。非 value 类型的类型将有一个为它们生成的基本 helper 类。
例如,假设接口 Account
不是一个 value 类型的 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
是 value 类型,则 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 包中定义的 Helper 类有:
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
对象的可见性。
ORB 不需要接口存储库,Java IDL 也不包含接口存储库。尽管此版本不包括接口存储库的实现,但它包含以下 IR 类和接口,以创建 typecodes(参见 org.omg.CORBA.ORB 接口中的 create_value_tc、create_struct_tc、create_union_tc 和 create_exception_tc 方法):
&nbs
org.omg 子包中包含的一些 API 是为了与当前 OMG CORBA 规范保持一致而提供的,但 Sun 的 JDKTM 版本中没有实现它们。这使得其他 JDK 被许可人可以在标准扩展和产品中提供此 API 的实现。
org.omg 子包中包含的一些 API 会因为各种原因抛出 NO_IMPLEMENT 异常。其中一些原因是:
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一个软件包 下一个软件包 | 框架 无框架 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。