CORBA,是一个很古老的技术,甚至诞生于Java之前,不过随着WebService、SOA、RMI等等技术的出现,CORBA由于过于复杂而渐渐淡出了人们的视线,不过在一些交互性很强的系统异构应用领域,CORBA似乎很重要,比如中国联通、移动、美国的数字电视系统应用领域,是CORBA把整个系统核心部分集成起来的。如果没有异构的、需要预留标准接口的、交互性很强的应用,你不应该考虑使用COBRA。
CORBA目前的最近版本规范是3.2,Java1.5、1.6均支持该版本。
CORBA比较亲和C++,对Java程序员来说,开始CORBA应用难度比较大,以至于网上找一个真正能跑的HelloWorld都很难。
下面是我经过阅读SUN的CORBA文档,所做的一个完整的HelloWorld实例:
一、定义IDL
module HelloApp{
interface Hello{
string sayHello();
oneway void shutdown();
};
};
没有IDL的专门的开发工具,写起来容易出错,而且不美观,IDEA勉强支持语法高亮,但不支持格式化和语法校验!
二、从IDL生成存根
进入IDL文件存放目录,然后执行:idlj -fall Hello.idl
会生成一批Java文件:
helloCorba\src\HelloApp
HelloPOA.java
_HelloStub.java
HelloHolder.java
HelloHelper.java
Hello.java
HelloOperations.java
三、实现IDL接口,开发服务端程序
import HelloApp.Hello;
import HelloApp.HelloHelper;
import HelloApp.HelloPOA;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
class HelloImpl extends HelloPOA {
private ORB orb;
public void setORB(ORB orb_val) {
orb = orb_val;
}
// implement sayHello() method
public String sayHello() {
return "\nHello world !!\n";
}
// implement shutdown() method
public void shutdown() {
orb.shutdown(false);
}
}
public class HelloServer {
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();
// create servant and register it with the ORB
//创建一个HelloImpl实例(servant),并注册到ORB上
HelloImpl helloImpl = new HelloImpl();
helloImpl.setORB(orb);
//从服务中得到对象的引用
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);
Hello href = HelloHelper.narrow(ref);
//得到一个根名称的上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// Use NamingContextExt which is part of the Interoperable
// Naming Service (INS) specification.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//在命名上下文中绑定这个对象
String name = "Hello";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("HelloServer ready and waiting ...");
//启动线程服务,等待客户端的调用
orb.run();
}catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println("HelloServer Exiting ...");
}
}
四、实现CORBA的客户端
import HelloApp.Hello;
import HelloApp.HelloHelper;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
public class HelloClient {
static Hello helloImpl;
public static void main(String args[]) {
try {
//创建一个ORB实例
ORB orb = ORB.init(args, null);
//获取根名称上下文
org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
// Use NamingContextExt instead of NamingContext. This is
// part of the Interoperable naming Service.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
//从命名上下文中获取接口实现对象
String name = "Hello";
helloImpl = HelloHelper.narrow(ncRef.resolve_str(name));
//调用接口对象的方法
System.out.println("Obtained a handle on server object: " + helloImpl);
System.out.println(helloImpl.sayHello());
helloImpl.shutdown();
} catch (Exception e) {
System.out.println("ERROR : " + e);
e.printStackTrace(System.out);
}
}
}
五、运行
1)运行CORBA服务
orbd -ORBInitialPort 1050 -ORBInitialHost 192.168.14.117
2)运行CORBA应用的服务端
java HelloServer -ORBInitialPort 1050
输出:
HelloServer ready and waiting ...
HelloServer Exiting ...
3)运行CORBA应用的客户端
java HelloClient -ORBInitialHost 192.168.14.117 -ORBInitialPort 1050
Obtained a handle on server object: IOR:000000000000001749444c3a48656c6c6f4170702f48656c6c6f3a312e30000000000001000000000000008a000102000000000f3139322e3136382e31342e313137000006db000000000031afabcb00000000206d3bb80000000001000000000000000100000008526f6f74504f410000000008000000010000000014000000000000020000000100000020000000000001000100000002050100010001002000010109000000010001010000000026000000020002
Hello world !!
分享到:
相关推荐
C++、CORBA版HelloWorld程序
CORBA的入门级实例代码,Hello World程序。 包括CORBA的一般开发书写过程以及执行步骤(简单英文)。
Java实现的CORBA接口版Helloworld,包含客户端和服务端
corba的java实现的hello world
如果您选择不同的位置,请编辑 corba-javaws-ssl/pom.xml 中的属性 JACORB 将 corba-helloworld-server/src/main/resources/jacorb.keystore 复制到 $JACORB/etc/ 从 $JACORB/etc/jacorb_proper
1 Introduction 2 Programming with C++Builder and TAO 3 HelloWorld - A Tutorial 4 VCL HelloWorld - A Tutorial A Building and Installing ACE+TAO
CORBA is Middleware.... You will build the classic Hello World program as a distributed application. The Hello World program has a single operation that returns a string to be printed.
TAO的一个小hello例子,使用orb
javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...
javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...
javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...
19.5 An SCA-compliant Hello World Application 397 19.5.1 An SCA-compliant Terminal Device 397 19.5.2 Domain Profile for Terminal Device 405 19.5.3 An SCA-compliant Talk Application 409 19.5.4 Multi-...
第 3 章 Hello World 应用 33 3.1 本章综 33 3.2 编写 Slice 定义 33 3.3 编写使用 C++ 的 Ice应用 34 3.4 编写使用 Java的 Ice 应用 41 3.5 总结 48 第 Ice 核心概念 51 第 4 章 Slice 语言 53 4.1 本章综 53 4.2 ...
Clustered Helloworld-cluster application 317 Updating workers.properties 317 Farming 320 Cluster member configuration 320 This material is copyright and is licensed for the sole use by Jillian ...
2012版最全面试题大全目录: 一. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环?...
s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 23 34、String ...
比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办? 12、在weblogic中发布ejb需涉及...
Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备...