`
yeweimian123
  • 浏览: 41773 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

CORBA版HelloWorld

阅读更多
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程序

    C++、CORBA版HelloWorld程序

    CORBA Hello World 实例

    CORBA的入门级实例代码,Hello World程序。 包括CORBA的一般开发书写过程以及执行步骤(简单英文)。

    CORBA-HelloWorld.rar_corba

    Java实现的CORBA接口版Helloworld,包含客户端和服务端

    corba简单实例

    corba的java实现的hello world

    corba-javaws-ssl:使用 Web Start 应用程序通过 SSL 测试 CORBA IIOP 的示例应用程序

    如果您选择不同的位置,请编辑 corba-javaws-ssl/pom.xml 中的属性 JACORB 将 corba-helloworld-server/src/main/resources/jacorb.keystore 复制到 $JACORB/etc/ 从 $JACORB/etc/jacorb_proper

    CORBA Quick Start-Using TAO with C++Builder 6

    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.rar_operation

    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

    TAO的一个小hello例子,使用orb

    Java高手真经(编程基础卷)光盘全部源码 免积分

    javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...

    java高手真经 光盘源码

    javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...

    Java高手真经(编程基础卷)光盘全部源码

    javacorba.zip 25.Corba编程(HelloWorld例、计算器实例) 第6部分(4个程序包) javareflection.zip 26.Java反射机制与动态代理 javageneric.zip 27.Java泛型编程 javaannotation.zip 28.Java注释符编程 ...

    Wiley.Software.Defined.Radio.The.Software.Communications.Architecture.May.2007

    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-...

    ICE分布式程序设计中文版

    第 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 ...

    Apache Geronimo 2.1_ Quick Reference.pdf

    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 ...

    java面试题大全(2012版)

    2012版最全面试题大全目录: 一. Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环?...

    最新Java面试宝典pdf版

    s = s + " world!";这两行代码执行后,原始的String对象中的内容到底变了没有? 22 32、是否可以继承String类? 23 33、String s = new String("xyz");创建了几个String Object? 二者之间有什么区别? 23 34、String ...

    Java面试宝典2010版

    比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http://主机:端口号//helloword.jsp就可以看到运行结果了? 又比如这其中用到了一个自己写的javaBean该如何办? 12、在weblogic中发布ejb需涉及...

    新版Android开发教程.rar

    Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备...

Global site tag (gtag.js) - Google Analytics