CORBA实例详解
CORBA(Common Object Request Broker Architecture)是一种分布式对象计算架构,允许开发者创建分布式对象系统。下面是CORBA实例的详细解释。
环境配置
在Windows 2000操作系统下,使用J2SE SDK 1.4.X版本,需要设置以下环境变量:
* classpath = “.;c:\j2sdk1.4.2_06\lib\tools.jar;c:\j2sdk1.4.2_06\lib\dt.jar;c:\j2sdk1.4.2_06\jre\lib;…”
* java_home="c:\j2sdk1.4.2_06"
* path="c:\j2sdk1.4.2_06\bin;…"
定义IDL接口
使用IDL(Interface Definition Language)来定义接口,例如:
```
module HelloApp{
interface Hello {
string sayHello();
oneway void shutdown();
};
};
```
Java语言映射
使用idlj工具将IDL接口编译成Java语言,生成以下文件:
* HelloPOA.java:服务器的skeleton类,extends org.omg.PortableServer.Servant implements HelloApp.HelloOperations, org.omg.CORBA.portable.InvokeHandler
* _HelloStub.java:客户端的stub类,extends org.omg.CORBA.portable.ObjectImpl implements HelloApp.Hello
* Hello.java:Java语言的接口,extends HelloOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity
* HelloOperations.java:不继承任何接口的Java语言的接口
* HelloHelper.java:Helper类
* HelloHolder.java:Holder类
服务器端的Java语言程序
服务器端的Java语言程序使用HelloImpl类实现Hello接口,提供sayHello()和shutdown()方法。
```
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
class HelloImpl extends HelloPOA {
private ORB orb;
public void setORB(ORB orb_val) {
orb = orb_val;
}
public String sayHello() {
return "Hello World";
}
public void shutdown() {
orb.shutdown(false);
}
}
```
服务器启动程序
服务器启动程序使用HelloWorldCorbaServer类,负责初始化ORB、获取RootPOA的引用、激活POAManager、生成Servant对象、将ORB对象登录其中。
```
public class HelloWorldCorbaServer {
public static void main(String args[]) {
try {
// ORB 的初始化
ORB orb = ORB.init(args, null);
// 获取 RootPOA 的引用,使 POAManager 变为活动状态
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// 生成 Servant, 并将 ORB 对象登录其中
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
// 由 Servant 来获取 Hello 对象的引用
...
} catch (Exception e) {
...
}
}
}
```
这个CORBA实例演示了如何使用IDL定义接口、生成Java语言映射、实现服务器端的Java语言程序和服务器启动程序。