隨筆-37  評(píng)論-58  文章-4  trackbacks-0

                  新公司要求用corba做電信項(xiàng)目,汗,以前偶是寫J2EE的,框架用多了,忽然轉(zhuǎn)做corba,覺得很不習(xí)慣,壓力也很大。網(wǎng)上找了很多,但都沒有合適的corba程序,自己用了兩天才寫了第一個(gè)hello world程序,不知道是自己的學(xué)習(xí)能力下降,還是corba的學(xué)習(xí)曲線太陡峭。。。以下就是我寫的第一個(gè)corba程序,好了,不廢話了,轉(zhuǎn)入正題:
                   關(guān)于corba的介紹我就不多說了,網(wǎng)上那么多專家給的概念,自己google一下,隨便點(diǎn)個(gè)了解下就行了。
                   我們公司用的IDL編譯器是Orbacus,首先寫一個(gè)IDL文件,文件名為:hello.idl以下是源碼:
          //IDL
             module test{
                  interface Hello{
                       void sayHello();
                  };
              };
          將IDL文件copy到編譯器的bin目錄下,然后打開MS-DOS窗口,轉(zhuǎn)換到你的編譯器的bin目錄下輸入命令jidl,如圖:
          jidl命令的參數(shù)最好輸入文件全名(包括后綴),這時(shí)候會(huì)在該目錄下生成一個(gè)test目錄,在test目錄下創(chuàng)建一個(gè)Hello_Impl.java文件,代碼如下:
          package test;

          public class Hello_impl extends HelloPOA {
           public void sayHello(){
            System.out.println("Hello World");
           }
          }
          它實(shí)現(xiàn)了sayHello()方法。


          接著創(chuàng)建一個(gè)工具類,文件名為ORBImpl.java(注意包目錄結(jié)構(gòu)哦),代碼如下:
          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;
           }
          }


          然后創(chuàng)建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();
           }
          }


          終于到了最后一步了,創(chuàng)建客戶端文件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窗口,轉(zhuǎn)換到你的編譯器的bin目錄下,輸入命令javac test/*.java編譯所有test目錄下的文件:


          接著輸入命令java test.Server啟動(dòng)服務(wù)器:


          重新開啟一個(gè)窗口,輸入java test.Client啟動(dòng)客戶端調(diào)用服務(wù)器方法:


          接著會(huì)在服務(wù)器的窗口打印出結(jié)果:



          在編譯運(yùn)行的時(shí)候,記得使用JDK1.3版本的那樣可以直接設(shè)置classpath,如果是1.4版本,記得要使用java -Xbootclasspath/p:命令將OB.jar包含進(jìn)來(偶就是用的1.4的。。。)

          這篇文章希望能對(duì)你有用哦~
          posted on 2007-07-27 12:51 楓中玎玲 閱讀(987) 評(píng)論(3)  編輯  收藏 所屬分類: Corba

          評(píng)論:
          # re: 第一個(gè)corba的Hello World~ 2007-08-12 17:23 | dreamstone
          可以試試ice還不錯(cuò)  回復(fù)  更多評(píng)論
            
          # re: 第一個(gè)corba的Hello World~[未登錄] 2008-08-27 13:55 | 陽光
          OB.jar是從哪里獲得的?我下載了一個(gè)orbacus,但里面沒有l(wèi)ib包啊  回復(fù)  更多評(píng)論
            
          # re: 第一個(gè)corba的Hello World~ 2012-09-13 20:10 | 長(zhǎng)沙婚慶公司
          寫的很不錯(cuò)。。 前來支持一下啦。。 http://www.jiehunsa.com  回復(fù)  更多評(píng)論
            

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 广平县| 洛扎县| 辽阳县| 闽侯县| 台南县| 团风县| 称多县| 临海市| 蓬溪县| 万全县| 慈利县| 宣武区| 唐河县| 思南县| 澄江县| 闽侯县| 永安市| 佳木斯市| 牡丹江市| 乌拉特中旗| 中阳县| 石河子市| 宜川县| 大方县| 寻乌县| 大余县| 高州市| 淳安县| 苗栗市| 赞皇县| 舞阳县| 滦南县| 泸溪县| 本溪| 青阳县| 广宁县| 亚东县| 新竹县| 襄汾县| 无锡市| 义乌市|