class org.omg.CORBA.ORB说明

本文基于jdk1.3源码,介绍了ORB类。ORB类为CORBA ORB提供支持,封装通用CORBA功能,使CORBA对象能通信。还说明了ORB的初始化方式,可通过属性值和环境参数实现,不同ORB提供商有不同实现,同时给出了创建ORB对象的代码示例。

ORB

abstract public class org.omg.CORBA.ORB

 

作者: Cocia Lin

 说明:本文是在jdk1.3的源码中翻译整理而成。

 ORB类是为CORBA ORB提供的。ORB类也提供可插入实现ORBpluggable ORB implementation)以允许ORB提供商来实现使用。

 

一个ORB使CORBA对象相互能够通过客户请求(client)和对象服务请求(server)通信。

ORB类封装了通用的CORBA功能,包括以下:(注意:第5和第6条包含了ORB类得大多数方法,典型的是被用在Dynamic Invocation Interfacd(DII)DynamicSkeleton Interface(DSI)。这些接口可能被开发者直接使用,但多数情况下,他们是被ORB内部使用,程序员看不到他们)

  1. 初始化ORB是通过提供预先确定的属性值和环境参数实现的。
  2. 包含服务的初始化对象参数,例如NameService使用resolve_initial_references
  3. 在对象引用合字符串之间转换。
  4. ORB连接到一个servent(一个CORBA对象得实现实例)和从servant断开联结。
  5. 创建这样的对象:
    • TypeCode *
    • Any *
    • NamedValue *
    • Context *
    • Environment *
    • lists (such as NVList) containing these objects *
  6. DII中传递多个消息。

ORB类可以用来获得网络上任何地方的对象实现的引用。


  一个Application 或Applet通过3个初始化方法中的1个在ORB上初始化自己获得CORBA环境的访问入口。其中有2个方法使用下面表格中的属性:

基本Java CORBA属性

 Property Name

Property Value

org.omg.CORBA.ORBClass

ORB实现的类名

org.omg.CORBA.ORBSingletonClass

通过init()返回的ORB类名

这些属性允许不同的ORB提供商提供不同的实现。

当一个ORB实例被创建,ORB的类名实现通过下边的顺序被定位:

  1. 检测Applet参数或Application字符串数组。
  2. 检测属性参数
  3. 检测系统参数
  4. 检测java.home/lib目录中的orb.properties文件。
  5. 使用缺省的参数(利用Java IDL实现)

注意:Java IDL为全功能ORB和单子(singletonORB提供了一个默认实现。当init方法没有提供参数,返回默认单子ORB。当给init方法提供参数但没有ORB类被提供,返回Java IDLORB实现。

下面的代码片断创建一个使用默认单子ORB的ORB对象 。这个ORB有一个限制的实现,防止恶意的不受限的applet任意操作。使用单子模式是因为一个JVM只有一个ORB实例。

 *    ORB orb = ORB.init();

下面的代码片断为Application创建一个ORB对象。参数args代表Application的main方法提供的参数。因为属性指定了ORB类为SomeORBImplementation,所以新的ORB将使用ORB实现来初始化。如果p是null,并且参数没有指定ORB类,新的ORB将被使用默认Java IDL实现初始化。

 *    Properties p = new Properties();
 *    p.put("org.omg.CORBA.ORBClass", "SomeORBImplementation");
 *    ORB orb = ORB.init(args, p);
 

下面的代码片断提供applet作为第一个参数创建ORB对象。如果applet没有提供ORB类,那么新ORB将使用默认Java IDL实现初始化。

 *    ORB orb = ORB.init(myApplet, null);
 * 

一个application或applet可以在一个或者多个ORB中被初始化。ORB初始化只是CORBA世界的开始。

关于作者

Cocia Lin(cocia@163.com)是程序员。他拥有学士学位,现在专攻Java相关技术,刚刚开始在计算机领域折腾。

 

 

Java CORBA 应用中,若需将 `CodeSetConversion.BTCConverter` 返回的字符集从默认的 ISO_8859_1 更改为 UTF-8,需要深入理解 CORBA 的编码转换机制,并结合 ORB 实现的特定 API 来进行设置。 在 CORBAJava 实现中,`CodeSetConversion` 是用于处理字符集转换的核心类,而 `BTCConverter`(Byte To Char Converter)是其中用于字节流到字符流转换的接口。要修改其使用的字符集为 UTF-8,通常需要通过 ORB 的初始化参数或运行时配置来指定。 在某些 ORB 实现中(如 JacORB),可以通过配置属性指定字符集,例如: ```properties org.jacorb.orb.encode_charset=UTF-8 org.jacorb.orb.decode_charset=UTF-8 ``` 这将影响 ORB 内部使用的 `BTCConverter` 实现所采用的字符集编码方式 [^1]。 若需在代码中显式创建并设置 UTF-8 编码的 `BTCConverter`,可参考如下方式(以 JacORB 为例): ```java import org.jacorb.orb.CodeSetConversion; import org.jacorb.orb.CodeSetConversion.BTCConverter; public class UTF8BTCConverterExample { public static void main(String[] args) { // 创建 UTF-8 编码的 BTCConverter BTCConverter utf8Converter = CodeSetConversion.createCharBTCConverter("UTF-8"); // 使用该转换器进行字节到字符的解码 byte[] isoBytes = "Hello, 世界".getBytes(); char[] chars = new char[utf8Converter.getConvertedLength(isoBytes.length)]; utf8Converter.convert(isoBytes, 0, isoBytes.length, chars, 0, chars.length); System.out.println(new String(chars)); } } ``` 上述代码中,`CodeSetConversion.createCharBTCConverter("UTF-8")` 用于创建一个使用 UTF-8 编码的字符转换器实例。这将确保在 CORBA 通信过程中,字节流被正确地按照 UTF-8 格式解析为字符数组 [^1]。 此外,在 ORB 初始化时,也可以通过设置编码策略来影响 `BTCConverter` 的行为: ```java Properties props = new Properties(); props.put("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB"); props.put("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton"); props.put("org.jacorb.orb.encode_charset", "UTF-8"); props.put("org.jacorb.orb.decode_charset", "UTF-8"); ORB orb = ORB.init((String[]) null, props); ``` 通过上述配置,ORB 会自动使用 UTF-8 字符集创建 `BTCConverter`,从而避免手动干预转换过程 [^1]。 ### 注意事项 - 不同 ORB 实现(如 TAO、JacORB)对字符集的支持和配置方式略有不同,建议查阅对应 ORB 的官方文档。 - 若 ORB 不支持 UTF-8 作为默认字符集,应考虑在应用层进行字符串的编码转换,确保传输数据的一致性。 - 使用 `wstring` 类型在 IDL 中定义接口时,通常会自动使用 Unicode 编码(如 UTF-16),避免依赖底层字符集设置。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值