Java CORBA 编程技术

wq612732

贡献于2013-07-04

字数:0 关键词: Java开发 Java

Java CORBA 编程技术 Wangxc 第 1 页 7/10/2010 Java CORBA 编程技术 EMAIL:ah_wangxiaochuan@sina.com 一、关于 CORBA............................................................................................................1 二、CORBA 的特点及体系结构 ....................................................................................1 三、关于 IDL...................................................................................................................2 四、CORBA 例子............................................................................................................2 五、接口文件 CorbaDemo.idl .........................................................................................2 六、服务器代码 CorbaDemoServer.java.........................................................................2 七、客户端代码 CorbaDemoClient.java.........................................................................4 八、由 IDL 生产 Java 文件, idl.bat...............................................................................5 九、启动服务器的批处理 ts.bat .....................................................................................6 十、启动客户端的批处理 tc.bat.....................................................................................6 十一、运行程序方法 .......................................................................................................6 一、关于 CORBA CORBA(Common Object Request Broker Architecture,公用对象请求代理体系结构)是 一种规范,是由 OMG(Object Management Group)协会开发的标准分布式对象体系结构, 它定义了分布式对象如何实现互操作。 CORBA同时做到了编程语言和运行平台的独立性,只要使用 OMG组织的IDL(Interface Definition Language,接口定义语言),任何一个客户机都有能力调用任何一台服务器上的方 法,并且客户机和服务器可以使用不同的语言编写,这样一来,就具有了巨大的灵活性。 二、CORBA 的特点及体系结构 CORBA 对象主要有下面的特点: l CORBA 对象可以在网络上位置定位。 l CORBA 对象可与其它平台上面的对象实现互操作。 l CORBA 对象可以使用任何语言编写,只要存在从 OMG IDL 到该语言的映射(当 前包括 Java,C++,C,SmallTalk,COBOL 和 Ada)。 Client ● Stubs ORB Server ● Skeletons ORB IIOP Object Reference servant Java CORBA 编程技术 Wangxc 第 2 页 7/10/2010 三、关于 IDL 接口描述语言( InterfaceDescriptionLanguage)编写的对象接口,使得与语言无关的独 立性成为可能。 IDL 使得所有 CORBA 对象以一种方式被描述,仅仅需要一个由本地语言 (C/C++、CORBA、Java)到 IDL 的“桥梁”。 CORBA 对象的互通信要以对象请求解析器 (Object Request Broker)为中介,这种互通可以在多种流行通信协议之上(如 TCP/IP 或是 IPX/SPX)实现。在 TCP/IP 上,来自于不同开发商的 ORB 用 Internet Inter-ORB Protocol 协 议(IIOP 对象请求代理间协议)进行通讯,这是 CORBA2.0 标准(最新的版本)的一部分。 四、CORBA 例子 这是一个简单的例子,它实现了客户端程序读取服务器端的时间功能。 五、接口文件 CorbaDemo.idl //CorbaDemo.idl module TheDateApp { interface TheDate{ string getTheDate(); }; }; 六、服务器代码 CorbaDemoServer.java /* * @(#)CorbaDemoServer.java */ import TheDateApp.*; //Demo 为当前运行目录的子目录 import org.omg.CosNaming.*; import org.omg.CosNaming.NamingContextPackage.*; import org.omg.CORBA.*; import java.util.Date; import java.util.Properties; class TheDateServant extends _TheDateImplBase { //实现 IDL 接口中声明的操作 public String getTheDate() { Java CORBA 编程技术 Wangxc 第 3 页 7/10/2010 return new Date() + "\n"; } } public class CorbaDemoServer { public static void main(String args[]) { try { //创建 Properties 对象 Properties props = new Properties(); //设定命名服务的工作端口为 1050 props.put("org.omg.CORBA.ORBInitialPort", "1050"); //假设命名服务与客户机程序运行在同一台计算机上。 //如果命名服务与客户机程序运行在网络中不同计算机上,使用下面的代码。 //IP 地址根据命名服务所在的计算机做相应的更改 //props.put("org.omg.CORBA.ORBInitialHost","98.53.72.169"); props.put("org.omg.CORBA.ORBInitialHost", "localhost"); //创建并初始化 ORB ORB orb = ORB.init(args, props); //创建一个 servant TheDateServant theDateRef = new TheDateServant(); //连接 servant 对象到 ORB,以便 ORB 能够识别发生在其上的调用, //并将调用传递给相应的 servant orb.connect(theDateRef); //得到根命名上下文 org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); //得到一个用于访问命名服务和登记服务器的命名上下文对象 NamingContext ncRef = NamingContextHelper.narrow(objRef); //得到一个 NameComponent 类型的对象, //nc 的 id 域为 TheDate,kind 域为空字符串 NameComponent nc = new NameComponent("TheDate", ""); NameComponent path[] = { nc}; //在命名上下文对象中捆绑对象引用 ncRef.rebind(path, theDateRef); System.out.println("\nServer is running ..."); System.out.println("\nNote: Press Ctrl-c to terminate"); //等待客户机的调用 Java CORBA 编程技术 Wangxc 第 4 页 7/10/2010 java.lang.Object sync = new java.lang.Object(); synchronized (sync) { sync.wait(); } } catch (Exception e) { System.err.println("ERROR: " + e); e.printStackTrace(System.out); } } } 七、客户端代码 CorbaDemoClient.java /* * @(#)CorbaDemoClient.java */ import TheDateApp.*; //Demo 为当前运行目录的子目录 import org.omg.CosNaming.*; import org.omg.CORBA.*; import java.util.Properties; public class CorbaDemoClient { public static void main(String args[]) { try { //创建 Properties 对象 Properties props = new Properties(); //设定命名服务的工作端口为 1050 props.put("org.omg.CORBA.ORBInitialPort", "1050"); //假设命名服务与客户机程序运行在同一台计算机上。 //如果命名服务与客户机程序运行在网络中不同计算机上,使用下面的代码。 //IP 地址根据命名服务所在的计算机做相应的更改 //props.put("org.omg.CORBA.ORBInitialHost","98.53.72.169"); props.put("org.omg.CORBA.ORBInitialHost", "localhost"); //创建并初始化 ORB ORB orb = ORB.init(args, props); // 得到根命名上下文 org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); //得到一个用于访问命名服务和登记服务器的命名上下文对象 NamingContext ncRef = NamingContextHelper.narrow(objRef); Java CORBA 编程技术 Wangxc 第 5 页 7/10/2010 //得到一个 NameComponent 类型的对象, //nc 的 id 域为 TheDate,kind 域为空字符串 NameComponent nc = new NameComponent("TheDate", ""); NameComponent path[] = { nc}; //解析命名中的对象引用 TheDate theDateRef = TheDateHelper.narrow(ncRef.resolve(path)); //调用服务器的 TheDate 对象并输出其结果 String theDate = theDateRef.getTheDate(); System.out.println(theDate); //按 Ctrl-c 关闭客户机的 DOS 窗口 int ch1 = '0'; System.out.println("Press Ctrl-c to terminate"); while ( (ch1 = System.in.read()) != -1) ; } catch (Exception e) { System.out.println("ERROR : " + e); e.printStackTrace(System.out); } } } 八、由 IDL 生产 Java 文件,idl.bat echo off rem 文件名:idl.bat echo --------- 设置环境变量 --------- set JAVA_HOME=C:\jdk1.3.1_01\bin set PRJ_PATH=d:\corba set SRC_PATH=%PRJ_PATH%\src set CLASS_PATH=%PRJ_PATH%\classes set PKG=src set IDL_FILE=idl\CorbaDemo.idl echo 将 CorbaDemo.idl 文件转换为相应的 java 文件 ...... %JAVA_HOME%\idlj -f all -td %PKG% %IDL_FILE% echo 文件转换完毕 ...... Java CORBA 编程技术 Wangxc 第 6 页 7/10/2010 echo 编译所有的 java 文件 ...... %JAVA_HOME%\javac -d %CLASS_PATH% %SRC_PATH%\*.java %SRC_PATH%\TheDateApp\*.java 九、启动服务器的批处理 ts.bat echo --------- 设置环境变量 --------- set JAVA_HOME=C:\jdk1.3.1_01\bin set PRJ_PATH=d:\corba set SRC_PATH=d:\corba\src set CLASS_PATH=d:\corba\classes;d:\corba\classes\TheDateApp echo 在端口 1050 启动瞬时命名服务器,产生一个新的进程 start %JAVA_HOME%\tnameserv -ORBInitialPort 1050 echo 启动服务器,作为另一个新的进程 start %JAVA_HOME%\java -classpath %CLASS_PATH% CorbaDemoServer -ORBInitialPort 1050 十、启动客户端的批处理 tc.bat echo --------- 设置环境变量 --------- set JAVA_HOME=C:\jdk1.3.1_01\bin set PRJ_PATH=d:\corba set SRC_PATH=d:\corba\src set CLASS_PATH=d:\corba\classes;d:\corba\classes\TheDateApp echo 启动客户机,作为另一个新的进程 %JAVA_HOME%\java -classpath %CLASS_PATH% CorbaDemoClient -ORBInitialPort 1050 十一、运行程序方法 首先运行 ts.bat 以启动服务器,然后运行 tc.bat 即可看到程序的运行结果。 王小川 2005 年 9 月 2 日星期五

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 7 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档

相关文档