POA简介

来源:互联网 发布:电影人间喜剧 知乎 编辑:程序博客网 时间:2024/06/10 17:52
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,并能提供附加的、像框架一样的函数提供给服务器端对象。
原创粉丝点击