`
shukuiyan
  • 浏览: 413553 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
简单地说,CORBA允许应用之间相互通信,而不管它们存在于哪里以及是谁设计的。CORBA1.1于1991年由OMG发布,其中定义了接口定义语言(IDL)以及在对象请求代理(ORB)中实现客户对象与服务器对象之间交互的应用编程接口(API)。CORBA2.0于1994年发布,规定了各个供应商之间的ORB的通信规则。  

CORBA标准主要分为三个部分:接口定义语言(IDL)、对象请求代理(ORB)以及ORB之间的互操作协议IIOP。  

ORB是对象之间建立Client/Server关系的中间件。使用ORB,客户可以透明地调用一个服务对象上的方法,这个服务对象可以在本地,也可以在通过网络连接的其他机器上。ORB截获这一调用同时负责查找实现服务的对象并向其传递参数、调用方法返回最终结果。客户并不知道服务对象位于什么地方,它的编程语言和操作系统是什么,也不知道不属于对象接口的其他系统部分。这样,ORB在异构分布环境下为不同机器上的应用提供了互操作性,并无缝地集成了多种对象系统。  

在开发传统的Client/Server应用时,开发者使用他们自己设计的或一个公认的标准来定义用于设备之间通信的协议。协议的定义依赖于实现语言、网络传输和许多其他因素,而ORB的出现简化了这一过程。使用ORB时,协议是使用接口定义语言(IDL)定义的,而IDL是独立于语言的。并且ORB提供很强的灵活性,它使程序员选择最适合的操作系统、执行环境,甚至系统各个组件也可以采用不同的编程语言实现。更重要的是,它允许现有组件的集成。在一个基于ORB的解决方案中,开发者可以使用与创建新对象一样的IDL对遗留系统进行建模,他们创建“包装”代码以在标准化的软件总线与遗留系统接口之间传递信息。  

使用CORBA,用户可以透明地访问信息,并不需要知道信息存在于什么软件中、使用什么硬件平台,以及位于企业网络的什么地方。作为面向对象系统的通信核心,CORBA为今天的计算环境带来了真正的互操作性。

CORBA与JAVA的相互关系

 

CORBA不只意味着对象请求代理(ORB),它还是非常全面的分布式对象平台。CORBA使JAVA应用可以跨越网络、语言以及操作系统,并为JAVA提供了一组分布服务,如分布式自我观察、动态发现、事务、关系、安全和命名等。  

JAVA不仅是一种语言,它还是一个动态代码系统,它对运行对象来说是一个可移植的虚拟机(JVM)。JAVA为开发、管理、发布Client/Server应用提供了更简单的方式。人们可以通过将应用放在一个Web服务器上将这一应用发布给成千上万个用户,而不必关心它的安装和升级。JAVA还非常适合服务器的开发,它可以动态地将服务代码移向最需要它们的地方。  

JAVA将会使CORBA对象能够运行在从主机、网络计算机到蜂窝电话等可编程的各种机器上,并简化了大型CORBA系统的代码发布。对客户和服务对象来说JAVA是很理想的编程语言,JAVA内置的多线程、垃圾收集和错误处理使编写健壮的网络对象变得很容易。  

这两种对象模型可以很好地相互补充,CORBA处理网络的透明性,JAVA处理实现的透明性,CORBA为JAVA可移植应用环境提供了一个分布式的结构。

使用JAVA开发CORBA应用

 

下面让我简要介绍一下开发CORBA的步骤。   

使用JAVA开发CORBA应用需要如下五个步骤:   

使用IDL创建接口 (About.idl)   下面的OMG IDL描述一个CORBA对象。
  module About
  {
   interface Show
   {
   string ShowName();
   };
  };


  将其存为Show.idl。

编译接口并生成CORBA支持文件
  我们用以下命令编译这个 IDL 接口:
   idltojava Show.idl
  idltojava是SUN公司的IDL编译器,可以免费从SUN公司站点上下载。
  因为idltojava在编译IDL文件之前,需要进行预编译,而如果你的机器上没有预编译器,可以使用以下命令:
  idltojava -fno-cpp Show.idl
  编译后将在当前目录下生成About子目录,其中会包括一些支持文件,如有兴趣可以看一下,但一定不要修改。

实现服务器 (ShowServer.java)
  ShowServer的main() 方法,可完成以下任务:

  
创建一个 ORB 实例
创建一个服务对象实例(CORBA About 对象的实现)并通知 ORB
获取一个命名上下文的CORBA对象引用,在该命名上下文中注册新的CORBA对象
在命名上下文中将新对象注册在“About”名下
等待对新对象的调用
  实现服务器源程序如下:
  import About.--;
  import org.omg.CosNaming.--;
  import org.omg.CosNaming.NamingContextPackage.--;
  import org.omg.CORBA.--;
  class ShowObject extends _ShowImplBase
  {
   public String ShowName()
   {
   return "\nMy name is Seymour!!\n";
   }
  }
  public class ShowServer {
   public static void main(String args[])
   {
   try{
   // 创建和初始化 ORB
   ORB orb = ORB.init(args, null);
   // 创建服务对象并将其向 ORB 注册
   ShowObject ShowRef = new ShowObject();
   orb.connect(ShowRef);
   // 获取根命名上下文
   org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
   NamingContext ncRef = NamingContextHelper.narrow(objRef);
   // 绑定命名中的对象引用
   NameComponent nc = new NameComponent("About", "");
   NameComponent path[] = {nc};
   ncRef.rebind(path, ShowRef);
   // 等待来自客户机的调用
   java.lang.Object sync = new java.lang.Object();
   synchronized (sync) {
   sync.wait();
   }
   } catch (Exception e) {
   System.err.println("ERROR: " + e);
   e.printStackTrace(System.out);
   }
   }
  }



实现客户机 (ShowClient.java)
  下面的应用程序客户机将完成以下任务:
  
创建一个ORB;
获取一个指向命名上下文的引用;
在命名上下文中查找“Show”并获得指向该 CORBA 对象的引用;
调用对象的 ShowName() 操作并打印结果。  
  import About.--;
  import org.omg.CosNaming.--;
  import org.omg.CORBA.--;
  public class ShowClient
  {
   public static void main(String args[])
   {
   try{
   // 创建和初始化 ORB
   ORB orb = ORB.init(args, null);
   // 获取根命名上下文
  org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");
  NamingContext ncRef = NamingContextHelper.narrow(objRef);
  //解析命名中的对象引用
  NameComponent nc = new NameComponent("About", "");
  NameComponent path[] = {nc};
  About.Show ShowRef = ShowHelper.narrow(ncRef.resolve(path));
  // 调用 Show 服务对象并打印结果
   String show = ShowRef.ShowName();
   System.out.println(show);
   } catch (Exception e) {
   System.out.println("ERROR : " + e) ;
   e.printStackTrace(System.out);
   }
   }
  }



构建和运行ShowName程序   
编译 .java 文件,包括 stub 和 skeleton(在About目录中):
javac --.java About/--.java
启动一个MS-DOS命令解释器,输入以下命令,确保名字服务器处于运行状态:
tnameserv -ORBInitialPort 1050
启动另一个MS-Dos命令解释器,输入以下命令,启动Show服务器:
java ShowServer -ORBInitialPort 1050
再启动一个MS-Dos命令解释器Show应用程序客户机:
java ShowClient -ORBInitialPort 1050
  
这时屏幕上会出现“My name is Seymour!”的字样,说明实验已经成功了。  本示例程序在Windows 98、Java 1.2.2平台下实现。


分享到:
评论

相关推荐

    3使用Java开发CORBA

    下面我们将详细介绍如何使用Java开发CORBA应用。 1. **使用IDL创建接口** CORBA应用的基础是接口定义语言(Interface Definition Language,IDL),它用于定义对象接口,以便于不同平台和语言之间的互操作性。例如...

    java_CORBA.rar_CORBA java_Java CORBA_corba

    这对于理解分布式系统和企业级Java应用的开发非常有帮助,尤其是在需要跨平台交互的场景下。同时,CORBA的知识也能帮助你理解其他分布式计算框架,如JMS(Java消息服务)和EJB(企业级Java Bean)的工作原理。

    java 开发 CORBA例子,可以运行

    标题“Java开发CORBA例子,可以运行”表明我们有一个实际的示例项目,可以用来学习和理解如何在Java中实现CORBA。这个例子应该是完整的,包括了必要的代码和配置,可以直接运行,帮助开发者直观地了解CORBA的工作...

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

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

    介绍corba使用和java的集成

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

    开发CORBA应用实例

    ### 开发CORBA应用实例知识点详解 #### 一、CORBA简介 CORBA(Common Object Request Broker Architecture,通用对象请求代理系统)是一种面向分布式计算环境的标准接口,它允许不同的应用程序通过网络互相通信,...

    JAVA corba编写例子

    #### 三、JAVA CORBA应用实例:服务端与客户端搭建 在搭建JAVA CORBA服务端与客户端的过程中,以下步骤是基本的流程: 1. **定义IDL文件**:首先,需要定义一个IDL文件来描述服务端接口,例如`Show.idl`。 ```idl...

    Java与Corba客户服务器编程2

    Java的平台独立性和丰富的类库使其成为开发CORBA应用的理想选择。CORBA为Java应用程序提供了一种统一的方法来访问远程对象和服务,这使得开发者可以在不同的系统之间轻松地构建和部署服务。 #### 三、CORBA的关键...

    java-Corba编程技术

    CORBA 提供了一种平台和语言无关的解决方案,允许开发者使用不同的编程语言在不同的操作系统上构建和连接分布式应用。通过ORB(Object Request Broker,对象请求代理),客户端可以透明地调用远程服务器上的对象方法...

    Java与Corba客户服务器编程4

    Java支持多线程、网络功能以及动态类加载等特性,使其非常适合于开发分布式应用。 ##### 1.2 CORBA概述 CORBA(Common Object Request Broker Architecture)即通用对象请求代理系统,是由OMG(Object Management ...

    Lotus Domino Designer 6 Programming Guide, Volume 3_ Java_CORBA Classes

    这份指南对于那些希望深入了解并利用Java和CORBA技术来扩展和定制Lotus Domino应用的开发人员来说,是一份宝贵的资源。 ### 关键知识点概述 #### 1. **Java在Lotus Domino中的角色** Java作为一种广泛使用的编程...

    corba实例(java版)

    要创建一个简单的CORBA应用,我们首先需要定义接口,这通常通过IDL(Interface Definition Language)完成。例如,我们可以创建一个名为`Hello.idl`的文件,定义一个简单的`Hello`接口: ```idl interface Hello { ...

    Java Corba 复习及开发文档

    Java CORBA(Common Object Request Broker Architecture,...借助Eclipse这样的集成开发环境,开发者可以更高效地实现CORBA应用的开发和调试。尽管学习成本较高,但其灵活性和跨平台特性使其在特定场景下仍具有价值。

    CORBA技术及实例.rar_Java CORBA_corba_corba java_corba simple example_

    在"www.pudn.com.txt"和"CORBA技术及实例.txt"文件中,可能包含了具体的步骤和示例代码,例如如何创建一个简单的CORBA应用,可能包括以下步骤: 1. 定义IDL接口:首先,你需要编写一个IDL文件,声明你要在CORBA环境...

    CORBA.rar_Java CORBA_corba

    在Java环境中,Java CORBA允许开发者利用Java语言构建基于CORBA的分布式应用程序。 1. **Java CORBA基础概念** - 对象请求代理ORB(Object Request Broker):它是CORBA的核心,负责对象之间的通信。ORB将本地调用...

    开发技术-Java基于CORBAJava对象负载均衡的研究.zip

    在IT行业中,Java是一种广泛应用的编程语言,尤其在企业级应用开发中占据着主导地位。当我们谈论"开发技术-Java基于CORBAJava对象负载均衡的研究"时,这涉及到两个核心概念:CORBA(Common Object Request Broker ...

    corba.rar_Java CORBA_corba_corba p

    Java CORBA,全称为Java Common Object Request Broker Architecture(Java通用对象请求代理体系结构),是一种中间件技术,允许不同网络环境下的分布式应用程序之间进行交互。它提供了标准接口,使得跨平台的组件...

    JAVA_CORBA.rar_corba_分布式对象

    Java CORBA是一种强大的技术,它允许不同的软件应用程序在不同的计算机上相互通信,仿佛它们都在同一台机器上运行。这个技术是基于Common Object Request Broker Architecture(公共对象请求代理架构)的概念,使得...

Global site tag (gtag.js) - Google Analytics