jacorb总结
来源:互联网 发布:apache下载64位安装版 编辑:程序博客网 时间:2024/06/01 21:15
一、使用到的软件
JacORB 2.3
Eclipse SDK 3.1
JDK5 1.4
ORB Studio 7.7.7
使用的系统为Windows XP SP2。版本号可能不一定要完全按照上面,但是如果你配置成功不了,不妨就按上面来弄。
二、为eclipse安装corba开发插件。
ORB Studio是开发corba的插件,用于eclipse。
安装其实很简单,把ORBStudio_7.7.7.jar文件拷贝到eclipse的plugins目录。
三、安装JacORB
解压到磁盘 例如:c:\JacORB,在c:\jacORB下新建个文件夹classes,为了在调试时可以找到有关包,需要在系统环境变量中设置
JACORB_HOME=C:\JacORB
path=%JACORB_HOME%\bin
classpath=.;%JACORB_HOME%\lib\idl.jar;%JACORB_HOME%\lib\jacorb.jar;%JACORB_HOME%\lib\logkit-1.2.jar;%JACORB_HOME%\lib\avalon-framework-4.1.5.jar;%JACORB_HOME%\classes
把c:\JacORB\etc中的jacorb_properties.template复制到c:\JacORB\classes下,并更名为jacorb.properties 。编辑jacorb.properties文件,设置ORBInitRef.NameService=file:/c:/NS_Ref 这个文件是启动服务时生成的ior文件,里面有服务的ip地址及端口信息等,用dior –f c:/NS_Ref命令可以解析这个ior文件以得到ip地址及端口号。
在dos窗口下 输入 ns启动服务
※这里有个问题,下载下来的latest版本的2.3.0的jacORB-bin\bin 下面的jaco和jaco.bat后面都带一个后缀".tpl",最后终于知道这个tpl是template!删除所有.tpl后缀!再把jaco.bat中的JAVA_CMD@替换成JAVA
四、在eclipse里面配置ORB Studio和JacORB。
在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%
第二个参数要设置成正确的路径。
-cp "C:\jacORB\lib\idl.jar;D:\JavaTools\JacORB-2.3.0\lib\logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F%
五、corba程序示例一个简单的例子hello
以下操作在eclipse中进行,创建一个java工程,给新项目添加Libraries,右键Properites--->Libraries--->Add Library--->User Library
--->User Libraries...--->New...--->Add JARs...
找到OpenOrb\OpenORB\lib目录下openorb_orb-1.4.0.jar,openorb_orb_tools-1.4.0.jar
OpenOrb\OpenORB\lib\endorsed目录下openorb_orb_omg-1.4.0.jar
OpenOrb\tools\lib目录下所有.jar文件。
1、src上右键New--->Other--->CORBA Wizard--->IDL files--->Simple IDL,建立一个IDL文件,如demo.idl
module demo
{
module hello {
interface GoodDay {
string hello_latin1();
wstring hello_chinese();
};
};
};
2、编译idl文件,有三种方法:
(一)右键点击demo.idl文件,选[ORB Menu]->[Compile],会生成demo.hello包,里面包含7个自动生成的文件
_GoodDayStub.java
GoodDay.java
GoodDayHelper.java
GoodDayHolder.java
GoodDayOperations.java
GoodDayPOA.java
GoodDayPOATie.java
(二)使用ant工具包,
下载apache-ant-1.7.0-bin.tar
解压到磁盘 例如:C:\ apache-ant-1.7.0
设置环境变量: ANT_HOME=C:\ apache-ant-1.7.0
path=%ANT_HOME%\bin
然后在命令行下找到工程的idl文件的目录,在目录里必须有构建文件build.xml才可以编译,其写法见附录。
在命令行输入ant命令,即可编译,同样可以生成上面的7个文件,再将其导入到eclipse工程里。
(三)用jacorb的idl命令:
在命令行下进入jacorb的bin目录,输入命令:idl c:\demo.idl,这时就会在bin目录中产生以上7个java文件,导入到eclipse中即可
3、实现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
ns
这时ns把服务的信息写在了c:\NS_Ref文件里
运行Server和Client
进入代码目录demo的上级目录(例如:cd E:\workspace\CorbaTest\bin),运行下面的代码
start jaco demo.hello.Server
start jaco demo.hello.Client
同样,如果后面没有参数,则程序会自动去c:\NS_Ref文件里查找服务信息,然后再运行
(二)远程调用:
修改代码:
将Server中的
NamingContextExt nc = NamingContextExtHelper.narrow(orb
.resolve_initial_references("NameService"));
nc.bind(nc.to_name("hello.goodDay"), obj); // 绑定对象
改为:
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);
nc.rebind(nc.to_name("hello.goodDay"), obj); // 绑定对象
再将Client中的
NamingContextExt nc = NamingContextExtHelper.narrow(orb
.resolve_initial_references("NameService"));
改为:
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);
启动ns
在命令行输入dior –f c:\NS_Ref,来解析ior文件,看到ip地址和端口号,将这两个信息写入到java程序中:
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");
如果写成读取配置文件的形式更方便。
然后在命令行下运行
start jaco demo.hello.Server
start jaco demo.hello.Client
即可
附:build.xml文件详解
<?xml version="1.0" encoding="GB2312" ?>
<!--
文档结构为:
<project>
<property/> 全局变量的定义
<property/>...
<target name="1"> 任务组(tasks)
<javac></javac> 一项javac编译任务
...
<oneTask></ontTask> 一项其它任务
</target>
<target name="2">
<javac></javac>
...
<oneTask></ontTask>
</target>
</project>
project代表一个项目,
default:运行到名称为"dist"的target(任务组)
basedir:基准路径。
-->
本例子的build.xml代码如下:
<?xml version="1.0"?>
<!DOCTYPE project [ <!ENTITY common SYSTEM "file:../../etc/common.xml"> ]>
<project name="demo" default="idl" basedir="../..">
&common;
<!-- ==================================================== -->
<!-- Demo build file -->
<!-- ==================================================== -->
<target name="helloinit" depends="init">
<property name="name" value="hello"/>
<property name="dirs.base" value="${basedir}"/>
<property name="classdir" value="${dirs.base}/classes"/>
<property name="lib" value="${dirs.base}/lib"/>
<property name="dest" value="${dirs.base}/demo/${name}/generated"/>
<property name="include" value="${dirs.base}/idl/omg"/>
</target>
<target name="idl" depends="helloinit,load-taskdef">
<mkdir dir="${dest}" />
<jacidl srcdir="demo/${name}"
destdir="${dest}"
includepath="${include}"
includes="*.idl"/>
</target>
</project>
JacORB 2.3
Eclipse SDK 3.1
JDK5 1.4
ORB Studio 7.7.7
使用的系统为Windows XP SP2。版本号可能不一定要完全按照上面,但是如果你配置成功不了,不妨就按上面来弄。
二、为eclipse安装corba开发插件。
ORB Studio是开发corba的插件,用于eclipse。
安装其实很简单,把ORBStudio_7.7.7.jar文件拷贝到eclipse的plugins目录。
三、安装JacORB
解压到磁盘 例如:c:\JacORB,在c:\jacORB下新建个文件夹classes,为了在调试时可以找到有关包,需要在系统环境变量中设置
JACORB_HOME=C:\JacORB
path=%JACORB_HOME%\bin
classpath=.;%JACORB_HOME%\lib\idl.jar;%JACORB_HOME%\lib\jacorb.jar;%JACORB_HOME%\lib\logkit-1.2.jar;%JACORB_HOME%\lib\avalon-framework-4.1.5.jar;%JACORB_HOME%\classes
把c:\JacORB\etc中的jacorb_properties.template复制到c:\JacORB\classes下,并更名为jacorb.properties 。编辑jacorb.properties文件,设置ORBInitRef.NameService=file:/c:/NS_Ref 这个文件是启动服务时生成的ior文件,里面有服务的ip地址及端口信息等,用dior –f c:/NS_Ref命令可以解析这个ior文件以得到ip地址及端口号。
在dos窗口下 输入 ns启动服务
※这里有个问题,下载下来的latest版本的2.3.0的jacORB-bin\bin 下面的jaco和jaco.bat后面都带一个后缀".tpl",最后终于知道这个tpl是template!删除所有.tpl后缀!再把jaco.bat中的JAVA_CMD@替换成JAVA
四、在eclipse里面配置ORB Studio和JacORB。
在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%
第二个参数要设置成正确的路径。
-cp "C:\jacORB\lib\idl.jar;D:\JavaTools\JacORB-2.3.0\lib\logkit-1.2.jar" org.jacorb.idl.parser -d %D% %F%
五、corba程序示例一个简单的例子hello
以下操作在eclipse中进行,创建一个java工程,给新项目添加Libraries,右键Properites--->Libraries--->Add Library--->User Library
--->User Libraries...--->New...--->Add JARs...
找到OpenOrb\OpenORB\lib目录下openorb_orb-1.4.0.jar,openorb_orb_tools-1.4.0.jar
OpenOrb\OpenORB\lib\endorsed目录下openorb_orb_omg-1.4.0.jar
OpenOrb\tools\lib目录下所有.jar文件。
1、src上右键New--->Other--->CORBA Wizard--->IDL files--->Simple IDL,建立一个IDL文件,如demo.idl
module demo
{
module hello {
interface GoodDay {
string hello_latin1();
wstring hello_chinese();
};
};
};
2、编译idl文件,有三种方法:
(一)右键点击demo.idl文件,选[ORB Menu]->[Compile],会生成demo.hello包,里面包含7个自动生成的文件
_GoodDayStub.java
GoodDay.java
GoodDayHelper.java
GoodDayHolder.java
GoodDayOperations.java
GoodDayPOA.java
GoodDayPOATie.java
(二)使用ant工具包,
下载apache-ant-1.7.0-bin.tar
解压到磁盘 例如:C:\ apache-ant-1.7.0
设置环境变量: ANT_HOME=C:\ apache-ant-1.7.0
path=%ANT_HOME%\bin
然后在命令行下找到工程的idl文件的目录,在目录里必须有构建文件build.xml才可以编译,其写法见附录。
在命令行输入ant命令,即可编译,同样可以生成上面的7个文件,再将其导入到eclipse工程里。
(三)用jacorb的idl命令:
在命令行下进入jacorb的bin目录,输入命令:idl c:\demo.idl,这时就会在bin目录中产生以上7个java文件,导入到eclipse中即可
3、实现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
ns
这时ns把服务的信息写在了c:\NS_Ref文件里
运行Server和Client
进入代码目录demo的上级目录(例如:cd E:\workspace\CorbaTest\bin),运行下面的代码
start jaco demo.hello.Server
start jaco demo.hello.Client
同样,如果后面没有参数,则程序会自动去c:\NS_Ref文件里查找服务信息,然后再运行
(二)远程调用:
修改代码:
将Server中的
NamingContextExt nc = NamingContextExtHelper.narrow(orb
.resolve_initial_references("NameService"));
nc.bind(nc.to_name("hello.goodDay"), obj); // 绑定对象
改为:
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);
nc.rebind(nc.to_name("hello.goodDay"), obj); // 绑定对象
再将Client中的
NamingContextExt nc = NamingContextExtHelper.narrow(orb
.resolve_initial_references("NameService"));
改为:
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");
NamingContextExt nc = NamingContextExtHelper.narrow(ncobj);
启动ns
在命令行输入dior –f c:\NS_Ref,来解析ior文件,看到ip地址和端口号,将这两个信息写入到java程序中:
org.omg.CORBA.Object ncobj = orb.string_to_object("corbaloc::1.2@192.168.1.108:2285/NameService");
如果写成读取配置文件的形式更方便。
然后在命令行下运行
start jaco demo.hello.Server
start jaco demo.hello.Client
即可
附:build.xml文件详解
<?xml version="1.0" encoding="GB2312" ?>
<!--
文档结构为:
<project>
<property/> 全局变量的定义
<property/>...
<target name="1"> 任务组(tasks)
<javac></javac> 一项javac编译任务
...
<oneTask></ontTask> 一项其它任务
</target>
<target name="2">
<javac></javac>
...
<oneTask></ontTask>
</target>
</project>
project代表一个项目,
default:运行到名称为"dist"的target(任务组)
basedir:基准路径。
-->
本例子的build.xml代码如下:
<?xml version="1.0"?>
<!DOCTYPE project [ <!ENTITY common SYSTEM "file:../../etc/common.xml"> ]>
<project name="demo" default="idl" basedir="../..">
&common;
<!-- ==================================================== -->
<!-- Demo build file -->
<!-- ==================================================== -->
<target name="helloinit" depends="init">
<property name="name" value="hello"/>
<property name="dirs.base" value="${basedir}"/>
<property name="classdir" value="${dirs.base}/classes"/>
<property name="lib" value="${dirs.base}/lib"/>
<property name="dest" value="${dirs.base}/demo/${name}/generated"/>
<property name="include" value="${dirs.base}/idl/omg"/>
</target>
<target name="idl" depends="helloinit,load-taskdef">
<mkdir dir="${dest}" />
<jacidl srcdir="demo/${name}"
destdir="${dest}"
includepath="${include}"
includes="*.idl"/>
</target>
</project>
- jacorb总结
- jacORB配置
- JacORB Startup
- JacORB 配置
- jacorb 学习
- JacORB 应用开发
- Jacorb 安装与设置
- JacORB编程(1)
- JacORB Naming Service
- jacorb的配置问题
- JacORB的简单配置
- Jacorb的配置问题
- jacorb安装和配置
- JacORB 配置以及开发
- JacORB配置步骤
- 安装 JacORB 3.2
- JaCORB安装指南
- JacORB常见配置解析
- Linux 系统常用命令
- 我的几个提升工作效率的小软件(持续更新中...)
- TeX-交叉引用命令
- svn中的revert和update
- final finally finalize的区别
- jacorb总结
- Sysfs文件系统与Linux设备模型
- 游戏 音乐 美术资源 收集贴
- 关于 CGI FASTCGI PHP-FPM这些东西
- 判断整除并求和
- Asp.net设置默认按钮的方法总结
- JS触发a节点的点击事件
- spring+hibernate+struts2 整合开发中的一个分面查询案例
- 求100以内的素数的和