OmniORB的使用

  现在很多人在对CORBA进行学习,大家都已经了解到CORBA是一个完全中间性的语言,可以使用接口定义语言(IDL)定义开发时使用接口的 Client 和实现接口的 Server 所需要的信息。Client 和 Server 的具体实现代码并不在IDL定义中编写,而是使用某种目标语言的IDL 编译器生成所需的代码存根及helper类,Client 和 Server再使用真正的编程语言来进行具体实现。

  为了保证在不同的 CORBA 产品基础之上构建的分布式对象可以相互通信,Client和Server通过ORB(对象请求代理)进行通信。一般的运行流程是Client把请求发送给ORB,ORB再把请求发送给Server,Server把返回结果发送ORB,ORB再把返回结果发送给Client。ORB可以说Client和Server之间的翻译者。即使Client和Server使用不同的编程语言编写,只要是符合相同的IDL定义,ORB也可以完成相互的通信。

  所有的文档在强调服务器及客户机可以是Java也可以是C++或其他语言(如:Delphi)进行编写,但在网站或书本是没有详细说如何应对多语言客户机的例子。《JAVA2核心技术》上面有些说明,但也只是介绍性的文章,故自己下载了omniORB304,进行了一次使用SUN的 tnameserv命名服务程序,服务器用JAVA编写,客户机分别用JAVA和C++(VC6+omniORB)编写的试验,希望通过一次编程的具体操作实例来体验或明了CORBA思想。

总体的编写过程如下:

  1. 用IDL定义一个接口文件,描绘要实现的功能,也可以说是定义一个要实现功能的一个模版(SysProp.idl)
  2. 使用"IDL to Java"编译器(这里是IDLJ)将IDL文件转化为Java编程语言中编写的接口定义,生成所需的代码存根及helper类
  3. 使用Java语言编写客户机和服务器的实现程序。
  4. 使用"IDL to C++"编译器(这里是omniidl)将IDL文件转化为C++编程语言中编写的接口定义,生成所需的代码存根及helper类
  5. 使用C++语言编写客户机实现程序(当然也可编写服务器程序,但本次试验没有进行)
  6. 起动命名服务tnameserv
  7. 起动Java编写的服务程序
  8. 用Java和C++编写的客户机分别调用相应的服务

>>>运行环境的设定:

  总体环境由jdk1.3 + omniORB3.0(www.uk.research.att.com\omniORB\doc\3.0) + vc6 组成,JDK和VC的具体的安装省略。

>>>安装omniORB

  从 www.uk.research.att.com\omniORB\doc\3.0 下载omniORB3.0 ( 本文测试所下载的文件是 omniORB_304_x86_win32.zip )。用WINZIP进行解压omniORB_304_x86_win32.zip到omniORB_304_x86_win32目录,目录内存在omni目录,复制omni目录内的文件到你把想存放的位置。

>>>测试电脑安装在 C:\omni

  根据C:\omni\README.win32 文档进行设定,由于运行程序及命令行在控制台进行,所以本次测试并不根据文档要求去设定环境变量,而是编写了一个omni.bat,在使用控制台时,首先运行。

  本测试电脑omni.bat内容如下

1 set TOP=c:\omni
2 set path=%TOP%\bin\x86_win32;%path%
3 set LIB=%TOP%\bin\x86_win32;%LIB%
4 set INCLUDE=%TOP%\include;%INCLUDE%
5 set VcOsDir=
6 set VSCommonDir=

>>>编写JAVA的服务器

1. 把IDL文件转化为JAVA编程语言代码存根类及helper类。

  执行如下命令

 idlj -fall SysProp.idl
在正常的情况下D:\mywork\t1 目录内将生成以下文件,否则请检查你的执行程序及文件
1 SysProp.java 
2 SysPropHelper.java 
3 SysPropHolder.java 
4 SysPropOperations.java 
5 _SysPropImplBase.java 
6 _SysPropStub.java

 

参考:

1. OmniORB 的简单使用例子

2. 客户端使用java,服务端使用c++的corba编程环境搭建

posted @ 2020-01-05 22:38  傍风无意  阅读(1699)  评论(0)    收藏  举报