CSDN博客

img gigix
博客专家

利用动态调用方式实现分布式应用(下)

发表于2002/4/9 9:38:00  1505人阅读

利用动态调用方式实现分布式应用(下)

(本文转载自软件工程专家网www.21cmm.com

苏洋

  上一讲介绍了利用动态调用方式实现分布式应用时, 客户端动态调用接口(DII)和服务对象动态骨架接口(DSI)的创建,下面用一个具体的例子来说明整个过程。

1. 对象功能描述和系统简要设计

  本例仍然模拟电信资费管理业务流程,在服务对象端注册一个电话用户。用户在远程客户端查询该用户本月发生的电话费用。根据对象功能的说明,用UML描述出服务对象需要实现的功能:

  getFee() : float

  openAccout( string name ) : Agent

2. 服务对象接口定义

  根据系统分析结果,用IDL编写出服务对象方法描述程序TeleComm.idl:

  module TeleComm

  {

  interface Agent

  {

  float getFee();

  };

  interface AgentManager

  {

  Account openAccount(in string name);

  };

  };

3. 接口的实现

(1)Agent接口的实现

  public class AgentImpl extends DynamicImplementation

  {

  //构造AgentImpl类

  //get方法在invoke动态调用方法中按名字匹配调用

  public synchronized org.omg.CORBA.Object get(String name){

  //申请账户金额,生成账户对象

  }

  public void invoke(org.omg.CORBA.ServerRequest request){

  //申请可移植对象适配器

  //填写调用参数,提出申请账户请求

  }

  }

(2)AgentManager接口实现

  public class AgentManagerImpl extends DynamicImplementation{

  //构造AgentManager类

  public void invoke(org.omg.CORBA.ServerRequest request){

  //填写调用参数表,向Agent对象提出业务请求,获取Agent对象

  //……

  }

  }

(3)服务器端程序设计

  public class Server {

  public static void main(String[] args) {

  //初始化ORB、申请POA和POA管理器

  //申请默认服务对象,激活POA管理器

  //等待调用请求

  //……

  }

(4)客户端程序设计

  public class Client {

  public static void main(String[] args) {

  //初始化ORB,定位Agentmanager对象

  //发出调用请求

  org.omg.CORBA.Request request=manager ._request(“getFee”);

  request.invoke();

  //查询返回结果,取得返回值

  request.get_response();

  //异常处理

  //……

  }

4. 程序设计及运行环境说明

  上述基于动态调用接口和动态骨架接口的程序是基于VisiBroker 4.5.1中间件环境开发的。其他环境下程序的实现方式和运行可能会有所差别。在VisiBroker环境下,按如下方式运行程序:

  (1)首先启动VisiBroker Smart Agent事务代理;

  (2)启动服务对象程序:vbj Server;

  (3)启动客户对象程序:vbj Client。

  其中vbj是VisiBroker for Java中的Java代码解释执行程序。读者也可以用Java解释工具java代替,但需要指定VisiBroker中的vbjorb等库。

0 0

我的热门文章

相关博文

img
取 消
img即使是一小步
也想与你分享
打开
img