随笔-37  评论-58  文章-4  trackbacks-0

        新公司要求用corba做电信项目,汗,以前偶是写J2EE的,框架用多了,忽然转做corba,觉得很不习惯,压力也很大。网上找了很多,但都没有合适的corba程序,自己用了两天才写了第一个hello world程序,不知道是自己的学习能力下降,还是corba的学习曲线太陡峭。。。以下就是我写的第一个corba程序,好了,不废话了,转入正题:
         关于corba的介绍我就不多说了,网上那么多专家给的概念,自己google一下,随便点个了解下就行了。
         我们公司用的IDL编译器是Orbacus,首先写一个IDL文件,文件名为:hello.idl以下是源码:
//IDL
   module test{
        interface Hello{
             void sayHello();
        };
    };
将IDL文件copy到编译器的bin目录下,然后打开MS-DOS窗口,转换到你的编译器的bin目录下输入命令jidl,如图:
jidl命令的参数最好输入文件全名(包括后缀),这时候会在该目录下生成一个test目录,在test目录下创建一个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();
 }
}

打开MS-DOS窗口,转换到你的编译器的bin目录下,输入命令javac test/*.java编译所有test目录下的文件:


接着输入命令java test.Server启动服务器:


重新开启一个窗口,输入java test.Client启动客户端调用服务器方法:


接着会在服务器的窗口打印出结果:



在编译运行的时候,记得使用JDK1.3版本的那样可以直接设置classpath,如果是1.4版本,记得要使用java -Xbootclasspath/p:命令将OB.jar包含进来(偶就是用的1.4的。。。)

这篇文章希望能对你有用哦~
posted on 2007-07-27 12:51 枫中玎玲 阅读(969) 评论(3)  编辑  收藏 所属分类: Corba

评论:
# re: 第一个corba的Hello World~ 2007-08-12 17:23 | dreamstone
可以试试ice还不错  回复  更多评论
  
# re: 第一个corba的Hello World~[未登录] 2008-08-27 13:55 | 阳光
OB.jar是从哪里获得的?我下载了一个orbacus,但里面没有lib包啊  回复  更多评论
  
# re: 第一个corba的Hello World~ 2012-09-13 20:10 | 长沙婚庆公司
写的很不错。。 前来支持一下啦。。 http://www.jiehunsa.com  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: