orbas入门手册



Last Modified : 2002.12.25

(by huihoo.com orbas项目组)

本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:[email protected]:/cvsroot/orbas,注意最前面的冒号 是不能省略的。在界面中选择checkout操作(具体的操作需要参考该软件的使用手册), 需要下载的模块名是orbas,当需要输入口令时,直接敲回车即可。

如果您使用命令行方式的cvs下载(比如在unix或linux系统下),首先要确保cvs的 执行文件在path环境变量中;如果在windows系统下,您需要如下的步骤:

首先打开一个命令行窗口,改变目录到您需要放置orbas源代码的目录;
然后输入:
set CVSROOT=-d:pserver:[email protected]:/cvsroot/orbas
cvs login
此时会提示输入口令,直接回车;
cvs co orbas
或者cvs checkout orbas
当命令行中停止输出并且没有出错提示信息时,表示orbas的源代码下载完毕。

如果您在unix或linux系统下,

首先改变目录到您需要放置orbas源代码的目录;
设置CVSROOT环境变量。如果您使用的是csh或类似的shell,请输入:
set CVSROOT -d:pserver:[email protected]:/cvsroot/orbas
如果您使用的是linux的bash或类似的shell,请输入: export CVSROOT=-d:pserver:[email protected]:/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到:[email protected]