`
yaoyq
  • 浏览: 10701 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

构建简单的CORBA应用

阅读更多

构建简单的CORBA应用

        JAVA提供了对CORBA(Common Object Request Broker Architecture,通用对象请求代理体系结构)的支持。CORBA是分布式对象系统的一个标准,它由OMG(Ojbect Management Group,对象管理组)制定。CORBA包含了几个规范,来说明分布式系统的不同侧面,例如:IIOP(Internet Inter-Orb Protocol, Internet对象请求代理间协议)网络协议规范,定义了客户和服务器如何进行通信;COSNaming规范,定义了如何进行命名;还有OMG IDL,定义了描述对象接口,以便能够产生可以与他们交流的代理方式。CORBA还有很多这样的规范,每一个都覆盖分布式系统中需要定义的一部分。CORBA是平台和语言独立的,这意味着它不依赖于任何语言,也不依赖于任何操作系统。

         下面我们概略的介绍IDL技术,以及JAVA对该技术的支持。 IDL技术概述 IDL是Interface Definition Language(接口定义语言)的缩写,是OMG定义的标准语言,用于定义所有 CORBA 对象的接口。IDL接口将声明一批操作、异常和属性。每个操作都有一个用法说明。用法说明定义了操作的名称、参数、结果和异常。OMG IDL不包括操作的实现;相反,正如其名称所示,它只是一种用来定义接口的语言。IDL的完整句法和语义在 OMG 规范的第 3 章中进行讨论,可在 OMG 站点找到,地址是:http://www.omg.org/technology/documents/idl2x_spec_catalog.htm。使用Java(TM)编写的API提供基于标准的和CORBA的交互性和连接性。

       JAVA IDL的语法和使用下面我们学习怎么写一个最简单的IDL文件,文件名称是hello.idl。代码如下:

module cn{ interface Hello{ string say(); }; };

结尾处的;不可省略。module相当与定义java的包,这里包名是cn,包名中不能包含.。

interface用来定义接口,接口的名字是Hello。接口包含了一个方法,返回一个字符串。IDL中的字符串类型是string。对于基本数据类型而言,CORBA会选取语言定义更短的,这是IDL为了实现跨语言应用而不得不采取的折中。四、五两行大括号后面的;不可省略。接下来的工作,就是把这个idl文件编译成对应的java文件,这是通过JDK自带的idlj工具完成的,这个工具和javac在一个目录下。它的命令格式如下:

 Idlj hello.idl 我们可以使用-td参数指定生成java文件的路径,我的java文件所在的路径在在当前工程下的src中。我们可以指定生成文件的范围,比如只生成服务器端的文件,我们用-fserver命令行参数,如果只生成客户端的文件,使用-fserver参数,全部生成使用-fall参数。默认全部生成。在src目录下,我们会发现新生成了一个目录cn,下面包含了6个java源文件,分述如下:

        HelloPOA POA指的是Portable Object Adapter(轻便对象适配器)。这个抽象类是一个基于流的服务器端骨架,提供了服务器端基本的CORBA功能。 _HelloSutb 客户端的存根类,为客户端提供了CORBA功能。 Hello 这是java版的Hello接口,它提供了标准的CORBA对象功能。 HelloHelper 这是一个辅助类,负责向CORBA流中写入或读取对象。 HelloHolder 这是一个final类,它持有一个public的Hello实例变量。它用来操作CORBA输入输出流的参数。 HelloOperations 这个类才是我们所预想的那个接口,只包含我们定义的那个方法,不包含CORBA的任何东西。关于这些类的更详细的信息,可以参阅SUN公司发布的JavaDocs文档,里面有更详细的说明,还有更多的例子。以下提供一个服务器端的实现,注意这个实现类继承的是HelloPOA:

 

 

package cn.zxm.corba.hello.server; 
import cn.HelloPOA; 
public class HelloImpl extends HelloPOA {
   public String say() { 
System.out.println("客户调用时间——" + new java.util.Date()); return "Hello World!"; }
 }
// 接下来,把它绑定到命名服务,以便客户端可以调用: 
package cn.zxm.corba.hello.server;
import java.util.Properties; 
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;
import cn.Hello; import cn.HelloHelper; 

public class HelloServer { 
public void run(String[] args) throws Exception { 
//生成一个对象请求代理(ORB),并初始化 
Properties props = new Properties(); 
//初始化端口,默认的端口是900 
props.put("org.omg.CORBA.ORBInitialPort", "1050");
 //绑定到服务器 
props.put("org.omg.CORBA.ORBInitialHost", "192.168.1.100");
 //初始化ORB ORB orb = ORB.init(args, props);
 // get reference to rootpoa & activate the POAManager 
//获取一个根POA引用,并激活POA管理器 
POA poa = POAHelper.narrow(orb.resolve_initial_references("RootPOA")); 
poa.the_POAManager().activate();
 //实例化一个HelloImpl对象 
HelloImpl hello = new HelloImpl(); 
// 从servant获得一个对象引用 
org.omg.CORBA.Object ref = poa.servant_to_reference(hello); Hello href = HelloHelper.narrow(ref); 
// 获得命名上下文 
org.omg.CORBA.Object objref = orb.resolve_initial_references("NameService"); 
// 使用NamingContextExt 它是INS(Interoperable Naming Service,协同命名规范)的一部分
 NamingContextExt ncRef = NamingContextExtHelper.narrow(objref); 
//绑定一个对象引用,以便客户端可以调用 
String name = "Hello"; NameComponent[] nc = ncRef.to_name(name); ncRef.rebind(nc, href);
 System.out.println("HelloServer ready and waiting......");
 //运行ORB 
   orb.run(); 
} public static void main(String[] args) {
HelloServer server = new HelloServer(); 
try { 
        server.run(args); 
      }catch(Exception e) {
  e.printStackTrace(); 
     } 
  }  
} 
//现在我们可以写客户端调用代码,代码如下: 
package cn.zxm.corba.hello.client;
import java.util.Properties; 
import org.omg.CORBA.ORB; 
import org.omg.CosNaming.NamingContextExt; 
import org.omg.CosNaming.NamingContextExtHelper; 
import cn.Hello; import cn.HelloHelper; 
public class HelloClient { public void run(String[] args) throws Exception { 
Properties props = new Properties(); 
// 生成一个ORB,并初始化,这个和Server端一样 
props .put("org.omg.CORBA.ORBInitialPort", "1050"); 
props.put("org.omg.CORBA.ORBInitialHost", "192.168.1.100"); ORB orb = ORB.init(args, props); 
// 获得根命名上下文 org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService"); 
// 用NamingContextExt代替NamingContext. NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
 // 通过名称获取服务器端的对象引用 
String name = "Hello"; Hello hello = HelloHelper.narrow(ncRef.resolve_str(name)); 
//调用远程对象 System.out.println(hello.say());
 }
 public static void main(String[] args) {
 HelloClient client = new HelloClient(); try {
 client.run(args); 
} catch (Exception e) { 
e.printStackTrace();
    }
  } 
}

 

 

        一个完整的基于java的CORBA应用完成了,现在我们编译这些类了。

 编译完成后,我们需要启动orbd,这是一个类似于rmiregistry的工具,提供最简单的命名服务。

启动的命令如下:

start orbd -port 1050 -ORBInitialPort 1049

 -ORBInitialHost localhost 这个命令定义了CORBA用到的服务器是本机,初始化端口是1049,使用的绑定端口是1050。 然后我们运行HelloServer,命令是 start java cn.zxm.corba.hello.server.HelloServer 服务器会把_HelloStub绑定到orbd,我们使用的绑定名称是Hello。

        然后运行客户端,命令是 java cn.zxm.corba.hello.client.HelloClient 运行效果如图1: 图1 CORBA客户端运行效果 通过上面的例子,我们对CORBA有了一个初步的印象。CORBA本身是极为复杂的,读者可以看到,上面的绑定和调用都是很繁琐的,而且让人难于理解。

       总体而言,它比RMI要复杂的多,因此,我们可以借助于RMI的简易性来实现CORBA。对分布式应用感兴趣的朋友,可以到OMG或者SUN的网站上,察看关于它的更详细的信息。

分享到:
评论
1 楼 arthur0592 2008-10-22  
这个段落排得很差

相关推荐

    开发CORBA应用实例

    在深入讨论如何开发一个简单的CORBA应用之前,我们需要了解几个核心概念: 1. **ORB(Object Request Broker)**:ORB是CORBA的核心组件,负责处理客户端和服务端之间的所有通信。ORB提供了发现远程对象、与远程...

    CORBA 原理及应用

    ### CORBA原理及应用知识点详解 #### 一、CORBA简介 - **CORBA**(Common Object Request Broker Architecture,通用对象请求代理体系结构)是一种分布式计算标准,旨在提供跨网络和平台之间的对象交互能力。 - **...

    CORBA应用程序举例.pdf

    本文档将提供一个CORBA应用程序的具体示例,并通过该示例详细解释CORBA的基本概念和技术要点。 ### 标题和描述 标题为"CORBA应用程序举例.pdf",而描述部分仅重复了标题内容。这暗示文档的内容是关于展示一个具体...

    CORBA分布式应用程序

    CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)是一种标准的中间件技术,用于构建跨平台、跨语言的分布式应用程序。它允许不同计算机上的对象互相通信,仿佛它们都在同一台机器上...

    在Oracle 应用服务器实现Java CORBA的研究.doc

    Oracle 应用服务器是Oracle公司推出的用于构建企业级应用程序的平台,它支持多种技术,包括Java和CORBA。本文主要探讨了如何在Oracle应用服务器(OAS 4.0)中实现Java CORBA(JCORBA)技术。JCORBA是Java对Common ...

    基于Oracle 8i的CORBA应用研究.pdf

    开发基于Oracle 8i的CORBA应用,开发者需要理解ORB的工作原理,掌握ORB的核心组件和特性,利用Oracle 8i的Aurora ORB提供的服务来构建分布式系统。此外,还需要熟悉CORBA的编程模型,如ORB接口、对象适配器(BOA和...

    论文研究-基于CORBA的网管方案的研究与实现.pdf

    现有的网管协议缺乏对...首先探讨了基于CORBA构建综合网管系统的方法,通过对几种CORBA应用于网管的方式进行比较,提出了CORBA最适用于网络管理层以上的网管系统的构建,最后给出一个CORBA实际应用于网管系统的案例。

    CORBA应用程序举例[定义].pdf

    在上述的“CORBA应用程序举例”中,我们看到一个简单的CORBA接口定义和其实现。 首先,`grid.idl`文件是IDL(Interface Definition Language)编写的,它是CORBA系统中定义服务接口的标准语言。在这个例子中,`grid...

    介绍corba使用和java的集成

    CORBA(Common Object Request Broker Architecture...总之,CORBA 与 Java 的集成为构建分布式应用提供了一种强大而灵活的方式,通过 Orbacus 等工具的支持,可以极大地简化开发过程,提高应用的互操作性和可扩展性。

    CORBA基础_C++corba开发_corba_

    在C++中开发CORBA应用,你需要以下步骤: 1. **定义接口**:使用IDL编写接口定义文件,例如`hello.idl`,声明服务接口和数据类型。例如: ```idl interface Hello { string say_hello(in string name); }; ```...

    interbus4.0

    - **快速入门**部分提供了构建简单CORBA应用的步骤。 - 使用**IDL语言**来定义接口。 - 通过**InterBusIDL编译器**生成客户端和服务端的框架代码。 - 客户端和服务端分别实现相应的逻辑。 - 运行程序并验证功能。 #...

    corba核心规范-- 一个简单的CORBA/Java示例

    本示例展示了如何使用CORBA和Java创建一个简单的分布式应用。通过学习和实践这样的例子,我们可以深入理解CORBA的核心概念和工作原理,从而在更复杂的分布式系统中灵活应用。对于需要构建跨平台、跨语言的大型分布式...

    java_CORBA.rar_CORBA java_Java CORBA_corba

    描述中的"远程方法调用实现的小程序",意味着这个压缩包可能包含了一个简单的Java应用,该应用演示了如何使用CORBA进行远程方法调用(Remote Method Invocation, RMI)。RMI是Java语言的一个特性,用于实现Java对象...

    Corba企业解决方案

    "源码"则意味着我们将深入到代码级别,理解如何编写和组织CORBA应用程序的代码结构。"网络通信类"是指CORBA的核心功能,即在网络中进行对象间的通信,包括传输协议、序列化和反序列化机制等。"资源"可能指的是服务器...

    Ultra Corba Simulator (Corba 模拟器)1.3.6

    2. **开发调试**:开发者在构建Corba应用程序时,可以利用模拟器测试接口和通信流程,确保代码的正确性。 3. **系统集成**:在大型系统集成项目中,模拟器可以帮助验证不同组件间的接口兼容性和通信性能。 ### ...

    实时CORBA实现机制

    ### 实时CORBA应用实例分析 在实际应用中,实时CORBA的优越性得到了充分验证。例如,在电信网络管理中,实时CORBA能够实现设备状态的实时监控和故障的即时响应,显著提高了网络的稳定性和服务质量。在制造业,实时...

    基于CORBA的分布式数据库系统开发技术

    CORBA应用程序的结构包括客户端和服务器端两部分: - **客户端**:通过ORB(Object Request Broker,对象请求代理)接收服务请求,利用智能代理提供的命名服务定位目标服务。 - **服务器端**:ORB将服务程序接口...

    cb编的corba实例

    “idl”虽然在标签中没有直接提及,但它是实现CORBA应用的关键部分,用于定义服务接口,然后可以被编译为不同目标语言(如C++)的代码。 “中间件”是CORBA的另一个关键词,它是指位于操作系统和应用程序之间的软件...

    CORBA技术及实例

    通过以上步骤,我们构建了一个简单的基于CORBA技术的客户端-服务器应用程序,实现了跨进程、跨语言的对象交互功能。 #### 四、总结 CORBA作为一种成熟且广泛应用的分布式计算框架,提供了强大的功能和支持。通过对...

    创建corba客户端教程

    创建CORBA客户端是开发分布式应用的重要步骤,本教程将介绍如何使用C++和JAVA语言创建CORBA客户端应用程序。 ### CORBA客户端应用程序开发概念 #### 客户端应用程序概述 在CORBA体系中,客户端应用程序(Client ...

Global site tag (gtag.js) - Google Analytics