一般java开发corba使用的工具是jacORB

JacORB的应用开发一般分为以下五步:

1.写IDL接口定义

2.编译IDL接口定义生成Java类

3.实现步骤2中生成的接口

4.写服务器启动类,并注册到ORB

5.写客户端去获取服务对象引用

corba两中调用方式:

第一种方式:根据server生成的IDL以及IOR文件,交给客户端,客户端根据这IOR文件来定位server,然后根据IDL接口生成自己的调用代码(本例中是JAVA,当然也可以自己用别的语言来实现)

第二种方式:根据Naming Service 的方式来定位server,有点类似于JNDI的方式,有个Naming Server ,server端把一些服务注册上去,client从naming server来找这些服务.

 

编写一个简单的corba,首先你必须有一个IDL文件.

  编写IDL文件你可以使用jacorb工具.

下面是一个sqlcon.idl的源码:

//IDL

   module test{

        interface Hello{

             void sayHello();

        };

    };

生成一个名为sqlcon.idl的IDL文件,执行命令jidl sqlcon.idl,执行后会成生一个目录,目录里面有一些接口定义

编写Hello_Impl.java文件,里面包含了事件方法

package test;

public class Hello_impl extends HelloPOA {
 public void sayHello(){
  System.out.println("Hello World");
 }
}
它实现了sayHello()方法。


接着创建一个工具类,文件名为ORBImpl.java(注意包目录结构哦),代码如下:
package test.common;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

import org.omg.CORBA.ORB;
import org.omg.CORBA.Object;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import org.omg.PortableServer.POAManager;

import test.Hello;
import test.HelloHelper;

public class ORBImpl {
 
 private ORB orb;
 private POA poaRoot;
 private POAManager poaManager;
 private Object poaObj;
 
 public ORBImpl(){
  orb = null;
  poaRoot = null;
  poaManager = null;
  poaObj = null;
 }
 
 public void initEnv(String[]args){
  Properties props = System.getProperties();
  props.put("org.omg.CORBA.ORBClass","com.ooc.CORBA.ORB");
  props.put("org.omg.CORBA.ORBSingletonClass","com.ooc.CORBA.ORBSingleton");
  
  try{
   orb = ORB.init(args,props);
  }catch(Exception ex){
   ex.printStackTrace();
  }
 }
 
 public void initServer(){
  try{
   poaObj = orb.resolve_initial_references("RootPOA");
   poaRoot = POAHelper.narrow(poaObj);
   poaManager = poaRoot.the_POAManager();
  }catch(Exception ex){
   ex.printStackTrace();
  }
 }
 
 public void serverGo(Hello hello){
  try{
   String fileName = "Hello.ref";
   String strClient = orb.object_to_string(hello);
   PrintWriter out = new PrintWriter(new FileOutputStream(fileName));
   out.print(strClient);
   out.close();
  }catch(IOException ex){
   ex.printStackTrace();
  }
 }
 
 public void clientGo(){
  Object clientObj = null;
  try{
   String fileName = "Hello.ref";
   BufferedReader in = new BufferedReader(new FileReader(fileName));
   String strClient = in.readLine();
   clientObj = orb.string_to_object(strClient);
  }catch(IOException ex){
   ex.printStackTrace();
  }
  Hello hello = HelloHelper.narrow(clientObj);
  hello.sayHello();
 }
 
 public void destroy(){
  if(orb != null){
   try{
    orb.destroy();
   }catch(Exception ex){
    ex.printStackTrace();
    System.exit(0);
   }
  }
 }
 
 public void active(){
  try{
   poaManager.activate();
   orb.run();
  }catch(Exception ex){
   ex.printStackTrace();
   System.exit(0);
  }
 }
 
 public ORB getORBRoot(){
  return this.orb;
 }
}


然后创建Server.java文件,代码如下:
package test;

import test.common.ORBImpl;

public class Server {
 public static void main(String[]args){
  ORBImpl server = new ORBImpl();
  server.initEnv(args);
  server.initServer();
  
  Hello_impl helloImpl = new Hello_impl();
  Hello hello = helloImpl._this(server.getORBRoot());
  server.serverGo(hello);
  server.active();
  server.destroy();
 }
}


终于到了最后一步了,创建客户端文件Client.java,代码如下:
package test;

import test.common.ORBImpl;

public class Client {
 
 public static void main(String[]args){
  ORBImpl client = new ORBImpl();
  client.initEnv(args);
  client.clientGo();
  client.destroy();
 }
}

以上就是一个简单corba所包含的内容.