e-works数字化企业网  »  文章频道  »  基础信息化  »  IT综合

构建Web上的CORBA应用

2008/8/12    来源:e-works    特约撰稿人:朱全敏      
关键字:CORBA  软件构件  安全限制  
由于CORBA与Web相结合带来的巨大优势,出现了很多种CORBA的Web使用技术。Java语言作为一门新兴的网络上的世界语,在短短的几年中取得了令人瞩目的成就,在Web开发上占举足轻重的地位。因此,Java迅速成为CORBA在WWW上的切入点。本文说明在Web上构建CORBA应用的方式,与以往不同的是采用纯Java语言作为映射语言和实行语言。

    由于CORBA与Web相结合带来的巨大优势,出现了很多种CORBA的Web使用技术。Java语言作为一门新兴的网络上的世界语,在短短的几年中取得了令人瞩目的成就,在Web开发上占举足轻重的地位。因此,Java迅速成为CORBA在WWW上的切入点。

    一、 开发步骤

    使用纯java语言进行web上的CORBA应用开发与C++的应用略有不同,其一般过程如下:

    (1) 对所要实行的系统进行分析和对象建模,用接口定义语言(IDL)描述系统中各个对象的属性和对外接口;
    (2) 考虑客户方采用什么样的调用策略。如果用静态调用,需将该系统的IDL描述文件通过IDL/Java编译器进行编译,生成相应的桩和构架文件。如果用动态调用,只需将IDL文件载入到接口库中;
    (3) 使用纯Java语言实现系统中的各个对象;
    (4) 编写服务器方主程序,其功能是创建服务方对象实现实例,并向Java—ORB注册,同时等待接受请求;
    (5) 编写客户方Applet,其作用是获得服务器方对象引用,与用户进行交互,并根据用户指令向服务器方对象实现实例发出请求,并将结果返回给用户;
    (6) 将客户方Applet和服务器方主程序与桩和构架文件等联编,并将该Applet嵌入到一个HTML页面中。

    至此,用户通过浏览器浏览该页面,就可以调用服务器方对象实现操作了。

    二、 简单WWW银行系统的开发

    下面将按照上述过程,以Orbus for Java版为环境,采用静态调用的方式,开发一个基于CORBA的简单的WWW银行系统。

    (1) 使用IDL语言对象对系统对象进行描述

    该例子由两种主要对象组成:银行对象bank负责对账户对象account的管理,进行开户和销户操作;account对象有一个只读的属性balance,供用户查询余额,并提供存款和取款两种操作。此外,还定义了一个用户异常reject,在bank对象进行开户时发生账户名冲突或account对象进行提款操作时发现提款额超过余额时都会出现这个异常。该异常有一个字符串属性reason,用于描述异常产生的原因。

    (2) 对上述bank.idl文件进行编译

    根据IDL/java映射规定,除对每种IDL类型进行直接映射外,对每个用户定义的IDL数据类型,包括序列、数组、结构、枚举、联合、接口、异常等都将产生一个Helper类和一个Holder类,供桩和构架使用。其中,Helper类负责建立对象的标识,对对象进行CDR编解码操作。Holder类则在对象作为out或inout参数传递时使用。另外,对于每一个接口还将产生一个桩文件和一个构架文件。

    (3) 服务器方对象的实现,包括account、bank两个对象的实现

    从这一步开始,就进入了实质性的纯Java编程阶段。首先从服务器方入手,编写服务器方对象实现和主程序。服务器方对象实现的方式有两种:一种是继承方式,另一种是捆绑(Tie)的方式。前者是IDL/Java映射规范中所推荐的方式,具体的继承关系见图1。后者是IONA公司提出并在Orbix中首次实现。目前大多数CORBA系统都同时支持这两种方式。


图1 桩和构架类的继承关系

    采用继承方式实现的服务器方对象,除了必须继承相应的桩类XImplBase以外,其实现部分与其下层的ORB系统完全无关,因而具有较好的可移植性,受到OMG的推荐。但是,由于Java语言不支持多继承,因此服务器方对象实现就不能再继承其他对象,特别是当服务器方对象之间存在继承关系时,子类无法重用父类的实现,造成编程上的一些困难。

    为了解决这一问题,IONA公司提出了服务器方实现的捆绑方式。以bank对象为例,IDL/Java编译器除了正常的直接映射文件bank.java和桩文件bankstub.java外,还将产生bankOperation.java和-tie-bank.java两个服务器方文件,其中,bankOperation是一个纯Java接口,由最终的服务器方对象所实现。-tie-bank类具有服务器方构架的功能,同时作为bank对象实现的代理,将请求发送给它。它们之间的关系如图2所示。


图2 Tie方式下服务器方对象关系图

责任编辑:李卓刚
本文为e-works原创投稿文章,未经e-works书面许可,任何人不得复制、转载、摘编等任何方式进行使用。如已是e-works授权合作伙伴,应在授权范围内使用。e-works内容合作伙伴申请热线:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐