orbas入门手册 Last Modified: 2002.12.25 本orbas入门手册包含如下的内容: 1、如何获得orbas; 2、编译orbas指南; 3、使用orbas编写第一个hello分布式程序; 4、其他。 1、如何获得orbas orbas可以通过两种方式获得,通过浏览器下载或者通过cvs下载。如果希望通过浏览 器获得orbas,请访问http://sourceforge.net/projects/orbas。通过浏览器下载的版本 是正式发布的比较稳定或需要公共测试的版本;您可以选择下载打包的源代码,或直接下 载编译好了的orbas的jar包。 如果您需要获得orbas最新的版本,强烈建议你通过cvs下载。这种方式下需要您安装 cvs客户端,并且您只能得到orbas的源代码版本,还需要自己编译orbas。如果您没有 安装cvs的客户端,windows系统请访问http://sourceforge.net/projects/wincvs;unix 或linux用户请查找系统光盘或访问自己的OS提供商的主页;对于一般的OS来说,cvs都有 对应的客户端下载。 如果您安装了图形界面方式的cvs(典型的有WinCvs),请设置CVSROOT为 :pserver:anonymous@cvs.orbas.sourceforge.net:/cvsroot/orbas,注意最前面的冒号 是不能省略的。在界面中选择checkout操作(具体的操作需要参考该软件的使用手册), 需要下载的模块名是orbas,当需要输入口令时,直接敲回车即可。 如果您使用命令行方式的cvs下载(比如在unix或linux系统下),首先要确保cvs的 执行文件在path环境变量中;如果在windows系统下,您需要如下的步骤: 首先打开一个命令行窗口,改变目录到您需要放置orbas源代码的目录; 然后输入: set CVSROOT=-d:pserver:anonymous@cvs.orbas.sourceforge.net:/cvsroot/orbas cvs login 此时会提示输入口令,直接回车; cvs co orbas 或者cvs checkout orbas 当命令行中停止输出并且没有出错提示信息时,表示orbas的源代码下载完毕。 如果您在unix或linux系统下, 首先改变目录到您需要放置orbas源代码的目录; 设置CVSROOT环境变量。如果您使用的是csh或类似的shell,请输入: set CVSROOT -d:pserver:anonymous@cvs.orbas.sourceforge.net:/cvsroot/orbas 如果您使用的是linux的bash或类似的shell,请输入: export CVSROOT=-d:pserver:anonymous@cvs.orbas.sourceforge.net:/cvsroot/orbas 然后输入: cvs login 此时会提示输入口令,直接回车; cvs co orbas 或者cvs checkout orbas 当命令行中停止输出并且没有出错提示信息时,表示orbas的源代码下载完毕。 2、如何编译orbas 在编译orbas之前,检查您的系统,看看您是否安装了JDK1.2以上的版本。检查版本 的方法是执行java --version命令,看看输出的版本信息。 编译orbas的过程根据操作系统的不同而不同。如果是在windows下,您设置环境变 量JAVA_HOME的值,将它指向您机器上的JDK的安装目录,然后执行build.bat即可。如果 您安装了JDK1.4的版本,在编译的过程中可能会有一些警告信息,但不影响orbas的正确 编译。产生这些警告信息的原因是orbas使用了当前最新的OMG的IDL to java的映射规范 ,而JDK使用的是较旧的映射规范,因此发生了冲突。这种冲突在其他的ORB产品上也可 能发生(依据该ORB使用的IDL to java映射规范的版本)。 如果您是在类unix或linux系统下,您首先要改变当前目录到orbas的源代码目录下 ,这时您会注意到该目录下有一个build.sh文件。首先将该文件的属性变成可以执行: chmod +x ./build.sh 然后启动任何一种您擅长的文本编辑器,编辑build.sh文件,在其中添加一行,使得环 境变量JAVA_HOME指向您系统中安装的JDK的目录;您也可以不修改build.sh文件,直接 在系统的环境变量中添加JAVA_HOME,使得它指向您的系统的JDK的安装目录。然后直接 运行build.sh,您可能需要输入: ./build.sh 等待输出停止并且没有出错提示信息时,orbas编译完毕。 3、使用orbas编写第一个hello分布式程序 在编写orbas的第一个分布式应用之前,您要确保JAVA_HOME/bin目录在path变量中 ,使得您可以直接使用JDK的工具集。 下面就是使用orbas编写一个hello的分布式程序。 分布式的hello与您以前学习编程语言的hello程序都不同,它是一个分布式的hello 程序,它有一个客户端和一个服务器端。客户端将一个字符串传送到服务器端,服务器 端将显示这个字符串,然后服务器端自己生成一个字符串,将它传送回客户端,最后客 户端显示这个字符串。 首先您需要一个目录放置你的程序,建立一个demo目录,然后在demo目录中建立一 个名叫hello的目录。 首先为您的服务器程序定义远程接口hello.idl: module demo { module hello { exception HelloException { }; interface HelloObj { string getHelloString(in string helloString) raises(HelloException); }; }; }; 注意这个hello.idl文件要放置在hello目录中。然后在输入命令编译该文件: idlj -fall hello.idl 这是idlj会在hello目录下生成一些文件,他们是: HelloException.java HelloExceptionHelper.java HelloExceptionHolder.java HelloObj.java HelloObjHelper.java HelloObjHolder.java HelloObjImpl.java HelloObjOperations.java HelloObjPOA.java _HelloObjStub.java 如果您使用的是比较老的JDK版本,可能会生成更多的文件。 首先编写客户端,它的代码如下: /*ORBAS a open source CORBA implementation from Huihoo. * * *Copyright 2002 Huihoo Power, Inc. All Right Reserved. * *This software is licensed under LGPL license. *See terms of license at gnu.org. * *For more information, visit: * *http://www.huihoo.com */ package demo.hello; import java.io.*; import org.omg.CORBA.*; public class Client { public static void main(String args[]) { if (args.length != 1) { System.out.println("Usage: demo.hello.Client "); System.exit(1); } try { String fileName = new String(args[0]); // initialize the ORB. java.util.Properties props = new java.util.Properties(); props.setProperty("org.omg.CORBA.ORBClass", "org.huihoo.orbas.orb.ORB"); props.setProperty("org.omg.CORBA.ORBSingletonClass", "org.huihoo.orbas.orb.ORBSingleton"); ORB orb = ORB.init(args, props); FileInputStream f = new FileInputStream(fileName); byte[] buf = new byte[f.available()]; f.read(buf, 0, f.available()); String ior = new String(buf); org.omg.CORBA.Object obj = orb.string_to_object(ior); // and narrow it to HelloWorld.GoodDay // if this fails, a BAD_PARAM will be thrown HelloObj helloObject = HelloObjHelper.narrow(obj); // invoke the operation and print the result for(;;) { System.out.println(helloObject.getHelloString("say hello")); } } catch (Exception ex) { System.err.println(ex); ex.printStackTrace(); } } } 这样你的客户端就完成了。客户端由下列文件构成: Client.java _HelloObjStub.java HelloException.java HelloHolder.java HelloHelper.java HelloExceptionHoler.java HelloExceptionHelper.java HelloObjOperations.java 编译、打包的过程就不在赘述了。 在÷然后是服务器端,服务器端您需要自己动手的有两部分,一部分是服务器端的主程 序,一部分是您的服务对象的实现。 主程序的代码如下,它加载服务对象的实现,并激活它: /*ORBAS a open source CORBA implementation from Huihoo. * * *Copyright 2002 Huihoo Power, Inc. All Right Reserved. * *This software is licensed under LGPL license. *See terms of license at gnu.org. * *For more information, visit: * *http://www.huihoo.com */ package demo.hello; import java.io.*; import org.omg.CORBA.*; import org.omg.PortableServer.*; public class Server { public static void main(String[] args) { if (args.length != 1) { System.out.println("Usage: java demo.hello.Server "); System.exit(1); } try { //init ORB java.util.Properties props = new java.util.Properties(); props.setProperty("org.omg.CORBA.ORBClass", "org.huihoo.orbas.orb.ORB"); props.setProperty("org.omg.CORBA.ORBSingletonClass", "org.huihoo.orbas.orb.ORBSingleton"); ORB orb = ORB.init(args, props); //init POA POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate(); // create a GoodDay object HelloObjImpl impl = new HelloObjImpl(poa); // create the object reference org.omg.CORBA.Object obj = poa.servant_to_reference(impl); PrintWriter pw = new PrintWriter(new FileWriter(args[0])); // print stringified object reference to file pw.println(orb.object_to_string(obj)); pw.flush(); pw.close(); // wait for requests orb.run(); } catch (Exception e) { System.out.println(e); e.printStackTrace(); } } } 接下来是服务对象的实现,它打印传入的字符串,返回一个字符串“hello”: /*ORBAS a open source CORBA implementation from Huihoo. * * *Copyright 2002 Huihoo Power, Inc. All Right Reserved. * *This software is licensed under LGPL license. *See terms of license at gnu.org. * *For more information, visit: * *http://www.huihoo.com */ package demo.hello; public class HelloObjImpl extends HelloObjPOA { public HelloObjImpl(org.omg.PortableServer.POA poa) { } public String getHelloString(String helloString) { System.out.println(helloString); return "hello"; } } 整个服务器端的程序有如下的文件组成: HelloException.java HelloExceptionHelper.java HelloExceptionHolder.java HelloObj.java HelloObjHelper.java HelloObjHolder.java HelloObjImpl.java HelloObjOperations.java HelloObjPOA.java Server.java 然后就是编译、打包的过程了。 首先在demo的父目录中运行服务器端: java demo.hello.Server hello.ref 然后将在对当前目录生成的hello.ref文件拷贝到Client的运行目录中, java demo.hello.Client hello.ref 如果Client和Server放在相同的目录中,就不需要拷贝hello.ref文件了。 4、其他 更多的详细信息,请访问http://www.huihoo.com,orbas的源代码遵循LGPL, 有任何问题,可以发送mail到:mep@263.net