`
yeweimian123
  • 浏览: 42947 次
  • 性别: 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程序 #### 环境配置与开发步骤概览 在本案例中,我们探讨如何在Windows XP操作系统下,使用MICO 2.3.12版本与Visual Studio 2003构建C++与CORBA(Common Object Request Broker ...

    CORBA Hello World 实例

    module HelloWorld { interface Hello { string say_hello(); }; }; ``` 这里定义了一个名为`Hello`的接口,它有一个`say_hello`方法,返回一个字符串。 ### 3. 生成 stub 和 skeleton 使用ORB提供的编译器...

    CORBA-HelloWorld.rar_corba

    在这个"Java实现的CORBA接口版HelloWorld"示例中,我们将深入理解如何使用CORBA在Java中创建客户端和服务端。 1. **CORBA基础概念**: - **ORB(Object Request Broker)**:是CORBA的核心,它负责对象间的通信,...

    corba简单实例

    在这个‘CORBA的Java实现的Hello World’实例中,我们将探讨如何在Java环境中搭建一个简单的CORBA服务,实现远程方法调用。” 【正文】: CORBA是一种中间件技术,它的主要目标是提供跨平台、跨语言的互操作性。它...

    【CORBA示例】

    1. 定义接口:在CORBA中,对象的接口被定义为IDL(Interface Definition Language)文件,如`helloworld.idl`。例如: ```idl module HelloWorld { interface Hello { string say_hello(); }; }; ``` 这个IDL文件...

    corba 实例 (c++版)

    hello->say_hello("World", env); ``` 最后,启动ORB并保持运行,以便客户端可以连接。在服务器端,我们调用`ORB_run()`;在客户端,我们同样需要调用`ORB_init`和`ORB_run`,但在调用完远程方法后,我们会调用`ORB...

    CORBA规范介绍和实例

    interface HelloWorld { long sayHelloWorld(in string inString, out string outString); }; } ``` #### 四、CORBA的实际应用 - **客户端/服务器通信**:CORBA提供了一个统一的框架,允许不同平台和语言编写...

    TAO的一个小hello

    【标题】"TAO的一个小hello" 是一个基于TAO(The ACE ORB)实现的CORBA(Common Object Request Broker Architecture)示例程序。TAO是ACE(Adaptive Communication Environment)的一部分,它是一个跨平台的、开源...

    CORBA中IDL文件在VS2005下的编译

    HelloWorld_var hello = HelloWorld::_narrow(hello_obj); // 调用接口方法 hello->say_hello(); // 运行ORB orb->run(); } catch (CORBA::Exception& ex) { ex._tao_print_exception("Exception caught:")...

    基于TAO的CORBA编程详细介绍.rar

    "5_Hello World - 简单实例"是每个编程教程的传统起点,通过一个简单的程序展示了如何使用TAO实现CORBA的客户端和服务端通信。这个例子有助于初学者快速理解CORBA的基本工作流程。 **6. 使用命名服务** "6_Naming ...

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

    - **编写VCL IDL文件**:与控制台HelloWorld类似,但针对VCL环境进行了优化。 - **编写VCL客户端代码**:利用VCL组件库创建图形用户界面,并实现与服务端的交互。 - **编写VCL服务端代码**:实现IDL文件中定义的服务...

    Corba企业解决方案

    这些资源可能涵盖了从简单的"Hello, World"示例到复杂的企业级应用的完整开发过程。 使用CORBA,企业可以构建松散耦合的系统,其中每个对象都可以作为独立的服务运行,降低了维护和升级的复杂性。ORB负责对象的定位...

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

    CORBA.rar_corba

    String result = helloRef.sayHello("World"); System.out.println(result); ``` 5. **ORB终止**:服务端和客户端在完成通信后,都需要关闭ORB。 ```java orb.shutdown(false); ``` 这个示例展示了如何在Java中...

    Elipse中开发Corba环境搭建

    module HelloWorld { interface Hello { string say_hello(in string name); }; } ``` 5. 生成Java代码:IDL文件编写完成后,需要将其转换为Java源代码。右键点击IDL文件,选择“Generate Java Skeletons”。...

    corba 实例(课件)

    return "Hello World"; } public void shutdown() { orb.shutdown(false); } } ``` 服务器启动程序 服务器启动程序使用HelloWorldCorbaServer类,负责初始化ORB、获取RootPOA的引用、激活POAManager、生成...

    corba test

    interface HelloWorld { string sayHello(); } ``` 2. **ORB(Object Request Broker)**:ORB是CORBA的核心组件,它负责对象间的通信。ORB解析IDL,生成客户端和服务器端的代码,并处理消息传输。在测试中,...

    CORBA系统结构原理与规范源码

    以一个简单的“Hello World”为例,我们可以通过以下步骤创建一个基于Java的CORBA应用程序: 1. **定义IDL接口:** ```idl module HelloApp { interface Hello { string sayHello(in string message); }; }; ...

Global site tag (gtag.js) - Google Analytics