<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-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 楓中玎玲 閱讀(983) 評論(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  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 国产色爽免费视频| 成人无码区免费A片视频WWW| 青青久久精品国产免费看| 久久精品国产亚洲av天美18| 亚洲国产区男人本色| 亚洲国产精品无码久久| 亚洲а∨精品天堂在线| 精品国产日韩亚洲一区91 | 久久精品女人天堂AV免费观看| 2021免费日韩视频网| 国产成人精品免费视| 久久久久久精品免费免费自慰| 2021国产精品成人免费视频| 亚洲精品免费网站| 在线免费观看一区二区三区| 蜜臀91精品国产免费观看| 免费A级毛片在线播放不收费| 四虎精品亚洲一区二区三区| 亚洲精品国精品久久99热| 国产AⅤ无码专区亚洲AV| 国产AV无码专区亚洲Av| 久久久亚洲欧洲日产国码二区| 亚洲国产夜色在线观看| 亚洲人成网站在线在线观看| 四虎在线视频免费观看| 国产一级理论免费版| 在线亚洲精品福利网址导航| 久久亚洲国产精品| 国产成人亚洲合集青青草原精品| 亚洲精品乱码久久久久久V| 永久免费无码网站在线观看个| 中文字幕在线免费视频| 亚洲一区免费在线观看| 日韩成人免费在线| 国产亚洲av片在线观看18女人| 亚洲久本草在线中文字幕| 中文有码亚洲制服av片| 亚州**色毛片免费观看| 人妻无码久久一区二区三区免费| 最近中文字幕免费mv视频8| 国产亚洲精品精品国产亚洲综合|