作者:无*
时间:2019-5-17
一.题目分析
充分利用CORBA系统中对象的特点:接口的继承性,操作和属性自身的特点。通过两个实例分析CORBA内部实现结构。
题目一:
Java版CORBA程序1——HelloWorld要求编写实现显示“Hello,World!+班级+中文姓名”字符串.
1.编写IDL接口HelloWorld.idl:(此处先编写文本文档然后重命名为idl文件)
module sample{
interface HelloWorld{
wstring sayHello();
};
};
说明:CORBA处理字符串有:String和wstring两种类型,string类型主要用于处理ASCII类型的字符串,wstring用于处理多字节的字符串,例如:中文。
2.编译IDL接口:D:\test>idlj –fall Hello.idl
编译结果生成sample包,生成下述文件:
_HelloWorldStub.java
HelloWorld.java
HelloWorldHelper.java
HelloWorldHolder.java
HelloWorldOperations.java
HelloWorldPOA.java
3.编写并编译服务端程序:HelloWorldServer.java
在cmd中输入javac HelloWorldServer.java生成对应的class文件
4.编写并编译客户端程序: HelloWorldClient.java
在cmd中输入javac HelloWorldClient.java生成对应的class文件
5. 运行
启动名字服务器: D:\test>tnameserv -ORBInitialPort 1050
启动服务端程序: D:\test>java HelloWorldServer -ORBInitialPort 1050
输出:HelloWorld is running
启动客户端程序:D:\test>java HelloWorldClient -ORBInitialPort 1050
输出:Hello World! 软工1703班 吴霜
注意:名字服务器、服务端和客户端要分别启动一个DOS命令提示符界面
题目二:
JAVA版CORBA程序2——Counter编写实现连加、连减和加减混合等数学++/- -运算,并进行测试。
1 编写IDL接口counter.idl:
module CounterApp{
interface Counter{
readonly attribute long value;
void inc();
void dec();
};
};
2.编译IDL接口:D:\test2>idlj –fall counter.idl
编译结果生成CounterApp包,生成下述文件
_CounterStub.java
Counter.java
CounterHelper.java
CounterHolder.java
CounterOperations.java
CounterPOA.java
3.编写并编译对象实现代码:CounterImpl.java
4.编写并编译服务端程序: Server.java
5.编写并编译客户端程序: Client.java
以上三步都需要在cmd中输入相关命令 javac 文件名
6.运行
启动名字服务器:D:\test2 >tnameserv -ORBInitialPort 1050
启动服务端程序:D:\test2 >java Server -ORBInitialPort 1050
输出:Server started. Stop: Ctrl-c
启动客户端程序:D:\test2 >java Client -ORBInitialPort 1050
二.CORBA模型分析
在此结合CORBA模型对题目进行详细的分析和具体设计,需要绘制出相应的组件结构图。
注:***以题目1为例
HelloWorldStub.java就是服务端的stub类,为客户端提供了CORBA服务功能,它实现了客户端的HelloWorld.java接口。
HelloWorld.java是IDL接口的JAVA语言实现,是方法sayHello()的实现。
HelloWorldHelper.java类提供了许多辅助功能的方法,主要是narrow()方法,它将CORBA对象引用转化成适合的类型。
HelloWorldHolder.java提供了有关参数操作的实现,这些参数在CORBA中使用,但JAVA语言中没有直接的对应。
HelloWorldOperations.java使用JAVA语言描述IDL的接口。
CORBA结构:
三.组件实现(源代码)
见文件夹
四.测试、调试及运行结果
首先对软件环境进行测试
题目一:相关命令输入
生成Sample文件夹
在cmd输入命令后生成相应的class文件
运行:
题目二:
编写对象接口
命令输入后生成CounterApp文件夹
分别编写三个对应文件并输入命令
运行
五.经验归纳
此次上机主要是对CORBA进行基本的了解,分析CORBA内部实现结构。掌握CORBA中面向对象的分析方法,通过Java IDL的两个实例的编程了解CORBA。JAVA IDL即idltojava编译器就是一个ORB,可用来在java语言中定义,实现和访问CORBA对象。在以上实例的编程中要注意在cmd中输入正确的命令,并在对应的文件中编写相应内容,题目一由于有汉字的出现,所以要注意在定义并编译对象接口的时候编写的是wstring;其次就是编译和运行的时候要注意名字服务器、服务端和客户端要分别启动一个DOS命令提示符界面,否则就会出现错误。
从以上例子可以看出,使用CORBA后,开发人员再不必关心客户和服务之间的通信问题,也不必处理客户和服务之间的问题,客户系统和服务系统可以在不同的机器系统中运行,并且可以用不同的语言来实现。