以一个简单的 "Hello World" 程序为例,简单说一两句话吧:
一、定义你的接口(Hello.idl)
下例 OMG IDL 描述一个 CORBA 对象,其单个 sayHello() 操作将返回一个字符串。
module HelloApp
{ interface Hello
{ string sayHello();
};
};
二、编译IDL 接口:idltojava Hello.idl
编译后将形成以下五个文件:
1._HelloImplBase.java:
该抽象类是一个服务器 skeleton,它可为服务器提供基本的 CORBA 功能。
它实现 Hello.java 接口。本例用服务器类 HelloServant 扩展 _HelloImplBase。
2._HelloStub.java :
该类是客户机 stub,可为客户机提供 CORBA 功能。它实现 Hello.java 接口。
3.Hello.java :
该接口含有 IDL 接口的 Java 版本,其中含有方法 sayHello()。
Hello.java 接口扩展 org.omg.CORBA.Object 并提供标准的 CORBA 对象功能。
4.HelloHelper.java:
这是一个终态类,可以提供辅助功能,特别是提供将 CORBA 对象引用转换为适当
类型所需的 narrow() 方法。
5.HelloHolder.java:
这是一个终态类,其中含有 Hello 类型的公有实例成员。它可为“out” 和 “inout”
变量提供操作。CORBA 有这些变量,但不容易映射为 Java 的语义。
三、在文件 HelloServer.java 中提供服务器的实现。
服务器 (HelloServer.java) 的实现
服务器示例含有两个类:servant 和服务器。
servant HelloServant 是 Hello IDL 接口的实现;
每个 Hello 实例都由一个 HelloServant 实例来实现。
servant 是 _HelloImplBase 的子类,_HelloImplBase 是由 idltojava 编译器从示例
IDL 中生成的。servant 对每个 IDL 操作都包含一个方法。
本例中只有一个 sayHello() 方法。servant 中的方法与常规 Java 方法一样,
而用于处理 ORB 以及编组变量、结果等的其它代码将由服务器和 stub 提供。
服务器类含有服务器的 main() 方法,可完成以下任务:
创建一个 ORB 实例
创建一个 servant 实例(CORBA Hello 对象的实现)并通知 ORB
获取一个命名上下文的 CORBA 对象引用,在该命名上下文中注册新 CORBA 对象
在命名上下文中将新对象注册在“Hello”名下
等待对新对象的调用
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
class HelloServant extends _HelloImplBase
{
public String sayHello()
{
return "/nHello world !!/n";
}
}
public class HelloServer {
public static void main(String args[])
{
try{
// 创建和初始化 ORB
ORB orb = ORB.init(args, null);
// 创建 servant 并将其向 ORB 注册
HelloServant helloRef = new HelloServant();
orb.connect(helloRef);
// 获取根命名上下文
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContext ncRef = NamingContextHelper.narrow(objRef);
// 绑定命名中的对象引用
NameComponent nc = new NameComponent("Hello", "");
NameComponent path[] = {nc};
ncRef.rebind(path, helloRef);
// 等待来自客户机的调用
java.lang.Object sync = new java.lang.Object();
synchronized (sync) {
sync.wait();
}
} catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
}
}
四、你自己生成你的pascal客户(这省略了
)
五、运行名字服务器:
tnameserv -ORBInitialPort 1050
六、启动 Hello 服务器:
java HelloServer -ORBInitialPort 1050
七、从不同于服务器的 shell 中运行 Hello 应用程序客户机
八、至于java 开发的服务器端连数据库,当然用JDBC,怎么用,参考一下本论坛的其它问题吧
关键是你的IDL接口要设计好。