Jacorb 安裝與設定

來源:互聯網
上載者:User

 1. 下載安裝Jacorb2.1
     
下載JacORB_2_1-compact.zip(已經編譯的版本),解壓縮到磁碟上,例如 E:/JacORB .     
然後, 為了在調試時可以找到有關包和jacorb.properties設定檔,需要在系統內容變數中設定  classpath=.;E:/JacORB/idl.jar;E:/JacORB/jacorb.jar;E:/JacORB/classes;  另外,為了方便使用ant和命令列工具,在path中加入E:/JacORB/bin

修改E:/JacORB/bin 中的idl.bat(Linux下為idl)檔案,加入執行參數

@echo off
java -Djava.endorsed.dirs="e:/JacORB/lib" -classpath "e:/JacORB/lib/idl.jar;e:/JacORB/lib/logkit-1.2.jar;%CLASSPATH%" org.jacorb.idl.parser %*   

  
接著,把E:/JacORB/etc目錄下的jacorb_properties.template複製到E:/JacORB/classes目錄下,並更名為jacorb.properties     
在Corba中命名服務是非常重要的, 編輯jacorb.properties檔案,設定其中的 ORBInitRef.NameService=file:/E:/NS_Ref(這裡是樣本,當然可以為任何httpURL或者其他路徑),這個NS_Ref檔案會在啟動命名服務時產生.該設定檔其餘部分保留預設值即可.
    

 2.  測試命名服務(NS,Naming Service)是否可以正常啟動
    
 在dos視窗下輸入
      ns E:/NS_Ref
    如果出現下面的輸出說明已經正常啟動
    [configuration loaded from classpath resource file:/E:/SSS/WEB-INF/classes/jacorb.properties]
        JacORB V 2.1, www.jacorb.org
        (C) Gerald Brose, XTRADYNE Technologies/FU Berlin, 16-Feb-2004
    [jacorb.naming] INFO : NS up


   如果沒有任何輸出,可能是由於你的jacorb.properties檔案沒有放到classpath所在的目錄下。
   如果沒有正確啟動NS,運行下面的demo時會出現下面的異常
   [jacorb.orb.intercept] INFO : InterceptorManager started with 0 SIs, 0 CIs and 1 IORIs
   ....
   [jacorb.giop] INFO : ClientConnectionManager: created new conn to target 192.168.4.161:4089
   [jacorb] ERROR : java.net.ConnectException: Connection refused: connect

   
 3. idl編譯DEMO下的grid例子
   觀察正確啟動NS後,DOS視窗轉到demo/grid目錄下執行 ant (如果ant沒有安裝則不會編譯)   
     E:/JacORB/demo/grid >    ant    
   這樣會進行idl編譯server.idl檔案,在 E:/JacORB/demo/grid/generated下產生corba所需的源檔案  
   同時,ant會編譯所有的java源檔案,E:/JacORB/classes下面產生 .class檔案    


4 運行grid例子,本例實現了一個簡單的服務.
    
4.1 首先參考第2步驗證是否ns 已經正常啟動.
    
4.2 啟動grid server
    在dos視窗中執行(在 E:/JacORB/ 目錄下)
         jaco demo.grid.Server
         或者
         jaco demo.grid.TieServer
    正常時輸出:
    [configuration loaded from classpath resource file:/E:/SSS/WEB-INF/classes/jacorb.properties]
     JacORB V 2.1, www.jacorb.org
          (C) Gerald Brose, XTRADYNE Technologies/FU Berlin, 16-Feb-2004
            [jacorb.poa] INFO : oid:
    00 11 48 40 02 10 1F 00 01 1E 04                            ..H@.......
            object is activated
  
       
    這時在ns輸出視窗可以看到:
     [jacorb.naming] INFO : Bound name: grid.example 
       
    另外,可以通過Jbuilder等IDE工具建立一個工程來運行demo.grid.Server,須指定vm參數-Djava.endorsed.dirs="E:/JacORB/lib" (在JBuilder中Runtime Configuration裡設定),結果一致.
   
    
4.3 啟動grid client端
    jaco demo.grid.Client   
    輸出結果:
    Height =  31
        Width = 14
        Old value at (30,13): 0.21
        Setting (30,13) to 470.11
        New value at (30,13): 470.11
        MyException, reason: This is only a test exception, no harm done :-)


看到這個結果說明已經成功運行了grid例子.

5. 對照源碼,下面我們將簡單分析Grid例子:

JacORB的應用開發一般分為以下五步:
    1.寫IDL介面定義
    2.編譯IDL介面定義產生Java類
    3.實現步驟2中產生的介面
    4.寫伺服器啟動類,並註冊到ORB
    5.寫用戶端去擷取服務物件引用

5.1  首先編寫server.idl檔案
關於編寫IDL參考doc/ProgrammingGuide.pdf文檔

// grid.idl
// IDL defintion of a 2-D grid:
module demo
{
    module grid
    {
        interface MyServer
        {
             typedef fixed <5,2> fixedT;
           readonly attribute short height;  // height of the grid
             readonly attribute short width;   // width of the grid
           void set(in short n, in short m, in fixedT value);
             fixedT get(in short n, in short m);
             exception MyException
             {
               string why;
             };
            short opWithException() raises( MyException );
       };
    };
};

 5.2 利用工具 bin/idl.bat來編譯server.idl
     idl -d ../.. server.idl
    
 5.3 實現介面
     public class gridImpl extends MyServerPOA
    
     填寫建構函式,以及介面等方法,如:
     public gridImpl()
     public java.math.BigDecimal get(short n, short m)
     public void set(short n, short m, java.math.BigDecimal value)
    
 5.4 編寫伺服器
          這一步要寫一個類來調用gridImpl類,並將其註冊到POA,這樣遠程對象才能通過
MyServer介面來訪問它。
       
        1)初始化orb對象。
        org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args, null);
       
        2)使用POAHelper來執行個體化為POA的引用。
        org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
       
        3)啟用該對象,否則還處於“保持狀態,”無法處理任何請求。
        poa.the_POAManager().activate();
       
        4)通過POA將一個Java對象轉化成一個CORBA對象。
        org.omg.CORBA.Object o = poa.servant_to_reference(new gridImpl());
       
        5)使nc綁定該對象的引用(這一過程通過命名伺服器來完成),注意使對象的名稱作為bind()的參數
    NamingContextExt nc =  NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
    nc.bind( nc.to_name("grid.example"), o);

 5.5 編寫用戶端調用服務程式
    1)  建立orb對象
    org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
   
    2) 用戶端通過命名伺服器擷取一個"grid"服務的引用
    NamingContextExt nc = NamingContextExtHelper.narrow(orb.resolve_initial_references("NameService"));
    grid = MyServerHelper.narrow(nc.resolve(nc.to_name("grid.example")));

    3) 使用grid對象進行我們的計算。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.