CORBA与Java结合,小试一把

步骤一,创建一个IDL文件,此处命名为:firstcorba.idl
内容如下:
module cn{
interface Test{
string getName();
};
};
注意:此处module相当于java中的包结构,表示该IDL文件编译后放置在cn文件夹下,大括号后面的“;”必不可少。切记!!

步骤二,IDL文件编译生成7个java类文件(这个数字不是死的,只是我用的版本生成7个,在这儿不能误导大家,呵呵),分别如下:
_TestStub.java类是客户端的stub类,为客户端提供CORBA服务功能,它实现了客户端的Test.java接口;
Test.java类是IDL接口的Java语言实现;
TestHelper.java类提供很多辅助功能的方法,主要是narrow(),它为CORBA对象引用转化为适合的类型;
TestHolder.java提供了有关参数操作的实现,这些参数在CORBA中使用但Java语言中没有直接的对应;
TestOperations.java类是我们所预想的接口,只包含我们定义的那个方法,不包含CORBA的任何东西;
TestPOA.java类是服务器端的skeleton类,提供了服务器端基本的CORBA功能;
TestPOATie.java类继承了TestPOA类。

步骤三,写服务器类(TestServer.java)
package cn;

import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.POA;

class TestObject extends TestPOA {
private ORB orb;
public void setOrb(ORB orb){
this.orb = orb;
}
public String getName() {
return "test is successfull";
}
}
public class TestServer {
public static void main(String[] args) {
try {
//创建和初始化ORB
ORB orb = ORB.init(args, null);
// 创建服务对象并将其向 ORB 注册
POA rootpoa = (POA)orb.resolve_initial_references("RootPOA");
rootpoa.the_POAManager().activate();
TestObject testRef = new TestObject();
testRef.setOrb(orb);
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(testRef);
Test sref = TestHelper.narrow(ref);
// 获取根命名上下文
org.omg.CORBA.Object objRef = orb .resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// 绑定命名中的对象引用
NameComponent nc = new NameComponent("About", "");
NameComponent path[] = { nc };
ncRef.rebind(path, sref);
// 等待来自客户机的调用
java.lang.Object sync = new java.lang.Object();
synchronized (sync) {
sync.wait();
}
} catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
}
}

步骤四,写客户端类(TestClient.java)
package cn;

import org.omg.CosNaming.*;
import org.omg.CORBA.*;
public class TestClient{
public static void main(String[] args) {
try{
ORB orb = ORB.init(args,null);
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
NameComponent nc = new NameComponent("cn","");
NameComponent path[] = {nc};
Test testRef = TestHelper.narrow(ncRef.resolve(path));
String test = testRef.getName();
System.out.println(test);

}catch(Exception e){
System.out.println("ERROR:"+e);
e.printStackTrace();
}
}

}

步骤五,构建和运行
将以上的类都进行编译,放在您想放置的文件夹,这里我所有编译成的类文件都放在:classes文件夹下面。
启动一个MS-DOS命令解释器,输入以下命令,确保命名服务器处于运行状态:
tnameserv -ORBInitialPort 1050
启动另一个MS-Dos命令解释器,到classes路径下,输入以下命令,启动Test服务器:
java cn.TestServer -ORBInitialPort 1050
再启动一个MS-Dos命令解释器,同样到classes路径下,输入以下命令,运行应用程序客户端:
java cn.TestClient -ORBInitialPort 1050

DOS窗口出现“test is successfull”,表明成功了!!

个人认为,CORBA给每个类命名应该是依据类的全路径吧,这个有待考证,哈哈!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值