使用POA-tie实现CORBA/JAVA服务器端映射

时间:2022-03-10 05:56:35

使用POA-tie实现CORBA/JAVA服务器端映射

摘要:首先介绍了CORBA中POA的组织结构及工作机制,然后具体介绍如何使用POA-tie实现CORBA/JAVA服务器端。

关键词:POA;POA-Tie;CORBA;IDL

1 POA简介

(1)POA结构

每一个POA都要维护一个活动对象映射(Active Object Map),它包含一个个对应于服务的对象ID,活动对象映射是一张将激活对象映射到相应服务的表。对象ID是一个由POA和用户提供的实现使用的一个值,用来标识一个特定的抽象的CORBA对象。对象ID的值可能由POA或实现来赋值和管理, 对象ID的值由引用封装并对客户方隐藏。对象ID没有标准格式,它们被POA作为未解释的8位字节序列来管理。在POA中还需要根据实际应用实现诸如缺省服务、服务激活器、适配器激活器、服务定位器之类的功能。

(2)POA工作机制

以对象引用为基础,一个POA必须决定它是否能服务于那个对象。ORB通过一种定位机制去选择一个合适的POA。一旦一个对象被定位,ORB就会异步地将请求传输给POA。一旦对请求的处理结束,POA就会通知ORB并将结果返回。在多个POA组成的树形结构中,客户发出的所有请求由根POA接收,根POA在这之前已经在ORB上进行了注册。请求是从根POA开始向下传递给它的下级的,如果专门处理某个请求的POA不存在,这个请求将发送给该POA的父POA,并调用它的适配器激活器重新建立这个丢失了的POA。POA接收到了请求,然后通过对象的定位,使用对象的实现去处理接收到的请求。

2 CORBA实现IDL的服务器端映射方式

CORBA支持两种实现IDL接口的服务器端映射:ImplBase inheritance(继承)和Tie delegation(委托)。ImplBase方法用一个实现类实现IDL接口,其中的实现类也扩展编译器生成的xxxImplBaseClass。Tie方法用两种类实现IDL接口:一个IDL生成的Tie类,该类继承自xxxImplBaseClass,但委托所有的调用到一个实现类;一个实现IDL生成的xxxOperations接口的类,它定义了IDL的功能。

3 POA-Tie的服务器端实现

3.1 定义接口(Hello.idl)

首先使用IDL创建一个CORBA应用,规定所有的对象和接口。程序Hello.idl定义了一个CORBA对象,其中sayHello()操作返回一个string,shutdown()方法用来关闭ORB。

module HelloApp

{

interface Hello

{

string sayHello();

oneway void shutdown();

};

};

3.2 服务器端实现(HelloServer.java)

服务器端包括两个类:servant和server。Servant(HelloImpl)实现Hello的IDL 接口,Hello中的每一个实例都由HelloImpl中的一个实例实现。Servant是由Hello.idl通过idlj编译器编译产生的,是HelloPOA的子类,它包含了Hello.idl中定义的两个方法sayHello()和shutdown(),其余的代码是用来处理由skeleton提供的ORB的,这个ORB用来对参数和结果进行编组等。

HelloServer类包含main()方法,它完成以下操作:

・创建并初始化一个ORB实例

・得到根POA的引用并激活POAManager

・创建servant实例并且通知ORB

・创建一个连接使servant成为

・为连接得到一个CORBA对象应用

・得到根的命名上下文

・用名字“Hello”在命名上下文中注册一个新的对象

・等待客户端对这个新对象的请求

HelloServer.java 中创建tie的核心代码:

// create a tie, with servant being the delegate.

HelloPOATie tie = new HelloPOATie(helloImpl, rootpoa);

Hello href = tie._this(orb);

3.3 客户端实现(HelloClient.java)

客户端完成以下操作:

・创建并初始化ORB

・获得根命名上下文

・在命名上下文中查找“Hello”并接收CORBA对象的引用

・调用对象的sayHello()和shutdown()方法,将结果打印出来

3.4 创建并运行Hello World

(1)使目录中包含文件Hello.idl

(2)运行idlj,产生stub和skeleton

(3)编译*.java 文件: javac*.javaHello

App/*.java

(4)启动orbd:start orbd -ORBInitialPort 1050 -ORBInitialHost localhost

(5)启动Hello server: start java HelloSer

ver -ORBInitialPort 1050 -ORBInitialHost localhost

(6)执行客户端应用程序:java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhost

综上所述,POA-Tie机制利用了java的多接口继承,使用POA-Tie机制可以更灵活地在java中实现CORBA,并能提供附加的、像框架一样的函数提供给服务器端对象。

参考文献

[1](英)George Coulouris Jean Dollimore Tim Kindberg 著.金培弘 译.分布式系统概念与设计.北京:机械工业出版社,2004.1.

[2]marko boger 著.曹学军 译.JAVA与分布式系统.北京:机械工业出版社,2003.

[3](澳)David Reilly,等.沈凤,等 译.JAVA网络编程与分布式计算.北京:机械工业出版社,2003.3.

[4]Robert Orfali,Dan Harkey.Client/Server Programming with Java and CORBA (Second Edition).

作者简介:张福勇(1982-),男,山东烟台人,昆明理工大学信息工程与自动化学院计算机应用专业研究生,主要从事网格与分布式系统研究。

上一篇:应对DoS/DDoS攻击的九条经验 下一篇:局域网网络层存在的隐患及其解决方法 等