Eclipse下JacORB开发环境搭建及实例
2014-06-04 23:42
295 查看
JacORB是OMG corba的Java实现,用于开发分布式应用。本文将详细介绍如何在Eclipse下搭建JacORB开发环境。
一、安装JacORB
首先下载Jacorb发行包,到JacORB官网下载jacORB发行版本,建议选择编译好的(源码版需要使用ant编译),本文作者选择的是 jacorb-3.4-binary.zip。
接着把jacorb添加到系统环境变量,解压文件包到某一路径,比如 E:\JacORB\jacorb-3.4, 然后将E:\JacORB\jacorb-3.4\bin添加到path环境变量
接下来配置jacorb名字服务,将E:\JacORB\jacorb-3.4\etc路径下jacorb_properties.template文件更名为jacorb.properties,然后用文本编辑器打开找到ORBInitRef.NameService=file:/c:/NS_Ref
,去掉其前面的注释符并把其它的选择注释掉。这一步是设置ior文件存放路径,里面有服务的ip地址及端口信息等,用dior
–f c:/NS_Ref命令可以解析这个ior文件以得到ip地址及端口号。
至此,jacorb安装完毕,打开命令行窗口,输入ns,即可启动名字服务NameService
NameService的启动参数如下:
ns [-Djacorb.naming.ior filename=<filename>] [-DOAPort=port] [-Djacorb.naming.time out=<timeout>]
一般会指定端口,即第二个参数
注意:如果NameService所在机器有多个IP地址,即多宿主机器,那么在没有指定所用IP地址的情况下,系统会自行选择,这时可以通过dior –f c:/NS_Ref来查看NameService所用IP地址。
二、安装Eclipse的JacORB开发插件
首先在下JacORB的Eclipse插件ORBStudio_7.7.7.jar并安装。
安装Eclipse的方法有多种,这里采用最简单的方式,将ORBStudio_7.7.7.jar文件拷贝到eclipse的plugins目录。
接下来就是配置ORBStudio_7.7.7插件,配置内容如下:
在eclipse的菜单栏中,选【windows】->[preferences]->[ORB
Studio]->[IDL Compiler],选中JacORB。然后展开[IDL
Compiler],设置JacORB的IDL Command和Command
Options。
默认参数为
IDL Command:java
Command Options:-cp "/Tools/JacORB/lib/idl.jar;/Tools/JacORB/lib/logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F%
这里有两中配置是,
第一种是在默认参数的基础上将Command
Options的内容改为正确的路径即可
Command
Options:-cp "E:/JacORB/jacorb-3.4/lib/idl.jar;E:/JacORB/jacorb-3.4/lib/logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F%
第二种如下
IDL
Command:E:\JacORB\jacorb-3.4\bin\idl.bat
Command
Options:-d %D% %F%
保存即配置完毕
三、Eclipse下Jacorb开发步骤
1)新建Java项目
2)在项目上右键New--->Other--->CORBA Wizard--->IDL files--->Simple
IDL,建立一个IDL文件,如demo.idl
3)编译IDL文件,右键点击demo.idl文件,选[ORB
Menu]->[Compile],会生成demo.hello包,里面包含7个自动生成的文件
4)编写服务端,在项目上右键New--->Other--->CORBA
Wizard--->Server--->Active object map,然后数据Package名即可(Package名和Server Class名都可以自定义)
这里也可以手动创建服务端
5)编写客户端,在项目上右键New--->Other--->CORBA Wizard--->Client--->....。当然也可以手动创建
四、服务端和客户端关键代码
1)服务端
服务端主要包括一个对之前在IDL文件中定义的借口的实现类(XXXServiceImpl.java),和一个Server类
XXXServiceImpl.java的实现与本地编程无异。
Server类用于关联XXXServiceImpl.java和JacORB提供的机制,具体的实现又有两种,一种是使用NameService,另一种是采用IOR文件来传递Object信息。这里介绍前者,后者没有技术难度。(后者即使在服务端将服务对象的信息输出到文件,客户端读取这个文件,从中获得服务对象的信息,从而实访问)
//首先,初始化ORB,注意参数192.168.1.101::8893分别是NameService的IP地址和端口
Properties props = System.getProperties();
//props.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB");
//props.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton");
props.put("org.omg.CORBA.ORBInitRef.NameService", "corbaloc::192.168.1.101::8893/NameService");
orb = org.omg.CORBA.ORB.init((String[])args, props);
//下面这种参数连接到的是Java(Sun)所提供的orbd名字服务器,不是JacORB所提供的NameService,注意
//props.put("org.omg.CORBA.ORBInitialHost", "192.168.1.101");
//props.put("org.omg.CORBA.ORBInitialPort", "8893");
//接下来初始化POA
POA poa =
POAHelper.narrow( orb.resolve_initial_references( "RootPOA" ));
poa.the_POAManager().activate();
// 创建服务对象
GoodDayServerImpl goodDayImpl = new GoodDayServerImpl( );
// 创建服务对象的Corba引用
org.omg.CORBA.Object objGoodDay = poa.servant_to_reference(goodDayImpl);
GoodDay gref = GoodDayHelper.narrow(objGoodDay);
// 获得NameService的Context
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(objRef);
//服务对象的名称
String goodDayName = "GoodDayService";
//将服务对象引用和服务对象名称进行绑定
NameComponent path[] = nc.to_name(goodDayName);
nc.rebind(path, gref);
//启动服务
orb.run();
2)客户端关键代码
// 创建和初始化ORB,同样192.168.1.101::8893分别为NameService的IP地址和端口
Properties props = new Properties();
//props.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB");
//props.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton");
props.put("org.omg.CORBA.ORBInitRef.NameService", "corbaloc::192.168.1.101::8893/NameService");
ORB orb = ORB.init(args, props);
// 获得代表命名服务的Context
org.omg.CORBA.Object objRef = orb
.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// 获得名为"GoodDayService"的GoodDay对象的远程引用
String targetName = "GoodDayService";
remoteTarget = GoodDayHelper.narrow(ncRef
.resolve_str(targetName));
接下来就可以通过remoteTarget引用像在本地一样使用GoodDay所提供的方法了
一、安装JacORB
首先下载Jacorb发行包,到JacORB官网下载jacORB发行版本,建议选择编译好的(源码版需要使用ant编译),本文作者选择的是 jacorb-3.4-binary.zip。
接着把jacorb添加到系统环境变量,解压文件包到某一路径,比如 E:\JacORB\jacorb-3.4, 然后将E:\JacORB\jacorb-3.4\bin添加到path环境变量
接下来配置jacorb名字服务,将E:\JacORB\jacorb-3.4\etc路径下jacorb_properties.template文件更名为jacorb.properties,然后用文本编辑器打开找到ORBInitRef.NameService=file:/c:/NS_Ref
,去掉其前面的注释符并把其它的选择注释掉。这一步是设置ior文件存放路径,里面有服务的ip地址及端口信息等,用dior
–f c:/NS_Ref命令可以解析这个ior文件以得到ip地址及端口号。
至此,jacorb安装完毕,打开命令行窗口,输入ns,即可启动名字服务NameService
NameService的启动参数如下:
ns [-Djacorb.naming.ior filename=<filename>] [-DOAPort=port] [-Djacorb.naming.time out=<timeout>]
一般会指定端口,即第二个参数
注意:如果NameService所在机器有多个IP地址,即多宿主机器,那么在没有指定所用IP地址的情况下,系统会自行选择,这时可以通过dior –f c:/NS_Ref来查看NameService所用IP地址。
二、安装Eclipse的JacORB开发插件
首先在下JacORB的Eclipse插件ORBStudio_7.7.7.jar并安装。
安装Eclipse的方法有多种,这里采用最简单的方式,将ORBStudio_7.7.7.jar文件拷贝到eclipse的plugins目录。
接下来就是配置ORBStudio_7.7.7插件,配置内容如下:
在eclipse的菜单栏中,选【windows】->[preferences]->[ORB
Studio]->[IDL Compiler],选中JacORB。然后展开[IDL
Compiler],设置JacORB的IDL Command和Command
Options。
默认参数为
IDL Command:java
Command Options:-cp "/Tools/JacORB/lib/idl.jar;/Tools/JacORB/lib/logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F%
这里有两中配置是,
第一种是在默认参数的基础上将Command
Options的内容改为正确的路径即可
Command
Options:-cp "E:/JacORB/jacorb-3.4/lib/idl.jar;E:/JacORB/jacorb-3.4/lib/logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F%
第二种如下
IDL
Command:E:\JacORB\jacorb-3.4\bin\idl.bat
Command
Options:-d %D% %F%
保存即配置完毕
三、Eclipse下Jacorb开发步骤
1)新建Java项目
2)在项目上右键New--->Other--->CORBA Wizard--->IDL files--->Simple
IDL,建立一个IDL文件,如demo.idl
3)编译IDL文件,右键点击demo.idl文件,选[ORB
Menu]->[Compile],会生成demo.hello包,里面包含7个自动生成的文件
4)编写服务端,在项目上右键New--->Other--->CORBA
Wizard--->Server--->Active object map,然后数据Package名即可(Package名和Server Class名都可以自定义)
这里也可以手动创建服务端
5)编写客户端,在项目上右键New--->Other--->CORBA Wizard--->Client--->....。当然也可以手动创建
四、服务端和客户端关键代码
1)服务端
服务端主要包括一个对之前在IDL文件中定义的借口的实现类(XXXServiceImpl.java),和一个Server类
XXXServiceImpl.java的实现与本地编程无异。
Server类用于关联XXXServiceImpl.java和JacORB提供的机制,具体的实现又有两种,一种是使用NameService,另一种是采用IOR文件来传递Object信息。这里介绍前者,后者没有技术难度。(后者即使在服务端将服务对象的信息输出到文件,客户端读取这个文件,从中获得服务对象的信息,从而实访问)
//首先,初始化ORB,注意参数192.168.1.101::8893分别是NameService的IP地址和端口
Properties props = System.getProperties();
//props.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB");
//props.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton");
props.put("org.omg.CORBA.ORBInitRef.NameService", "corbaloc::192.168.1.101::8893/NameService");
orb = org.omg.CORBA.ORB.init((String[])args, props);
//下面这种参数连接到的是Java(Sun)所提供的orbd名字服务器,不是JacORB所提供的NameService,注意
//props.put("org.omg.CORBA.ORBInitialHost", "192.168.1.101");
//props.put("org.omg.CORBA.ORBInitialPort", "8893");
//接下来初始化POA
POA poa =
POAHelper.narrow( orb.resolve_initial_references( "RootPOA" ));
poa.the_POAManager().activate();
// 创建服务对象
GoodDayServerImpl goodDayImpl = new GoodDayServerImpl( );
// 创建服务对象的Corba引用
org.omg.CORBA.Object objGoodDay = poa.servant_to_reference(goodDayImpl);
GoodDay gref = GoodDayHelper.narrow(objGoodDay);
// 获得NameService的Context
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(objRef);
//服务对象的名称
String goodDayName = "GoodDayService";
//将服务对象引用和服务对象名称进行绑定
NameComponent path[] = nc.to_name(goodDayName);
nc.rebind(path, gref);
//启动服务
orb.run();
2)客户端关键代码
// 创建和初始化ORB,同样192.168.1.101::8893分别为NameService的IP地址和端口
Properties props = new Properties();
//props.setProperty("org.omg.CORBA.ORBClass", "org.jacorb.orb.ORB");
//props.setProperty("org.omg.CORBA.ORBSingletonClass", "org.jacorb.orb.ORBSingleton");
props.put("org.omg.CORBA.ORBInitRef.NameService", "corbaloc::192.168.1.101::8893/NameService");
ORB orb = ORB.init(args, props);
// 获得代表命名服务的Context
org.omg.CORBA.Object objRef = orb
.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// 获得名为"GoodDayService"的GoodDay对象的远程引用
String targetName = "GoodDayService";
remoteTarget = GoodDayHelper.narrow(ncRef
.resolve_str(targetName));
接下来就可以通过remoteTarget引用像在本地一样使用GoodDay所提供的方法了
相关文章推荐
- Eclipse下搭建Hadoop开发环境,并运行第一个实例
- Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】
- Hadoop2.x实战:Eclipse本地开发环境搭建与本地运行wordcount实例
- Spark+ECLIPSE+JAVA+MAVEN windows开发环境搭建及入门实例【附详细代码】
- hadoop2.7.3 Windows eclipse开发环境搭建及WordCount实例运行
- Eclipse下搭建Hadoop开发环境,并运行第一个实例
- 搭建Eclipse+MyEclipse开发环境
- Eclipse3.2中 Java Web 开发环境的搭建之LOMBOZ+TOMCAT 安装
- 用Eclipse3.1 + Myeclipse4.0 + Tomcat5.0 + j2sdk1.5 搭建J2EE开发环境
- [原创]Eclipse3.0.1+Lomboz3.0.1+EMF2.0.1+Tomcat 5.0.30 JSP开发环境搭建实战记录
- 搭建Windows下基于Eclipse的PHP开发环境
- 用Eclipse3.2 + Myeclipse5.0GA + Tomcat5.5.17 + j2sdk1.5 搭建J2EE开发环境
- 搭建Eclipse+MyEclipse开发环境
- 使用EclipseME+Eclipse3.0+J2METoolKit2.2 搭建 J2ME 开发环境
- 用Eclipse3.2 + Myeclipse5.0GA + Tomcat5.5.17 + j2sdk1.5 搭建J2EE开发环境
- 用Eclipse3.1 + Myeclipse4.0 + Tomcat5.0 + j2sdk1.5 搭建J2EE开发环境
- 用Tomcat插件在Eclipse上搭建可跟踪调试的J2EE WEB开发环境
- Eclipse平台入门:开发环境与实例
- Eclipse平台入门之二:开发环境与实例
- 用Eclipse、Tomcat、Lomboz搭建jsp开发环境