CORBA模型

程序设计方法学第五次上机
一.题目分析
题目一:
1.编写IDL接口HelloWorld.idl
2.编译IDL接口:X:\corba>idlj –fall HelloWorld.idl
编译结果生成sample包,生成下述文件
_HelloWorldStub.java
HelloWorld.java
HelloWorldHelper.java
HelloWorldHolder.java
HelloWorldOperations.java
HelloWorldPOA.java
3.编写并编译服务端程序:HelloWorldServer.java
4.编写并编译客户端程序: HelloWorldClient.java
5.启动名字服务器:X:\corba >tnameserv -ORBInitialPort 1050
启动服务端程序:X:\corba >java HelloWorldServer -ORBInitialPort 1050
输出:HelloWorld is running
启动客户端程序:X:\corba >java HelloWorldClient -ORBInitialPort 1050
输出:Hello World!
题目二:
编写实现连加、连减和加减混合等数学++/- -运算,并进行测试。
1.编写IDL接口counter.idl
2.编译IDL接口:X:\corba>idlj –fall counter.idl。编译结果生成CounterApp包
3.编写并编译对象实现代码:CounterImpl.java
4.编写并编译服务端程序: Server.java
5.编写并编译客户端程序: Client.java
6.运行
启动名字服务器:X:\corba >tnameserv -ORBInitialPort 1050
启动服务端程序:X:\corba >java Server -ORBInitialPort 1050
输出:Server started. Stop: Ctrl-c
启动客户端程序:X:\corba >java Client -ORBInitialPort 1050
二.CORBA模型分析
借鉴自:https://blog.****.net/ASingleWolf/article/details/90316627

题目一:
CORBA模型

题目二:
CORBA模型
三.组件实现(代码见压缩包)
四.测试、调试及运行结果
题目一:
首先新建HelloWorld文件夹,里面编写HelloWorld.idl,再编译IDL接口:X:\corba>idlj –fall HelloWorld.idl;
CORBA模型
这时会在HelloWorld.I\idl同级目录下出现sample文件夹,点开后会出现:
CORBA模型
2…建立服务端程序:HelloWorldServer.java和客户端程序: HelloWorldClient.java,然后编译:
CORBA模型
CORBA模型
3.启动名字服务器:X:\corba >tnameserv -ORBInitialPort 1050
CORBA模型
4.启动服务端程序:X:\corba >java HelloWorldServer -ORBInitialPort 1050
输出:HelloWorld is running
CORBA模型

5.启动客户端程序:X:\corba >java HelloWorldClient -ORBInitialPort 1050
输出:Hello World!
CORBA模型
因为题目要求编写实现显示“Hello,World!+班级+中文姓名”字符串,
所以需要做改动如下:将HelloWorld.idl中string改为wstring,wstring用于处理多字节的字符串。
再将HelloWorldServer.java下的程序改为如下:
CORBA模型
然后像之前运行CORBA程序那样,就会出现如下结果:
CORBA模型

题目二:
1.新建Counter文件夹,放入Counter.idl,编译IDL接口:X:\corba>idlj –fall counter.idl
CORBA模型
2.编译结果生成CounterApp包
CORBA模型
CounterApp下级目录有
CORBA模型
3.编写并编译对象实现代码:CounterImpl.java ,Server.java,Client.java
CORBA模型
4.启动名字服务器:X:\corba >tnameserv -ORBInitialPort 1050
CORBA模型
5.启动服务端程序:X:\corba >java Server -ORBInitialPort 1050
输出:Server started. Stop: Ctrl-c
CORBA模型
6.启动客户端程序:X:\corba >java Client -ORBInitialPort 1050
CORBA模型
五.经验归纳
题目一:
CORBA处理字符串有:String和wstring两种类型,string类型主要用于处理ASCII类型的字符串,wstring用于处理多字节的字符串,例如:中文。就像作业要求那样,如果最终要显示中文班级、姓名和学号,就必须将HelloWorld.Idl中的string改为wstring,并且将中文班级、姓名和学号加入HelloWorldServer.java中,否则在运行到最后时会发生栈溢出现象。
题目二:
这个题目中,我先新建Counter文件夹,放入Counter.idl,编译IDL接口:X:\corba>idlj –fall counter.idl,编译结果生成CounterApp包。在编写并编译CounterImpl.java ,Server.java,Client.java,时会出现以下错误:
CORBA模型

但是,自己在确保上述操作正确无误前提下,换了一台电脑,运行作业二,竟然就成功了,没有发生任何错误,这也是我疑惑的地方。在最后提交的作业中我会将错误的文件夹Counter_false也提交,Counter是正确的文件夹。
另外在运行服务器、服务端程序和客户端程序要启动三个cmd窗口。