程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 探索 CORBA 技術的應用領域

探索 CORBA 技術的應用領域

編輯:JAVA編程入門知識

  6 月份,我們談過您為什麼要使用 CORBA 和 Java 技術。本月,我要通過一個可用的簡單示例,讓您開始探索 CORBA 技術的許多領域。不過,別忘了我們的目標是,創建這樣一種分布式應用程序:使駐留在一台計算機上的客戶機能向運行於另一台計算機上的服務發出請求。我們不想為諸如硬件或操作系統軟件等細節問題操心,而只是想讓這種服務能響應客戶機的請求。
  
  IDL 接口
  
  全部 CORBA 結構是從一個接口開始的,理解接口的最佳方法就是想像我的汽車,對,我的汽車。雖然您不熟悉它,但假如我對您說:“開上我的車,帶些三明治回來當午餐”,恐怕您就不會懷疑自己能不能駕駛我的汽車。您可能想知道它停在哪裡,以及開它是否安全,但是您會確信開我的車與開您的車差別不大。這是因為,在各種汽車當中,人與汽車之間的接口已高度標准化了。我的轎車和您的跑車之間可能會有一些差異,但汽車的油門踏板、剎車和方向盤的安裝都是標准的,您一定能輕松快速上路。
  
  因為 CORBA 與語言無關,所以它依靠一種接口定義語言 (IDL),來表達客戶機如何向實現接口的服務發出請求。我們的接口就是一個方法:add()。這個方法將取兩個數(兩個 IDL 的 long 型數)並返回這兩個數之和。下面是我們的接口計算程序:
  
  清單 1. calcsimpl.idl
   module corbasem {
   module gen {
  module calcsimpl {
  interface calculator {
   long add(in long x, in long y);
  };
  };
   };
  };
  
  這個接口中的 IDL 要害字有:module、interface、long 和 in。IDL 使用要害字 module 來創建名稱空間,並且此要害字准確地映射為 Java 要害字 package。運行 IDL-to-Java 編譯器時,生成的 Java 文件將會存到名為 calcsimpl 的子目錄中。IDL 要害字 interface 完美地映射為 Java 接口,並代表一種抽象類型,因為兩者都只定義您與對象通訊的方式,而不涉及對象的實現。IDL 要害字 long 是一種基本的整數類型,它至少映射為一個 4 字節的類型,這種類型在 Java 代碼中就是 int。
  
  想一想執行遠程方法調用的機制,您就會發現定義參數傳遞的方向(客戶機到服務器、服務器到客戶機或者雙向傳遞)是多麼的有意義。在 IDL 操作中,這些方向用 in、out 和 inout 要害字來聲明,每個參數都必須聲明方向,以便使對象請求代理程序 (ORB) 知道該參數的去向。這會影響到為發送而進行的參數打包、參數解包以及內存治理。ORB 對參數了解得越多,它的效率就越高。要害字 in 表明 long x 和 long y 是從客戶機傳遞到服務器。
  
  圖 1. 參與 CORBA 請求的各個部分
  
  
  
  IDL 編譯器 需要 IDL 編譯器嗎
  
  您可能已經有了 ORB 供給商和 IDL-to-Java 編譯器。但假如還沒有,您從哪裡獲取呢?這裡有好多,而且有些還可以免費下載。我推薦 Object Oriented Concepts, Inc. 的 Orbacus ORB。假如不將其用於商業目的,它還可以免費下載,而且完全符合 CORBA 2.3 規范。另外一個可試用 60 天的編譯器是 Inprise 的 Visibroker,也完全符合 CORBA 2.3 規范並且可下載。如想獲得這兩種產品,請參閱參考資料。
  
  接口定義以後,必須在 ORB 供給商提供的 IDL-to-Java 編譯器上運行。IDL 編譯器是一種精巧的實用程序,它生成 IDL 的 stub 和 skeleton 以及其它支持文件。生成的這些源文件,大部分將增強 CORBA 標准中定義的特定 IDL 類型的打包功能。編譯器將生成大部分網絡探測 (plumbing),這在分布式系統中非常重要。在最基本的級別中,IDL-to-Java 編譯器只是一個按 CORBA 2.3 規范的定義來實現從 IDL 到 Java 語言映射的程序。手動生成這些代碼既枯燥又費時,還輕易出錯;IDL-to-Java 編譯器會處理這一切,所以您就不用操心啦;同時,它會用一定的規則約束您,並強制您執行封裝。IDL-to-Java 編譯器將把 CORBA-land 規則強加給您的系統。
  
  輸入下面的命令,從 Orbacus 執行 IDL-to-Java 編譯器,把所有生成的文件都放在 CLASSPATH 的輸出目錄下。
  
  清單 2. 調用 IDL-to-Java 編譯器
   jidl --output-dir c:\_workcorbasem calculator.idl
  生成了什麼呢?這個命令生成了構建實現所需要的全部 Java 源文件。IDL-to-Java 編譯器可確保所定義的接口遵守 CORBA 規范的規則。
  
  圖 2. IDL-to-Java 編譯器文件生成
  
  
  下面是這些文件:
  
   calculator.java - 這個文件叫標記接口文件。CORBA 規范指出這個文件必須擴展 IDLEntity,並且與 IDL 接口同名。這個文件提供類型標記,從而使這個接口能用於其它接口的方法聲明。
  
   calculatorOperations.java - 這個文件內含 Java 公共接口 -- calculatorOperations。規范指出,這個文件應該與具有 Operations 後綴的 IDL 接口同名,並且這個文件內含此接口映射的操作標記。上面定義的標記接口 (calculator.java) 可擴展這個接口。
  
   calculatorHelper.java - 設計 helper 類的目的是,讓所需要的許多內務處理功能脫離我們的接口,但又隨時可用到實現過程中。幫助程序文件含有重要的靜態 narrow 方法,這種方法使 org.omg.CORBA.Object 收縮為一種更具體的類型的對象引用;在這種情況下,將是一個計算程序類型。
  
   calculatorHolder.java - holder 類是一個專門化類,是為了需要通過引用來傳遞參數的任意數據類型而生成的。這個示例中將不使用 holder 類,但我們將會在以後的欄目中經常見到它。
  
   calculatorPOA.java - skeleton 類為 CORBA 功能提供了請求-響應探測的一大部分。生成 calculatorPOA.java,是因為缺省方式下的實現是基於繼續的,假如我們選擇基於委托的實現方式,輸出就會不一樣。這些主題將在以後的欄目中具體介紹。
  
   _calculatorStub.java - 顧名思義,這是一個 stub 類。您的客戶機將需要這個類來進行工作。
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved