国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Java IDL: 使用 CORBA

使用 CORBA 和 Java IDL


關(guān)于 CORBA

CORBA(Common Object Request Broker Architecture,公用對(duì)象請(qǐng)求代理體系結(jié)構(gòu))是 Object Management Group (OMG) 協(xié)會(huì)開發(fā)的標(biāo)準(zhǔn)分布式對(duì)象體系結(jié)構(gòu)。自 1989 年以來,OMG 的任務(wù)就是為開放式軟件總線或?qū)ο笳?qǐng)求代理(Object Request Broker,ORB)提供體系結(jié)構(gòu)規(guī)范。以此為基礎(chǔ),不同廠商編寫的對(duì)象組件可跨過網(wǎng)絡(luò)和操作系統(tǒng)實(shí)現(xiàn)互操作。該標(biāo)準(zhǔn)允許 CORBA 對(duì)象相互調(diào)用,而無需知道所訪問對(duì)象的位置或?qū)崿F(xiàn)被請(qǐng)求對(duì)象所用的語言。OMG 指定的接口定義語言(Interface Definition Language,IDL)用于為 CORBA 對(duì)象定義接口。

CORBA 對(duì)象與典型編程語言對(duì)象的不同之處在于:

  • CORBA 對(duì)象可在網(wǎng)絡(luò)上任何位置定位。
  • CORBA 對(duì)象可與其它平臺(tái)上的對(duì)象實(shí)現(xiàn)互操作。
  • CORBA 對(duì)象可用任何編程語言編寫,只要存在從 OMG IDL 到該語言的映射(當(dāng)前指定的映射包括 Java、C++、C、Smalltalk、COBOL 及 Ada)。

關(guān)于 Java IDL

Java IDL 是同 JDK 1.2 一起提供的對(duì)象請(qǐng)求代理。它可與 idltojava 編譯器(可從 Java Developer Connection 下載)一起用于定義、實(shí)現(xiàn)和訪問用 Java 編程語言編寫的 CORBA 對(duì)象。Java IDL 符合 CORBA/IIOP 2.0 規(guī)范 (orbos/97-02-25) 和 IDL-to-Java 語言映射(orbos/98-01-06 終版)標(biāo)準(zhǔn)。

Java IDL ORB 支持瞬態(tài) CORBA 對(duì)象 - 該對(duì)象的生命期受服務(wù)器進(jìn)程生命期的限制。Java IDL 也提供瞬態(tài)名字服務(wù)器,以便將對(duì)象組織為樹型目錄結(jié)構(gòu)。名字服務(wù)器符合在 CORBAservices:通用對(duì)象服務(wù)規(guī)范中所述的命名服務(wù)規(guī)范標(biāo)準(zhǔn)。瞬態(tài)對(duì)象及名字服務(wù)器將在下文中討論。

接口庫并不是作為 Java IDL 的組成部分來提供的。由于一般情況下客戶機(jī)可訪問已生成的 stub 文件,因此不需要接口庫。

Nutshell 中的 CORBA 概念

本節(jié)引入的概念在 CORBA/IIOP 2.0 規(guī)范中有更全面的論述。

下圖展示從客戶機(jī)傳送到服務(wù)器 CORBA 對(duì)象實(shí)現(xiàn)的方法請(qǐng)求??蛻魴C(jī)是調(diào)用 CORBA 對(duì)象上某方法的任意代碼(其本身也可能是 CORBA 對(duì)象)。servant 是對(duì)象實(shí)現(xiàn)的實(shí)例 - 實(shí)現(xiàn)該 CORBA 對(duì)象的實(shí)際代碼和數(shù)據(jù)。

CORBA 對(duì)象的客戶機(jī)具有對(duì)該對(duì)象的對(duì)象引用,并用該對(duì)象引用來發(fā)出方法請(qǐng)求。如果該服務(wù)器對(duì)象是遠(yuǎn)程對(duì)象,則對(duì)象引用將指向 stub 函數(shù),該函數(shù)則使用 ORB 機(jī)制向服務(wù)器對(duì)象傳送調(diào)用。stub 代碼使用 ORB 來標(biāo)識(shí)運(yùn)行該服務(wù)器對(duì)象的計(jì)算機(jī),并且向該計(jì)算機(jī)的 ORB 請(qǐng)求與該對(duì)象服務(wù)器連接。stub 代碼取得該連接時(shí),會(huì)將對(duì)象引用和參數(shù)發(fā)送到鏈接目標(biāo)對(duì)象實(shí)現(xiàn)的 skeleton 代碼。skeleton 代碼將該調(diào)用和參數(shù)變換為所需的、與實(shí)現(xiàn)有關(guān)的格式,然后調(diào)用該對(duì)象。任何結(jié)果或異常都會(huì)沿同一路徑返回。

客戶機(jī)不知 CORBA 對(duì)象的位置、實(shí)現(xiàn)詳情及用來訪問該對(duì)象的 ORB。不同的 ORB 通過由 OMG 指定的 Internet InterORB 協(xié)議 (IIOP) 通訊。[CORBA/IIOP 2.0:ch 9,10]

客戶機(jī)只能調(diào)用在 CORBA 對(duì)象接口中指定的方法。CORBA 對(duì)象接口通過 OMG 接口定義語言 (IDL) [CORBA/IIOP 2.0 ch3] 進(jìn)行定義。接口定義對(duì)象類型,同時(shí)指定一組已命名的方法和參數(shù)及這些方法可能返回的異常類型。IDL 編譯器(如 idltojava )可依照相應(yīng)的 OMG 語言映射將 CORBA 對(duì)象定義翻譯為指定的編程語言。因此,idltojava 編譯器將依照 IDL-Java 語言映射將 IDL 定義翻譯為 Java 結(jié)構(gòu)。

idltojava 編譯器為每個(gè)對(duì)象類型都生成 stub 和 skeleton 文件。stub 文件為客戶機(jī)提供用客戶機(jī)編程語言表示的對(duì) IDL 定義的方法的訪問。服務(wù)器 skeleton 文件將對(duì)象實(shí)現(xiàn)粘合到 ORB 運(yùn)行時(shí),ORB 使用 skeleton 將方法分配給對(duì)象實(shí)現(xiàn)實(shí)例 (servants)。

定義并實(shí)現(xiàn) CORBA 對(duì)象

開發(fā) CORBA 對(duì)象的目的是創(chuàng)建并注冊(cè)對(duì)象服務(wù)器或普通服務(wù)器。服務(wù)器是一個(gè)程序,其中包含一個(gè)或多個(gè)對(duì)象類型的實(shí)現(xiàn)并注冊(cè)到 ORB。例如,用戶可以開發(fā)一個(gè)桌面排版服務(wù)器,實(shí)現(xiàn)“Document”對(duì)象類型、“Paragraph”對(duì)象類型及其它相關(guān)的對(duì)象類型。

CORBA 對(duì)象接口

所有 CORBA 對(duì)象都支持定義對(duì)象類型的 IDL 接口。一個(gè)接口可繼承一個(gè)或多個(gè)其它接口。IDL 語法與 Java 或 C++ 非常相似,CORBA 的 IDL 文件在功能方面與語言無關(guān),類似于 C++ 頭文件。將 IDL 映射到每個(gè)編程語言后,即可提供從該語言到對(duì)象接口的訪問。有了 Java IDL,這些 IDL 接口可用 idltojava 編譯器翻譯為 Java。對(duì)于每個(gè) IDL 接口,idltojava 都生成 Java 接口以及其它所需的 .java 文件,包括客戶機(jī) stub 和服務(wù)器 skeleton。

IDL 接口聲明一組客戶機(jī)可訪問的操作、異常及有類型的屬性(值)。每個(gè)操作都有一個(gè)說明定義操作的名稱、參數(shù)、結(jié)果及異常。以下為描述經(jīng)典“Hello World”程序的簡(jiǎn)單 IDL 接口。

module HelloApp{interface Hello{string sayHello();};};

當(dāng)出現(xiàn)錯(cuò)誤條件時(shí),操作會(huì)拋出異常。異常的類型表明了所遇到的錯(cuò)誤種類。除正常結(jié)果外,客戶機(jī)還必須準(zhǔn)備處理每個(gè)操作的已定義異常和 CORBA 標(biāo)準(zhǔn)異常。

基于 Java 語言的實(shí)現(xiàn)

一旦定義了 IDL 接口,且 idltojava 編譯器基于 .idl 文件運(yùn)行,就可編寫包含方法實(shí)現(xiàn)的 .java 文件。而后,.java 實(shí)現(xiàn)文件即可被編譯并鏈接到 idltojava 生成的 .java 文件和 ORB 庫,以便創(chuàng)建對(duì)象服務(wù)器。

對(duì)象實(shí)現(xiàn)將為它所支持的接口的所有操作和屬性定義行為。一個(gè)接口可能有多個(gè)實(shí)現(xiàn)(例如每個(gè)實(shí)現(xiàn)都用來強(qiáng)調(diào)特定的時(shí)間和空間權(quán)衡)。實(shí)現(xiàn)定義創(chuàng)建/破壞接口和對(duì)象的行為。

由于只有服務(wù)器能創(chuàng)建新的 CORBA 對(duì)象,因此應(yīng)為每種對(duì)象類型定義并實(shí)現(xiàn)工廠對(duì)象接口。例如,如果一種對(duì)象類型為 Document,則帶有 create 方法的 DocumentFactory 對(duì)象類型將作為服務(wù)器的一部分來定義和實(shí)現(xiàn)(注意,“create”不是保留的,可以用任何方法名)。而后,create 方法的實(shí)現(xiàn)可用 new 來創(chuàng)建對(duì)象。例如:

  DocumentServant document  = new DocumentServant():orb.connect(document);

可在 Document 上定義并實(shí)現(xiàn) destroy 方法,或者該對(duì)象可無限延續(xù)(注意,“destroy”不是保留的,因此可使用任何名稱)。

Java IDL ORB 只支持瞬態(tài)對(duì)象,其生命期受服務(wù)器進(jìn)程生命期的限制。雖然當(dāng)服務(wù)器進(jìn)程終止運(yùn)行時(shí)瞬態(tài)對(duì)象也會(huì)消失,但該對(duì)象的實(shí)現(xiàn)可以來將其狀態(tài)保存到文件中,并在創(chuàng)建時(shí)從該文件重新初始化。

客戶機(jī)實(shí)現(xiàn)

客戶機(jī)代碼與 idltojava 生成的 .java 文件和 ORB 庫鏈接。在 Hello World 實(shí)例中提供了應(yīng)用程序和applet客戶機(jī)的示例。

客戶機(jī)只可使用服務(wù)器提供的已公布工廠接口來創(chuàng)建 CORBA 對(duì)象。同樣,只有該對(duì)象公布一個(gè)破壞方法,客戶機(jī)才能刪除 CORBA 對(duì)象。由于一個(gè) CORBA 對(duì)象可能為網(wǎng)絡(luò)上的很多客戶機(jī)所共享,因此,只有對(duì)象服務(wù)器才能夠知道該對(duì)象何時(shí)成為垃圾。

客戶機(jī)代碼在 CORBA 對(duì)象上發(fā)送方法請(qǐng)求的唯一方式是經(jīng)由該對(duì)象的對(duì)象引用。對(duì)象引用是不透明結(jié)構(gòu),它標(biāo)識(shí) CORBA 對(duì)象的主機(jī)、主機(jī)服務(wù)器監(jiān)聽請(qǐng)求的端口及在進(jìn)程中指定對(duì)象的指針。因?yàn)?Java IDL 只支持瞬態(tài)對(duì)象,所以在服務(wù)器進(jìn)程終止并重啟時(shí)該對(duì)象引用將無效。

客戶機(jī)一般以如下方式獲得對(duì)象引用:

  • 從工廠對(duì)象獲得。例如,為創(chuàng)建新的 Document,客戶機(jī)可調(diào)用 DocumentFactory 對(duì)象上的 create 方法。DocumentFactory create 方法將 Document 的對(duì)象引用返回到客戶機(jī)。
  • 從 nameservice 獲得。例如,通過在 nameservice 上發(fā)送請(qǐng)求,客戶機(jī)可獲得 DocumentFactory 的對(duì)象引用。
  • 從專門創(chuàng)建自對(duì)象引用的字符串獲得。

一旦獲得對(duì)象引用,客戶機(jī)必須將它限定為適當(dāng)類型。IDL 支持繼承,其繼承的根目錄為 IDL 中的 Object,即 Java 中的 org.omg.CORBA.Objectorg.omg.CORBA.Object 自然是 java.lang.Object 的子類)。某些操作(特別是名稱查詢和解串)返回使用 idltojava 編譯器生成的幫助類可將其限定為所期望的派生類 org.omg.CORBA.Object。由于 Java 運(yùn)行時(shí)無法總是知道 CORBA 對(duì)象的確切類型,因此必須顯式地限定 CORBA 對(duì)象類型。

Java IDL 瞬態(tài)名字服務(wù)器

Java IDL Transient Nameservice 是同 Java IDL 一起提供的對(duì)象服務(wù)器。在命令行提示中使用 tnameserv 可以啟動(dòng)此名字服務(wù)器。本對(duì)象服務(wù)器符合在本頁中先前部分所述的標(biāo)準(zhǔn)對(duì)象實(shí)現(xiàn)及調(diào)用技術(shù)。

名字服務(wù)器通過與文件目錄相似的樹型結(jié)構(gòu)按名稱存儲(chǔ)對(duì)象引用??蛻魴C(jī)可通過名稱查找或解析對(duì)象引用。因?yàn)槊址?wù)器是一種普通的 Java IDL 瞬態(tài)服務(wù)器,所以每次 tnameserv 終止運(yùn)行時(shí),整個(gè)名稱目錄結(jié)構(gòu)都會(huì)丟失。

有關(guān)詳細(xì)信息,參見命名服務(wù)


分布式應(yīng)用程序似的概念 | 使用 CORBA | 詞匯表


版權(quán)所有© 1996-98 Sun Microsystems, Inc., 2550 Garcia Ave., Mtn. View, CA. 94043-1100 USA.,保留所有權(quán)利。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Applet與Servlet通訊的四種方法及其比較
RMI-IIOP
J2EE‘S EJB Technology
CORBA 入門
CORBA
CORBA和COM有哪些區(qū)別?只在OS上嗎?
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服