java.lang.Object org.omg.CORBA.ORB
public abstract class ORB
为 CORBA 对象请求代理 (Object Request Broker) 特性提供 API 的类。ORB
类还提供“可插入 ORB 实现”API,该 API 允许使用另一个供应商的 ORB 实现。
通过连接发送请求的对象(客户端)与响应请求的对象(服务器),ORB 使 CORBA 对象彼此之间能够进行通讯。
ORB
类封装了一些一般的 CORBA 功能,它可执行以下操作:(注意第 5 项和第 6 项,它们包含 ORB
类中的大多数方法,通常与动态调用接口(Dynamic Invocation Interface
,DII)和动态框架接口(Dynamic Skeleton Interface
,DSI)一起使用。开发人员可以直接使用这些接口,但大多数情况下,这些接口常常由 ORB 内部使用,这对于普通程序员是不可见的。)
resolve_initial_references
获取对某些服务的初始对象引用(如 NameService) TypeCode
Any
NamedValue
Context
Environment
NVList
) 可以使用 ORB
类获取对网络上任意位置实现的对象的引用。
应用程序或 applet 通过使用三个 init
方法之一将其自身初始化为 ORB
,来访问 CORBA 环境。这三个方法中有两个使用下表中所示的属性(名称与值的关联)。
属性名 | 属性值 |
---|---|
org.omg.CORBA.ORBClass | ORB 实现的类名称 |
org.omg.CORBA.ORBSingletonClass | 由 init() 返回的 ORB 的类名称 |
这些属性允许“插入”不同供应商的 ORB
实现。
在创建 ORB 实例时,使用以下标准搜索顺序来定位 ORB 实现的类名称:
注意,Java IDL 提供全功能 ORB 和单件 (Singleton) ORB 的默认实现。当没有为 init
方法提供任何参数时,返回默认单件 ORB。当为 init
方法提供了参数但没有指定 ORB 类时,返回 Java IDL ORB 实现。
以下代码段创建了一个使用默认 ORB 单件初始化的 ORB
对象。此 ORB 有一个受限制的实现,以防止恶意 applet 执行任何创建 typecode 以外的操作。称它为单件 ORB 是因为整个虚拟机中只有一个实例。
ORB orb = ORB.init();
以下代码片段创建用于某个应用程序的 ORB
对象。参数 args
表示提供给应用程序的 main
方法的参数。因为该属性指定了 ORB 类为 "SomeORBImplementation",所以将使用该 ORB 实现初始化新的 ORB。如果 p 为 null,并且参数没有指定 ORB 类,则使用默认 Java IDL 实现初始化新的 ORB。
Properties p = new Properties(); p.put("org.omg.CORBA.ORBClass", "SomeORBImplementation"); ORB orb = ORB.init(args, p);
以下代码片段为作为第一个参数提供的 applet 创建 ORB
对象。如果给定 applet 没有指定 ORB 类,则将使用默认 Java IDL 实现初始化新的 ORB。
ORB orb = ORB.init(myApplet, null);
可以在一个或多个 ORB 中初始化应用程序或 applet。ORB 初始化是进入 CORBA 环境的引导调用。
构造方法摘要 | |
---|---|
ORB() |
方法摘要 | |
---|---|
void |
connect(Object obj) 将给定 servant 对象(作为服务器实现类的实例的 Java 对象)连接到 ORB。 |
TypeCode |
create_abstract_interface_tc(String id, String name) 为 IDL 抽象接口创建一个 TypeCode 对象。 |
abstract TypeCode |
create_alias_tc(String id, String name, TypeCode original_type) 创建一个表示 IDL alias 的 TypeCode 对象 (typedef )。 |
abstract Any |
create_any() 创建一个 IDL Any 对象,初始化后该对象包含一个 kind 字段被设置为 TCKind.tc_null 的 Typecode 对象。 |
abstract TypeCode |
create_array_tc(int length, TypeCode element_type) 创建一个表示 IDL array 的 TypeCode 对象。 |
DynAny |
create_basic_dyn_any(TypeCode type) 已过时。 使用新的 DynAnyFactory API 代替 |
abstract ContextList |
create_context_list() 创建一个空的 ContextList 对象。 |
DynAny |
create_dyn_any(Any value) 已过时。 使用新的 DynAnyFactory API 代替 |
DynArray |
create_dyn_array(TypeCode type) 已过时。 使用新的 DynAnyFactory API 代替 |
DynEnum |
create_dyn_enum(TypeCode type) 已过时。 使用新的 DynAnyFactory API 代替 |
DynSequence |
create_dyn_sequence(TypeCode type) 已过时。 使用新的 DynAnyFactory API 代替 |
DynStruct |
create_dyn_struct(TypeCode type) 已过时。 使用新的 DynAnyFactory API 代替 |
DynUnion |
create_dyn_union(TypeCode type) 已过时。 使用新的 DynAnyFactory API 代替 |
abstract TypeCode |
create_enum_tc(String id, String name, String[] members) 创建一个表示 IDL enum 的 TypeCode 对象。 |
abstract Environment |
create_environment() 创建一个 Environment 对象。 |
abstract ExceptionList |
create_exception_list() 创建一个空的 ExceptionList 对象。 |
abstract TypeCode |
create_exception_tc(String id, String name, StructMember[] members) 创建一个表示 IDL exception 的 TypeCode 对象。 |
TypeCode |
create_fixed_tc(short digits, short scale) 为 IDL fixed 类型创建一个 TypeCode 对象。 |
abstract TypeCode |
create_interface_tc(String id, String name) 创建一个表示 IDL interface 的 TypeCode 对象。 |
abstract NVList |
create_list(int count) 为指定数量的 NamedValue 对象分配具有(可能)足够空间的 NVList 。 |
abstract NamedValue |
create_named_value(String s, Any any, int flags) 使用给定名称、值和参数模式标志创建一个 NamedValue 对象。 |
TypeCode |
create_native_tc(String id, String name) 为 IDL native 类型创建一个 TypeCode 对象。 |
NVList |
create_operation_list(Object oper) 创建一个 NVList ,并使用给定 OperationDef 对象中所述操作的参数描述进行初始化。 |
abstract OutputStream |
create_output_stream() 创建一个新的 org.omg.CORBA.portable.OutputStream ,在执行方法调用期间,可在该输出流中对 IDL 方法参数进行编组。 |
Policy |
create_policy(int type, Any val) 可以调用此方法创建特定类型的新策略对象实例,并且其类型具有指定的初始状态。 |
abstract TypeCode |
create_recursive_sequence_tc(int bound, int offset) 已过时。 使用 create_recursive_tc 和 create_sequence_tc 的组合替代它 |
TypeCode |
create_recursive_tc(String id) 创建一个递归 TypeCode 对象,在创建包含递归的 TypeCodes 期间,该对象充当具体 TypeCode 的占位符。 |
abstract TypeCode |
create_sequence_tc(int bound, TypeCode element_type) 创建一个表示 IDL sequence 的 TypeCode 对象。 |
abstract TypeCode |
create_string_tc(int bound) 创建一个表示有界 IDL string 的 TypeCode 对象。 |
abstract TypeCode |
create_struct_tc(String id, String name, StructMember[] members) 创建一个表示 IDL struct 的 TypeCode 对象。 |
abstract TypeCode |
create_union_tc(String id, String name, TypeCode discriminator_type, UnionMember[] members) 创建一个表示 IDL union 的 TypeCode 对象。 |
TypeCode |
create_value_box_tc(String id, String name, TypeCode boxed_type) 为 IDL value box 类型创建一个 TypeCode 对象。 |
TypeCode |
create_value_tc(String id, String name, short type_modifier, TypeCode concrete_base, ValueMember[] members) 为 IDL value 类型创建一个 TypeCode 对象。 |
abstract TypeCode |
create_wstring_tc(int bound) 创建一个表示有界 IDL wstring (wide string) 的 TypeCode 对象。 |
void |
destroy() 销毁 ORB,以便可以回收其资源。 |
void |
disconnect(Object obj) 断开给定 servant 对象与 ORB 的连接。 |
Current |
get_current() 已过时。 使用 resolve_initial_references 。 |
abstract Context |
get_default_context() 获取默认 Context 对象。 |
abstract Request |
get_next_response() 获取已接收到响应的下一个 Request 实例。 |
abstract TypeCode |
get_primitive_tc(TCKind tcKind) 检索表示给定基本 IDL 类型的 TypeCode 对象。 |
boolean |
get_service_information(short service_type, ServiceInformationHolder service_info) 用来获取有关受此 ORB 支持的 CORBA 资源和服务的信息。 |
static ORB |
init() 返回对象 ORB 单件。 |
static ORB |
init(Applet app, Properties props) 为 applet 创建一个新的 ORB 实例。 |
static ORB |
init(String[] args, Properties props) 为独立的应用程序创建一个新的 ORB 实例。 |
abstract String[] |
list_initial_services() 返回最初可用 CORBA 对象引用(比如 "NameService" 和 "InterfaceRepository")的列表。 |
abstract String |
object_to_string(Object obj) 将给定 CORBA 对象引用转换为字符串。 |
void |
perform_work() 如果该操作由主线程调用,则执行与实现有关的单元操作。 |
abstract boolean |
poll_next_response() 找出是否已经响应了延迟的(异步)调用。 |
abstract Object |
resolve_initial_references(String object_name) 根据可用初始服务名称集解析特定对象引用。 |
void |
run() 在 ORB 已完成关闭过程前(该过程始于某些线程调用 shutdown 时),此操作将一直阻塞当前线程。 |
abstract void |
send_multiple_requests_deferred(Request[] req) 异步发送多个动态 (DII) 请求。 |
abstract void |
send_multiple_requests_oneway(Request[] req) 异步发送多个动态 (DII) 请求,并且不期望任何响应。 |
protected abstract void |
set_parameters(Applet app, Properties props) 允许使用给定 applet 和参数初始化 ORB 实现。 |
protected abstract void |
set_parameters(String[] args, Properties props) 允许使用给定的参数和属性初始化 ORB 实现。 |
void |
shutdown(boolean wait_for_completion) 指示关闭 ORB,这将导致关闭所有对象适配器,以准备销毁。 |
abstract Object |
string_to_object(String str) 将方法 object_to_string 生成的字符串转换回 CORBA 对象引用。 |
boolean |
work_pending() 如果 ORB 需要主线程来执行某些操作,则返回 true ;如果 ORB 不需要主线程,则返回 false 。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public ORB()
方法详细信息 |
---|
public static ORB init()
ORB
单件。此方法总是返回相同的 ORB 实例,该实例是由
org.omg.CORBA.ORBSingletonClass
系统属性所描述的类的实例。
无参数的 init
方法主要用作 TypeCode
对象的工厂,Helper
类使用该对象来实现 type
方法。还可以使用该方法来创建用于描述 union
标签的 Any
对象(作为创建用于 union
的 TypeCode
对象的一部分)。
此方法并不适合由 applet 使用,如果在 applet 环境中调用此方法,则该方法返回的 ORB 是受限制的,即它只能用作 TypeCode
对象的工厂。该方法生成的任何 TypeCode
对象都可以在不受信任的 applet 之间安全地共享。
如果某一 ORB 是使用此方法从 applet 创建的,则将抛出系统异常(如果调用的是用来创建 TypeCode
对象的那些方法以外的方法)。
public static ORB init(String[] args, Properties props)
ORB
实例。此方法只能从应用程序调用,每次调用该方法都会返回一个新的全功能
ORB
对象。
args
- 应用程序的
main
方法的命令行参数,可以为
null
props
- 特定于应用程序的属性,可以为
null
public static ORB init(Applet app, Properties props)
ORB
实例。此方法只能从 applet 调用,每次调用该方法都会返回一个新的全功能
ORB
对象。
app
- applet,可以为
null
props
- 特定于 applet 的属性,可以为
null
protected abstract void set_parameters(String[] args, Properties props)
init
方法调用,以传入其参数。
args
- 应用程序的
main
方法的命令行参数,可以为
null
props
- 特定于应用程序的属性,可以为
null
protected abstract void set_parameters(Applet app, Properties props)
init
方法调用,以传入其参数。
app
- applet,可以为
null
props
- 特定于 applet 的属性,可以为
null
public void connect(Object obj)
ImplBase
类。因此 servant 必须是一个 CORBA 对象引用,并且必须继承自
org.omg.CORBA.Object
。由用户创建的 servant 可在调用
connect
方法之后开始接收远程调用。如果将 servant 作为非本地对象上的 IDL 方法调用中的 IDL 参数传递,也就是说,如果对 servant 对象进行编组并将它发送到进程地址空间以外,则 servant 也可以自动隐式地连接到 ORB。
当 servant 对象已经连接到 ORB 时,调用 connect
方法没有任何效果。
OMG 推荐使用可移植对象适配器 API 取代此方法。
obj
- servant 对象引用
public void destroy()
OBJECT_NOT_EXIST
异常。一旦已销毁 ORB,使用相同的 ORBid 再次调用
init
将返回对新建 ORB 的引用。
如果对尚未关闭的 ORB 调用 destroy
,则在销毁该 ORB 之前将启动关闭进程,并且该方法将一直阻塞到关闭 ORB 为止。
如果应用程序在当前正服务于某个调用的线程中调用 destroy
,则将抛出 BAD_INV_ORDER
系统异常,并带有 OMG 次要代码 (minor code) 3,因为阻塞将导致死锁。
为获取最大的可移植性并避免资源泄漏,应用程序应该总是在退出前对所有 ORB 实例调用 shutdown
和 destroy
。
BAD_INV_ORDER
- 如果当前线程正服务于某一调用
public void disconnect(Object obj)
org.omg.CORBA.OBJECT_NOT_EXIST
发送回远程客户端。因此,从远程客户端看来,该对象似乎已被销毁。不过要注意的是,使用 servant 直接发布的本地请求不通过 ORB,因此,这些请求将继续由 servant 处理。
如果 servant 没有连接到 ORB,则调用 disconnect
方法没有任何效果。
OMG 推荐使用可移植对象适配器 API 取代此方法。
obj
- 将与 ORB 断开连接的 servant 对象
public abstract String[] list_initial_services()
String
对象数组,这些对象表示此 ORB 中最初可用 CORBA 服务的对象引用
public abstract Object resolve_initial_references(String object_name) throws InvalidName
object_name
- 字符串形式的初始服务名称
InvalidName
- 如果给定名称不与已知服务关联
public abstract String object_to_string(Object obj)
可以使用能够操作 String
对象的任何方式存储所得 String
对象或与它们进行通信。
obj
- 将字符串化的对象引用
public abstract Object string_to_object(String str)
object_to_string
生成的字符串转换回 CORBA 对象引用。
str
- 将转换回对象引用的字符串。它必须是使用
object_to_string
方法将对象引用转换所得到的字符串。
public abstract NVList create_list(int count)
NamedValue
对象分配具有(可能)足够空间的
NVList
。注意,指定的大小只是一个有助于存储分配的提示,并不表示列表的最大大小。
count
- 要分配空间的
NamedValue
对象的建议数量
NVList
NVList
public NVList create_operation_list(Object oper)
NVList
,并使用给定
OperationDef
对象中所述操作的参数描述进行初始化。此
OperationDef
对象是从接口存储库 (Interface Repository) 中获得的。所返回
NVList
对象中参数的顺序与原始 IDL 操作定义中的顺序相同,这使得能够在动态调用请求中使用该列表。
oper
- 将用来创建列表的
OperationDef
对象
NVList
对象,它包含对给定
OperationDef
对象中所述方法的参数描述
NVList
public abstract NamedValue create_named_value(String s, Any any, int flags)
NamedValue
对象。
NamedValue
对象可用作 (1) 参数或返回值,或者 (2) 上下文属性。它可以单独使用,也可以作为 NVList
对象中的一个元素使用。
s
-
NamedValue
对象的名称
any
- 将插入
NamedValue
对象的
Any
值
flags
-
NamedValue
的参数模式标志:
ARG_IN.value
、
ARG_OUT.value
或
ARG_INOUT.value
之一。
NamedValue
对象
NamedValue
public abstract ExceptionList create_exception_list()
ExceptionList
对象。
ExceptionList
对象
public abstract ContextList create_context_list()
ContextList
对象。
ContextList
对象
ContextList
,
Context
public abstract Context get_default_context()
Context
对象。
Context
对象
Context
public abstract Environment create_environment()
Environment
对象。
Environment
对象
Environment
public abstract OutputStream create_output_stream()
org.omg.CORBA.portable.OutputStream
,在执行方法调用期间,可在该输出流中对 IDL 方法参数进行编组。
org.omg.CORBA.portable.OutputStream
对象
public abstract void send_multiple_requests_oneway(Request[] req)