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

【CORBA示例】

阅读更多

如果想开发一个CORBA的Helloworld,基本上有以下几个步骤:

1.使用idl语言开发idl文件,这个文件中描述了接口的定义

 

module:对应了java中的package

interface:对应了java中的interface,HelloWorld即接口名称

sayHello:对应了java中interface声明的方法

string:对应了java中方法的返回值



 

2.使用java中的idlj命令,将idl语言翻译成java语言,并生成java代码

idlj -fall m.idl 

 

idlj:java自带的工具

-fall:生成server和client端代码,也可以单独生成server或client

 

下面包含了6个java源文件,分述如下: 

HelloPOA POA指的是Portable Object Adapter(轻便对象适配器)。这个抽象类是一个基于流的服务器端骨架,提供了服务器端基本的CORBA功能。

_HelloSutb 客户端的存根类,为客户端提供了CORBA功能。

Hello 这是java版的Hello接口,它提供了标准的CORBA对象功能。

HelloHelper 这是一个辅助类,负责向CORBA流中写入或读取对象。

HelloHolder 这是一个final类,它持有一个public的Hello实例变量。它用来操作CORBA输入输出流的参数。

HelloOperations 这个类才是我们所预想的那个接口,只包含我们定义的那个方法,不包含CORBA的任何东西。

 

 

3、开发server端的代码

实现是在server端的,需要继承自的HelloWorldPOA

copy六个存根文件到Server项目中

1)接口实现类

package server;  

  

import helloworld.HelloWorldPOA;  

 

/** 

 * 服务器端的实现代码 

 * 

 */  

public class HelloWorldImpl extends HelloWorldPOA {  

  

    @Override  

    public String sayHello() {  

          

        return "Hello World!12333";  //服务器端的实现代码

    }  

  

}  

 

2)服务类

package server;

 

import org.omg.CORBA.ORB;

import org.omg.CORBA.ORBPackage.InvalidName;

import org.omg.CosNaming.NameComponent;

import org.omg.CosNaming.NamingContextExt;

import org.omg.CosNaming.NamingContextExtHelper;

import org.omg.CosNaming.NamingContextPackage.CannotProceed;

import org.omg.CosNaming.NamingContextPackage.NotFound;

import org.omg.PortableServer.POA;

import org.omg.PortableServer.POAHelper;

import org.omg.PortableServer.POAManagerPackage.AdapterInactive;

import org.omg.PortableServer.POAPackage.ServantNotActive;

import org.omg.PortableServer.POAPackage.WrongPolicy;

 

import helloworld.HelloWorld;

import helloworld.HelloWorldHelper;

 

public class HelloServer {  

    public static void main(String[] args) throws ServantNotActive, WrongPolicy, InvalidName, AdapterInactive, org.omg.CosNaming.NamingContextPackage.InvalidName, NotFound, CannotProceed {  

        //指定ORB的端口号 -ORBInitialPort 1050  

        args = new String[2];  

        args[0] = "-ORBInitialPort";  

        args[1] = "1050";  

           

        //创建一个ORB实例  

        ORB orb = ORB.init(args, null);  

           

        //拿到RootPOA的引用,并激活POAManager,相当于启动了server  

        org.omg.CORBA.Object obj=orb.resolve_initial_references("RootPOA");  

        POA rootpoa = POAHelper.narrow(obj);  

        rootpoa.the_POAManager().activate();  

           

        //创建一个HelloWorldImpl实例  

        HelloWorldImpl helloImpl = new HelloWorldImpl();  

          

        //从服务中得到对象的引用,并注册到服务中  

        org.omg.CORBA.Object ref = rootpoa.servant_to_reference(helloImpl);  

        HelloWorld href = HelloWorldHelper.narrow(ref);  

           

        //得到一个根名称的上下文  

        org.omg.CORBA.Object objRef = orb.resolve_initial_references("NameService");  

        NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);  

          

        //在命名上下文中绑定这个对象  

        String name = "Hello";  

        NameComponent path[] = ncRef.to_name(name);  

        ncRef.rebind(path, href);  

          

        //启动线程服务,等待客户端调用  

        orb.run();  

          

        System.out.println("server startup...");  

    }  

}  

4、开发client端的代码

server端的实现与服务监听都已经做完,现在需要写一个client来调用server的方法

copy六个存根文件到client项目中

package client;

import helloworld.HelloWorld;  

import helloworld.HelloWorldHelper;  

  

import org.omg.CORBA.ORB;  

import org.omg.CORBA.ORBPackage.InvalidName;  

import org.omg.CosNaming.NamingContextExt;  

import org.omg.CosNaming.NamingContextExtHelper;  

import org.omg.CosNaming.NamingContextPackage.CannotProceed;  

import org.omg.CosNaming.NamingContextPackage.NotFound;  

  

  

public class HelloClient {  

    static HelloWorld helloWorldImpl;  

       

    static {  

        System.out.println("client开始连接server.......");  

           

        //初始化ip和端口号,-ORBInitialHost 127.0.0.1 -ORBInitialPort 1050  

        String args[] = new String[4];  

        args[0] = "-ORBInitialHost";  

        //server端的IP地址,在HelloServer中定义的  

        args[1] = "127.0.0.1";  

        args[2] = "-ORBInitialPort";  

        //server端的端口,在HelloServer中定义的  

        args[3] = "1050";  

           

        //创建一个ORB实例  

        ORB orb = ORB.init(args, null);  

           

        // 获取根名称上下文  

        org.omg.CORBA.Object objRef = null;  

        try {  

        objRef = orb.resolve_initial_references("NameService");  

        } catch (InvalidName e) {  

            e.printStackTrace();  

        }  

        NamingContextExt neRef = NamingContextExtHelper.narrow(objRef);  

           

        String name = "Hello";  

        try {  

              

            //通过ORB拿到了server实例化好的实现类  

            helloWorldImpl = HelloWorldHelper.narrow(neRef.resolve_str(name));  

        } catch (NotFound e) {  

            e.printStackTrace();  

        } catch (CannotProceed e) {  

            e.printStackTrace();  

        } catch (org.omg.CosNaming.NamingContextPackage.InvalidName e) {  

            e.printStackTrace();  

        }  

           

        System.out.println("client connected server.......");  

    }  

       

    public static void main(String args[]) throws Exception {  

        sayHello();  

    }  

       

    //调用实现类的方法  

    public static void sayHello() {  

        String str = helloWorldImpl.sayHello();  

        System.out.println(str);  

    }  

}  

 

5.启动orbd服务

仅仅创建了server和client的代码还不足以跑起来一个HelloWorld,还需要启动一个orbd服务,orbd包含自启动服务、透明的命名服务、持久化命名服务和命名管理器的后台处理进程。

orbd -ORBInitialPort 1050 -ORBInitialHost 127.0.0.1  

 

 

6、启动server服务

 

7.启动client

  • 大小: 56.6 KB
  • m.rar (151 Bytes)
  • 下载次数: 0
0
1
分享到:
评论

相关推荐

    【推荐】CORBA示例代码

    **CORBA示例代码解析** 在提供的压缩包文件"crypt_service"中,可能包含了一个使用CORBA实现的加密服务示例。通常,这样的示例会涉及以下步骤: 1. 定义服务接口:使用IDL定义加密服务的接口,例如包含加密和解密...

    CORBA Hello World 实例

    **CORBA Hello World 实例详解** CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)是一种中间件技术,用于构建分布式系统,使得不同计算机上的软件对象能够相互通信,仿佛它们都在同一台...

    java_CORBA.rar_CORBA java_Java CORBA_corba

    通常,一个简单的CORBA示例会包含以下组件: 1. IDL文件:定义了跨进程通信的接口,可以被编译为Java接口。 2. 服务器端代码:实现接口,并通过ORB注册,以便客户端可以找到并调用。 3. 客户端代码:创建ORB,查找...

    java 开发 CORBA例子,可以运行

    在压缩包文件名为"CORBATEST"的情况下,我们可以推测这可能是一个包含了整个CORBA示例项目的文件夹,其中可能包含以下内容: 1. **源代码**:Java源文件,定义了ORB(对象请求代理)、IR(接口库)、GIOP(通用对象...

    CORBA.rar_Java CORBA_corba

    这个“CORBA.rar”压缩包包含了一些基础的Java CORBA示例,是学习和理解CORBA技术的良好起点。 CORBA是由OMG(Object Management Group,对象管理组织)制定的一种开放标准,它的目标是提供跨平台、跨语言的透明性...

    Java_Corba编程技术.pdf

    这里提供了一个简单的CORBA示例,演示了如何使用CORBA实现客户端从服务器获取时间的功能。 #### 五、接口文件CorbaDemo.idl ```idl module TheDateApp { interface TheDate { string getTheDate(); }; }; ``` ...

    Delphi Corba资源 三层

    - Delphi的Corba示例代码,演示如何创建ORB,注册和调用远程对象。 - 三层架构的模板项目,展示如何划分和实现各层。 - 相关的库文件和ORB实现,如Torry's Delphi Pages上的开源Corba实现。 - 文档和教程,解释如何...

    Introduction to Java Distributed Objects - Using RMI and CORBA.pdf

    #### CORBA示例 下面是一个使用CORBA的简化示例,展示如何定义IDL接口和服务,并使用JDK 1.2的ORB来实现和发布这些服务: ```java import org.omg.CORBA.ORB; import org.omg.CosNaming.NamingContextExt; import ...

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

    **CORBA核心规范——一个简单的CORBA/Java示例** **一、CORBA基础** **CORBA(Common Object Request Broker Architecture)**,即公共对象请求代理架构,是一种跨平台、跨语言的分布式计算模型,旨在解决不同系统...

    CORBA-Example:中间件实验 CORBA

    这个CORBA示例帮助我们理解了如何在Java中使用CORBA实现分布式对象通信。通过这样的实验,我们可以学习到CORBA的基本概念、组件以及它们在实际开发中的应用。理解并熟练掌握这些知识对于构建分布式系统和跨平台应用...

    CORBA-Example:使用Java的简单CORBA实现

    CORBA示例 使用Java的简单CORBA实现 指示 1.写入IDL文件 IDL文件定义客户端和服务器将用于通信和传递对象的接口。 编译IDL文件时,它将生成许多文件,称为存根和框架: 客户端使用存根与服务器进行通信 服务器使用...

    corba:CORBA 作业

    这是一个简单的 CORBA 示例(没什么特别的)。 一般要求是: *) 创建一个生成随机矩阵并将其发送到服务器的客户端应用程序 *) 创建一个接收 2 个矩阵并将它们相乘的服务器(将结果发送给两个客户端) 为了运行该...

    corba 基于对象字符串的对象引用获取示例程序

    CORBA(Common Object Request Broker ...通过这个示例,开发者可以学习到如何在Python中使用OmniORB这样的ORB实现进行CORBA通信,并且能够处理和操作对象引用,这对于构建可扩展和高可用性的分布式应用程序至关重要。

    一个corba应用程序例子.pdf

    - **定义示例:** 在`Bank.idl`文件中,定义了两个主要接口:`Account` 和 `AccountManager`。 - `Account` 接口定义了一个名为 `balance()` 的方法,该方法用于获取账户的当前余额。 - `AccountManager` 接口定义...

    com 与corba 本质与互用

    CORBA支持多种传输协议和编码格式,如IIOP(Internet Inter-ORB Protocol)和GIOP(General Inter-ORB Protocol),确保了跨网络和系统的互操作性。 当涉及到COM与CORBA的互用时,由于它们的设计理念和实现机制不同...

    corba程序源代码

    【描述】:这些源代码示例涵盖了多个使用CORBA(Common Object Request Broker Architecture)技术的程序,包括Java RMI(Remote Method Invocation)、Inprocess通信、简单的HELLO世界示例、基础的CORBA实现以及...

    CORBA命名服务编程实例C++(SSD8Exercise5)

    **CORBA命名服务编程实例C++(SSD8Exercise5)** **一、CORBA基础** CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)是一种标准的分布式计算框架,它允许不同操作系统、网络环境下的对象...

    jacorb开发

    通过以上步骤,您可以在 Windows 7 系统下完成 JacORB 的安装与配置,并成功创建并运行一个简单的 CORBA 示例程序。这不仅有助于加深对 JacORB 的理解,还能让您掌握如何在实际项目中运用这一技术。

Global site tag (gtag.js) - Google Analytics