JacORB学习笔记 ( by quqi99 )
作者:张华 发表于:2010-02-20
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明
1) 安装ant, 在jacorb根目录下执行ant jaco命令生成jaco.bat。(注意:我们用的版本是2.3.0)。生成的jaco.bat文件内容如下:
java -Djava.endorsed.dirs=E:/java/JacORB2.3.0/lib
-Djacorb.home=E:/java/JacORB2.3.0
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton
-classpath %CLASSPATH% %*
2) 建立一个IDL文件 ,如demo.idl
module demo
{
module hello {
interface GoodDay {
string hello_latin1();
wstring hello_chinese();
};
};
};
3) 编译IDL,执行命令:
java -cp "E:/java/JacORB2.3.0/lib/idl.jar;E:/java/JacORB2.3.0/lib/logkit-1.2.jar"
org.jacorb.idl.parser demo.idl
这样,会生成一些辅助类。
4)实现demo.idl文件hello模块中GoodDay接口,手动创建GoodDayImpl.java文件
package demo.hello;
public class GoodDayImpl extends GoodDayPOA {
public String hello_chinese() {
// TODO Auto-generated method stub
return "你好, 世界";
}
public String hello_latin1() {
// TODO Auto-generated method stub
return "Hello, World";
}
}
4、创建Server和Client(服务器端和客户端)程序
Server.java
//////////////////////////////////////////////////////////////////////
package demo.hello;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
public class Server {
public static void main(String[] args) {
try {
ORB orb = ORB.init(args, null); // 初始化 ORB
POA poa = POAHelper.narrow(orb
.resolve_initial_references("RootPOA")); // 初始化 POA
poa.the_POAManager().activate();
// 创建一个 GoodDay 对象
GoodDayImpl goodDayImpl = new GoodDayImpl();
// 创建 GoodDay 对象的引用
org.omg.CORBA.Object obj = poa.servant_to_reference(goodDayImpl);
// 使用 naming service
NamingContextExt nc = NamingContextExtHelper.narrow(orb
.resolve_initial_references("NameService"));
nc.bind(nc.to_name("hello.goodDay"), obj); // 绑定对象
orb.run();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Client.java
//////////////////////////////////////////////////////////////////////
package demo.hello;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
public class Client {
public static void main(String[] args) {
try{
GoodDay goodDay;
ORB orb = ORB.init(args, null); // 初始化 ORB
// 使用 naming service
NamingContextExt nc = NamingContextExtHelper.narrow(orb
.resolve_initial_references("NameService"));
org.omg.CORBA.Object obj = nc.resolve(nc.to_name("hello.goodDay")); //解析对象
goodDay = GoodDayHelper.narrow(obj); //转换
// GoodDay 接口调用
System.out.println(goodDay.hello_latin1());
System.out.println(goodDay.hello_chinese());
}catch(Exception e) {
e.printStackTrace();
}
}
}
5、运行程序
(1)运行JacORB的ns
先把jacorb_properties.template文件另存为jacorb.properties ,且把下面两行
#ORBInitRef.NameService=file:/c:/NS_Ref
ORBInitRef.NameService=http://www.x.y.z/~user/NS_Ref
改为
ORBInitRef.NameService=file:/c:/NS_Ref
#ORBInitRef.NameService=http://www.x.y.z/~user/NS_Ref
注意:
ORBInitRef.NameService=file:/d:/NS_Ref
设成D盘或E盘死活不行。
先设置环境变量
======================================================
set JacORB_HOME= E:/java/JacORB2.3.0
set CLASSPATH=.;%JacORB_HOME%/lib/idl.jar;%JacORB_HOME%/lib/jacorb.jar;%JacORB_HOME%/lib/logkit-1.2.jar;
set PATH=%PATH%;%JacORB_HOME%/bin;
======================================================
ns
(2)运行Server和Client
进入代码目录demo的上级目录(例如:cd D:/Code/eclipse/corba),在运行之前,参照(1)设置环境变量,然后运行下面的代码
jaco demo.hello.Server
jaco demo.hello.Client
注意,如果不用jaco脚本运行服务端与客户端(而是直接用java命令运行),会报下列错:org.omg.CORBA.ORBPackage.InvalidName.
那就要模仿jaco添加下列参数:
-Djava.endorsed.dirs=e:/java/JacORB2.3.0/lib
-Djacorb.home=e:/java/JacORB2.3.0
-Dorg.omg.CORBA.ORBClass=org.jacorb.orb.ORB
-Dorg.omg.CORBA.ORBSingletonClass=org.jacorb.orb.ORBSingleton