Java Corba实例 (原作者:紫溪)

转载 2007年09月12日 15:18:00

这篇文章和SUN公司提供的教程类似,中间多了一个HelloImpl的java文件,编译时的命令也就有所不同了

原来的命令为:Server  javac HelloServer.java HelloApp/*.java

                            Client  javac HelloClient.java HelloApp/*.java


现在的命令可以看下文

下载并设置java platform这里就不详细讲了。

这里以一个java的corba实例说明corba这种c-s结构的程序的实现。

NB:这篇文章虽然是用java语言写的,但是由于corba的多语言特性,idl文件即可以用java编译器编译,也可以使用其他支持corba的语言编译例如c#.  把以下的java 格式改成c#风格照样可以使用。而且c-s没什么联系,你也可以用c#写server,用java写client,这就是corba强悍的地方!

1)首先要熟悉idlj 语言,这个是专门进行接口设计的语言,它与java没关系,有自己的语法,具体的规则需要大家自己再网上研究,这里不多说了(或者访问如下网站详细察看http://www.iona.com/support/docs/manuals/orbix/33/html/orbix33cxx_pguide/IDL.html)。

module HelloApp
{
  
 interface Hello
    {
        string sayHello();
        oneway void shutdown();
     };
};

这里定义了一个简单的interface, 将其保存为hello.idl, 然后再dos命令框里面输入 idlj.exe -fall hello.idl 编译。之后会出现一个叫做HelloApp的目录,corba就是通过这个目录里面的类来进行c-s之间的数据沟通。

2)下一步,就是我们的server端:

// A server for the Hello object

import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;

public class HelloServer {

  public static void main(String args[]) {
    try{
      // create and initialize the ORB
      ORB orb = ORB.init(args, null);

      // get reference to rootpoa & activate the POAManager
      POA rootpoa =
        (POA)orb.resolve_initial_references("RootPOA");
      rootpoa.the_POAManager().activate();

      // create servant and register it with the ORB
      HelloImpl helloImpl = new HelloImpl();
      helloImpl.setORB(orb);

      // get object reference from the servant
      org.omg.CORBA.Object ref =
        rootpoa.servant_to_reference(helloImpl);


      // and cast the reference to a CORBA reference
      Hello href = HelloHelper.narrow(ref);
  
      // get the root naming context
      // NameService invokes the transient name service
      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);

      // bind the Object Reference in Naming
      String name = "Hello1";
      NameComponent path[] = ncRef.to_name( name );
      ncRef.rebind(path, href);

      System.out.println
        ("HelloServer ready and waiting ...");

      // wait for invocations from clients
      orb.run();
    }
 
      catch (Exception e) {
        System.err.println("ERROR: " + e);
        e.printStackTrace(System.out);
      }
  
      System.out.println("HelloServer Exiting ...");
 
  } //end main
} // end class

将其保存为HelloServer.java.放在刚才的hello.idl的目录。编译这个文件就不多说了。

3)还记得在hello中定义的interface吗?我们需要对自己定义的接口中的方法进行实现,因此HelloImp.java

// The servant -- object implementation -- for the Hello
// example.  Note that this is a subclass of HelloPOA, whose
// source file is generated from the compilation of
// Hello.idl using j2idl.

import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;

import java.util.Properties;

class HelloImpl extends HelloPOA //必须继承这个类,在helloApp目录中已自动生成

 {
  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);
  }
} //end class
同样放在server所在目录中。

4)接下来是客户端(HelloClient.java):

// A sample Java IDL object client application.
import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class HelloClient
{
  static Hello helloImpl;
  String [] x=new String[6];
  public static void main(String args[]){
     try{
        // create and initialize the ORB
      ORB orb = ORB.init(args, null);

        System.out.println("ORB initialised/n");

        // get the root naming context
        org.omg.CORBA.Object objRef =
      orb.resolve_initial_references("NameService");

        // Use NamingContextExt instead of NamingContext,
        // part of the Interoperable naming Service. 
        NamingContextExt ncRef =
          NamingContextExtHelper.narrow(objRef);
 
        // resolve the Object Reference in Naming
        String name = "Hello1";
        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);
   }
  } //end main

} // end class


这个文件最好放在一个新建的目录,已表示和server有区别,放在一起也没有关系。如果分开的话,记着把HelloApp这个目录复制到client的目录来。

5)好啦!已经可以开始爽了,我们编译所有的java文件

6)再dos窗口输入orbd.exe –ORBInitialPort 1234(端口号可以自定义,但是记得s-c要保持一致),启动corba服务。

7)启动服务器:java HelloServer –ORBInitialPort 1234 –ORBInitialHost localhost

8)启动客户端:java HelloClient –ORBInitialPort 1234 –ORBInitialHost localhost

9)严格执行上述过程是应该直接成功的。 已经经过测试。

10)然后再仔细研究这段代码,你就会发现corba的奥秘了。 

java构建简单的CORBA应用

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

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

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

Corba开发之基于Java实现Service与Client

1      概述 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程 序体系规范...
  • vtopqx
  • vtopqx
  • 2015年11月15日 14:25
  • 1565

Java corba 实例

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

java CORBA的小例子

  • 2018年01月21日 13:19
  • 7KB
  • 下载

Corba开发之Eclipse环境配置

1  概述: 由于最近开发中需要用到Java与硬件的接口数据交互,所以决定用Eclipse工具来开发数据交互接口,以下是开发之前Eclipse的相关插件安装和配置。   2      ORBStu...
  • vtopqx
  • vtopqx
  • 2015年11月15日 14:09
  • 1853

CORBA技术和Java技术的结合-Java IDL

一、什么是Java IDL----Java IDL(Interface Definition Language)可实现网络上不同平台上的对象相互之间的交互,该技术基于通用对象请求代理体系结构CORBA...
  • dolphin_notswim
  • dolphin_notswim
  • 2007年10月23日 21:44
  • 2946

CORBA的简单介绍及HelloWorld

CORBA概述 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构)是由OMG组织制订的一种标准的面向对象应用程 序体系规范。或...
  • DryKillLogic
  • DryKillLogic
  • 2014年05月16日 16:31
  • 11689

亲身体验CORBA: 使用java和C++混合编程

文作者通过一次使用SUN的 tnameserv命名服务程序,服务器用JAVA编写,客户机分别用JAVA和C++(VC6+omniORB)编写的试验,希望通过一次编程的具体操作实例来体验或明了CORBA...
  • u011676589
  • u011676589
  • 2014年06月09日 15:02
  • 1406

JAVA&CORBA详解

Java IDL技术在Java平台上添加了CORBA(Common Object Request Broker Architecture)功能,提供了基于标准的互操作能力和连接性。Java IDL技术...
  • zacklin
  • zacklin
  • 2012年11月21日 13:38
  • 1307
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java Corba实例 (原作者:紫溪)
举报原因:
原因补充:

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