CORBA平台 JacORB2.1 学习笔记--入门篇

原创 2004年07月06日 12:47:00
CORBA平台 JacORB2.1 学习笔记--入门篇

JacORB2.1 学习笔记--入门篇

JacORB是免费的Java对象请求代理系统(CORBA),附带全部源代码,包含大部分CORBA对象服务的实现,以及大量的代码实例。
下面将介绍如何运行它所带的DEMO,了解基本的JacOrb知识.

(假设您的系统为WIN2K/XP/NT,且已经安装jdk1.4.x 和 ANT工具)

 1 下载安装Jacorb2.1
      从http://www.jacorb.org/download.html下载JacORB_2_1-compact.zip(已经编译的版本),解压缩到磁盘上,例如C:/JacORB_2_1 .
      然后, 为了在调试时可以找到有关包和jacorb.properties配置文件,需要在系统环境变量中设置  classpath=.;C:/JacORB_2_1/idl.jar;C:/JacORB_2_1/jacorb.jar;C:/JacORB_2_1/classes;  另外,为了方便使用ant和命令行工具,在path中加入C:/JacORB_2_1/bin
      接着,把C:/JacORB_2_1/etc目录下的jacorb_properties.template复制到C:/JacORB_2_1/classes目录下,并更名为jacorb.properties
      在Corba中命名服务是非常重要的, 编辑jacorb.properties文件,设置其中的 ORBInitRef.NameService=file:/c:/NS_Ref(这里是示例,当然可以为任何httpURL或者其他路径),这个NS_Ref文件会在启动命名服务时生成.该配置文件其余部分保留默认值即可.
     
 2 测试命名服务(NS,Naming Service)是否可以正常启动
      在dos窗口下输入 
      ns c:/NS_Ref
    如果出现下面的输出说明已经正常启动
    [configuration loaded from classpath resource file:/C:/JacORB_2_1/classes/jacorb.properties]
        JacORB V 2.1, www.jacorb.org
        (C) Gerald Brose, XTRADYNE Technologies/FU Berlin, 16-Feb-2004
    [jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1
        IORIs
    [jacorb.naming] INFO : NS up
    [jacorb.orb] INFO : ORB run


   如果没有任何输出,可能是由于你的jacorb.properties文件没有放到classpath所在的目录下。
   如果没有正确启动NS,运行下面的demo时会出现下面的异常
   [jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1 IORIs
   ....
   [jacorb.giop] INFO : ClientConnectionManager: created new conn to target 192.168.4.161:4089
   [jacorb] ERROR : java.net.ConnectException: Connection refused: connect

    
 3 idl编译DEMO下的grid例子
   观察
   正确启动NS后,DOS窗口转到demo/grid目录下执行ant   (如果ant没有安装则不会编译)   
     C:/JacORB_2_1/demo/grid >    ant     
   这样会进行idl编译server.idl文件,在C:/JacORB_2_1/demo/grid/generated下生成corba所需的源文件   
   同时,ant会编译所有的java源文件, C:/JacORB_2_1/classes下面生成.class文件     
4 运行grid例子,本例实现了一个简单的服务.
     4.1 首先参考第2步验证是否ns 已经正常启动.
     4.2 启动grid server
    在dos窗口中执行
         jaco demo.grid.Server
         或者
         jaco demo.grid.TieServer
    正常时输出:
    [configuration loaded from classpath resource file:/C:/JacORB_2_1/classes/jacorb.properties]
       JacORB V 2.1, www.jacorb.org
          (C) Gerald Brose, XTRADYNE Technologies/FU Berlin, 16-Feb-2004
            [jacorb.orb.intercept] INFO : InterceptorManager 
started with 0 SIs, 0 CIs and 1 IORIs
            [jacorb.poa] INFO : oid: 
    00 11 39 3D 4A 03 47 32 01 07 
B                            ..9=J.G2...
            object is activated
            [jacorb.giop] INFO : ClientConnectionManager: 
created new conn to target 192.168.4.161:4261
        [jacorb.iiop.conn] INFO : Connected to 192.168.4.161:4261 
from local port 4282
        [jacorb.orb] INFO : ORB run    
        
    这时在ns输出窗口可以看到:
     [jacorb.naming] INFO : Bound name: grid.example     
    另外,可以通过Jbuilder等IDE工具建立一个工程来运行demo.grid.Server,须指定vm参数-Djava.endorsed.dirs="C:/JacORB_2_1/lib",结果一致.
    
     4.3 启动grid client端
    jaco demo.grid.Client    
    输出结果:
    Height =  31
        Width = 14
        Old value at (30,13): 0.21
        Setting (30,13) to 470.11
        New value at (30,13): 470.11
        MyException, reason: This is only a test exception, no harm done :-)


看到这个结果说明已经成功运行了grid例子.

5 对照源码,下面我们将简单分析Grid例子:

JacORB的应用开发一般分为以下五步:
    1.写IDL接口定义
    2.编译IDL接口定义生成Java类
    3.实现步骤2中生成的接口
    4.写服务器启动类,并注册到ORB
    5.写客户端去获取服务对象引用

5.1  首先编写server.idl文件
关于编写IDL参考doc/ProgrammingGuide.pdf文档 

// grid.idl
// IDL defintion of a 2-D grid:
module demo
{
    module grid 
    { 
        interface MyServer
        {
             typedef fixed <5,2> fixedT;
           readonly attribute short height;  // height of the grid
             readonly attribute short width;   // width of the grid
           void set(in short n, in short m, in fixedT value);
             fixedT get(in short n, in short m);
             exception MyException
             {
               string why;
             };
            short opWithException() raises( MyException );
       };
    };
};

 5.2 利用工具 bin/idl.bat来编译server.idl
     idl -d ../.. server.idl
     
 5.3 实现接口
     public class gridImpl extends MyServerPOA
     
     填写构造函数,以及接口等方法,如:
     public gridImpl()
     public java.math.BigDecimal get(short n, short m)
     public void set(short n, short m, java.math.BigDecimal value)
     
 5.4 编写服务器
          这一步要写一个类来调用gridImpl类,并将其注册到POA,这样远程对象才能通过
MyServer接口来访问它。
        1)初始化orb对象。
        org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
        2)使用POAHelper来实例化为POA的引用。
        org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
        3)激活该对象,否则还处于“保持状态,”无法处理任何请求。
        poa.the_POAManager().activate();
        4)通过POA将一个Java对象转化成一个CORBA对象。
        org.omg.CORBA.Object o = poa.servant_to_reference(new gridImpl());
        5)使nc绑定该对象的引用(这一过程通过命名服务器来完成),注意使对象的名称作为bind()的参数
    NamingContextExt nc =  NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
    nc.bind( nc.to_name("grid.example"), o);

 5.5 编写客户端调用服务程序
    1)  创建orb对象
    org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
    2) 客户端通过命名服务器获取一个"grid"服务的引用
    NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
    grid = MyServerHelper.narrow(nc.resolve(nc.to_name("grid.example")));

    3) 使用grid对象进行我们的计算。
    
 《入门篇.完》
     

JacORB2.1 学习笔记--入门篇

 JacORB是免费的Java对象请求代理系统(CORBA),附带全部源代码,包含大部分CORBA对象服务的实现,以及大量的代码实例。下面将介绍如何运行它所带的DEMO,了解基本的JacOrb知识.(...
  • dolphin_notswim
  • dolphin_notswim
  • 2007年10月23日 21:52
  • 449

java构建简单的CORBA应用

本文转载自http://www.iteye.com/topic/174951,非常感谢原作者。 JAVA还提供了对CORBA(Common Object Request Broker Architec...
  • chjttony
  • chjttony
  • 2011年06月22日 16:35
  • 6254

J2EE、CORBA、DNA三种主流中间件平台比较

 一、概述  1.中间件的概念    随着计算机技术的飞速发展,各种各样的应用软件需要在各种平台之间进行移植,或者一个平台需要支持多种应用软件和管理多种应用系统,软、硬件平台和应用系统之间需要可靠和高...
  • aspdao
  • aspdao
  • 2009年03月09日 13:27
  • 884

使用java和CORBA实现分布应用编程

因为课程的需要,学习了下用java和CORBA来实现分布应用编程,具体的CORBA是什么以及它的框架结构我就不多说了,这里我是给出一个比较完整的例子来展示下代码要怎么写。应用背景:使用java和COR...
  • ancientmoondjay
  • ancientmoondjay
  • 2017年05月07日 21:26
  • 828

Java corba 实例

.NET 和 Java 在技术布局上非常类似,.NET 的远程调用经历了DCOM,.NET Remoting,最后是几乎成了.NET 平台SOA代名词的WCF.WCF的目标在于通过一种通用简单的协议来...
  • afandaafandaafanda
  • afandaafandaafanda
  • 2015年01月23日 12:03
  • 1953

RMI, RPC, CORBA区别

RMI 和 RPC均可以均提供远程方法访问的基础通信和参数引用要求的串行化机制,RPC和RMI之间的一个重要差别是RPC用快速而不够可靠的UDP协议,RMI用低速而可靠的TCP/IP协议。另外 RMI...
  • AbnerChai
  • AbnerChai
  • 2012年06月14日 11:02
  • 2115

软件架构之一 -------CORBA

CORBA、DCOM、WebService 一、公共对象请求代理体系结构   (CORBA)         CORBA(Common Object Request Broker Ar...
  • shuilaner_
  • shuilaner_
  • 2014年10月28日 23:21
  • 1172

分布式技术比较(RPC,CORBA,WebService)

1、RPC(Remote Procedure Call Protocol) RPC是由Sun发明的远程过程调用协议,是第一种真正的分布式应用模型。面向过程 2、CORBA(Co...
  • after_
  • after_
  • 2014年01月07日 21:30
  • 1672

CORBA基本概念、函数

摘要: 简要介绍CORBA规范定义的几个常用基本方法的功能及应用中需要注意的问题。 正文: idl编译器会为每个在idl中声明的interface生成一个对应的代理基类: cl...
  • u012719556
  • u012719556
  • 2013年11月20日 09:22
  • 1482

C++、CORBA版HelloWorld程序

环境:Windows XP, MICO2.3.12, Visual Studio 2003 开发步骤: A 编译MICO B 设置VC开发环境 C 编写编译IDL接口 D 编写编译服务端程序...
  • u012719556
  • u012719556
  • 2014年01月23日 13:53
  • 1453
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CORBA平台 JacORB2.1 学习笔记--入门篇
举报原因:
原因补充:

(最多只允许输入30个字)