JEE值對(duì)象模式在分布式結(jié)構(gòu)中的分析及應(yīng)用_第1頁(yè)
JEE值對(duì)象模式在分布式結(jié)構(gòu)中的分析及應(yīng)用_第2頁(yè)
JEE值對(duì)象模式在分布式結(jié)構(gòu)中的分析及應(yīng)用_第3頁(yè)
JEE值對(duì)象模式在分布式結(jié)構(gòu)中的分析及應(yīng)用_第4頁(yè)
JEE值對(duì)象模式在分布式結(jié)構(gòu)中的分析及應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、值對(duì)象模式在分布式結(jié)構(gòu)中的分析及應(yīng)用1 引言 在與遠(yuǎn)程對(duì)象通信時(shí),需要權(quán)衡的因素有以下幾點(diǎn): 遠(yuǎn)程調(diào)用(那些必須跨越網(wǎng)絡(luò)的調(diào)用)速度緩慢。雖然許多遠(yuǎn)程調(diào)用框架可以隱藏進(jìn)行遠(yuǎn)程調(diào)用的復(fù)雜性(如RMI),但是它們不能消除發(fā)生通信所需的步驟。例如,必須先找到遠(yuǎn)程對(duì)象位置,而且建立與遠(yuǎn)程計(jì)算機(jī)的連接,然后才能將數(shù)據(jù)串行化為字節(jié)流,然后可能進(jìn)行加密,最后才能將其傳輸?shù)竭h(yuǎn)程計(jì)算機(jī)。 在考慮網(wǎng)絡(luò)性能時(shí),必須同時(shí)考慮滯后時(shí)間和吞吐量。簡(jiǎn)單地說(shuō),滯后時(shí)間描述了數(shù)據(jù)的首字節(jié)到達(dá)目的地之前所經(jīng)過(guò)的時(shí)間。吞吐量描述了在某個(gè)時(shí)間段(例如 1 秒)內(nèi)通過(guò)網(wǎng)絡(luò)發(fā)送的數(shù)據(jù)字節(jié)數(shù)。在基于 IP 路由的現(xiàn)代網(wǎng)絡(luò)(例如 Inter

2、net)中,滯后時(shí)間可以是比吞吐量更大的因素。這意味著,傳輸 10 字節(jié)數(shù)據(jù)所用的時(shí)間可能幾乎等于傳輸 1,000 字節(jié)數(shù)據(jù)所用的時(shí)間。在使用無(wú)連接協(xié)議(如 HTTP)時(shí),此效果尤其明顯。通常,網(wǎng)絡(luò)速度越快可以使吞吐量得以增加,但是,要減少滯后時(shí)間則會(huì)更加困難。 在設(shè)計(jì)對(duì)象接口時(shí),好的做法是將大量信息隱藏在對(duì)象內(nèi),并提供一組細(xì)粒度方法來(lái)訪問(wèn)和操作該信息。細(xì)粒度意味著每個(gè)方法都應(yīng)該負(fù)責(zé)單個(gè)的、相當(dāng)小的和基本的功能單位。此方法簡(jiǎn)化了編程,并提供了對(duì)對(duì)象內(nèi)部的更佳抽象,從而增加了重用的可能性。必須根據(jù)以下事實(shí)對(duì)此進(jìn)行平衡取舍:使用較細(xì)粒度的方法意味著需要調(diào)用更多的方法才能執(zhí)行高級(jí)別的任務(wù)。通常,在同

3、一進(jìn)程內(nèi)調(diào)用方法時(shí),這些額外函數(shù)調(diào)用的開(kāi)銷(xiāo)是可接受的;但是,在跨進(jìn)程和網(wǎng)絡(luò)邊界調(diào)用這些方法時(shí),開(kāi)銷(xiāo)可能變得難以接受。 避免遠(yuǎn)程調(diào)用中固有的滯后時(shí)間問(wèn)題的最佳方法是進(jìn)行更少的調(diào)用,并讓每個(gè)調(diào)用傳遞更多的數(shù)據(jù)。做到這一點(diǎn)的一種方法是,使用長(zhǎng)參數(shù)列表來(lái)聲明遠(yuǎn)程方法。這樣,客戶端就可以在單個(gè)調(diào)用中將更多的信息傳遞給遠(yuǎn)程組件。但是,這樣做會(huì)使針對(duì)此接口的編程容易出錯(cuò),因?yàn)槌绦蚝芸赡軆H按調(diào)用語(yǔ)句中的位置來(lái)調(diào)用外部方法的參數(shù)。例如,如果遠(yuǎn)程方法接受 10 個(gè)字符串參數(shù),則開(kāi)發(fā)人員很容易按錯(cuò)誤順序傳遞參數(shù)。編譯器將無(wú)法檢測(cè)到這樣的錯(cuò)誤。 長(zhǎng)參數(shù)列表無(wú)助于從遠(yuǎn)程調(diào)用向客戶端返回更多的信息,因?yàn)榇蠖鄶?shù)的編程語(yǔ)言將

4、方法調(diào)用的返回類(lèi)型限制為單個(gè)參數(shù)。而巧合的是,在傳輸大多數(shù)數(shù)據(jù)時(shí)通常需要返回較多信息。例如,許多用戶接口傳輸少量的信息,卻希望返回大量結(jié)果數(shù)據(jù)。 2 RMI的工作原理2.1 概述Java RMI (Remote Method Invocation 遠(yuǎn)程方法調(diào)用)是用Java在JDK1.1中實(shí)現(xiàn)的,它大大增強(qiáng)了Java開(kāi)發(fā)分布式應(yīng)用的能力。Java作為一種風(fēng)靡一時(shí)的網(wǎng)絡(luò)開(kāi)發(fā)語(yǔ)言,其巨大的威力就體現(xiàn)在它強(qiáng)大的開(kāi)發(fā)分布式網(wǎng)絡(luò)應(yīng)用的能力上,而RMI就是開(kāi)發(fā)百分之百純Java的網(wǎng)絡(luò)分布式應(yīng)用系統(tǒng)的核心解決方案之一。其實(shí)它可以被看作是RPC的Java版本。但是傳統(tǒng)RPC并不能很好地應(yīng)用于分布式對(duì)象系統(tǒng)。而

5、Java RMI 則支持存儲(chǔ)于不同地址空間的程序級(jí)對(duì)象之間彼此進(jìn)行通信,實(shí)現(xiàn)遠(yuǎn)程對(duì)象之間的無(wú)縫遠(yuǎn)程調(diào)用。RMI目前使用Java遠(yuǎn)程消息交換協(xié)議JRMP(Java Remote Messaging Protocol)進(jìn)行通信。JRMP是專為Java的遠(yuǎn)程對(duì)象制定的協(xié)議。因此,Java RMI具有Java的Write Once,Run Anywhere的優(yōu)點(diǎn),是分布式應(yīng)用系統(tǒng)的百分之百純Java解決方案。用Java RMI開(kāi)發(fā)的應(yīng)用系統(tǒng)可以部署在任何支持JRE(Java Run Environment Java,運(yùn)行環(huán)境)的平臺(tái)上。但由于JRMP是專為Java對(duì)象制定的,因此,RMI對(duì)于用非Jav

6、a語(yǔ)言開(kāi)發(fā)的應(yīng)用系統(tǒng)的支持不足。不能與用非Java語(yǔ)言書(shū)寫(xiě)的對(duì)象進(jìn)行通信。本文擬從程序的角度舉例介紹怎樣利用RMI實(shí)現(xiàn)Java分布式應(yīng)用。2.2 工作機(jī)制 在與遠(yuǎn)程對(duì)象的通信過(guò)程中,RMI使用標(biāo)準(zhǔn)機(jī)制:stub和skeleton。遠(yuǎn)程對(duì)象的stub擔(dān)當(dāng)遠(yuǎn)程對(duì)象的客戶本地代表或代理人角色。調(diào)用程序?qū)⒄{(diào)用本地stub的方法,而本地stub將負(fù)責(zé)執(zhí)行對(duì)遠(yuǎn)程對(duì)象的方法調(diào)用。在RMI中,遠(yuǎn)程對(duì)象的stub與該遠(yuǎn)程對(duì)象所實(shí)現(xiàn)的遠(yuǎn)程接口集相同。調(diào)用stub的方法時(shí)將執(zhí)行下列操作:(1) 初始化與包含遠(yuǎn)程對(duì)象的遠(yuǎn)程虛擬機(jī)的連接;(2) 對(duì)遠(yuǎn)程虛擬機(jī)的參數(shù)進(jìn)行編組(寫(xiě)入并傳輸);(3) 等待方法調(diào)用結(jié)果;(4)

7、 解編(讀?。┓祷刂祷蚍祷氐漠惓?;(5) 將值返回給調(diào)用程序。為了向調(diào)用程序展示比較簡(jiǎn)單的調(diào)用機(jī)制,stub將參數(shù)的序列化和網(wǎng)絡(luò)級(jí)通信等細(xì)節(jié)隱藏了起來(lái)。在遠(yuǎn)程虛擬機(jī)中,每個(gè)遠(yuǎn)程對(duì)象都可以有相應(yīng)的skeleton(在JDK1.2環(huán)境中無(wú)需使用skeleton)。Skeleton負(fù)責(zé)將調(diào)用分配給實(shí)際的遠(yuǎn)程對(duì)象實(shí)現(xiàn)。它在接收方法調(diào)用時(shí)執(zhí)行下列操作:(1) 解編(讀?。┻h(yuǎn)程方法的參數(shù);(2) 調(diào)用實(shí)際遠(yuǎn)程對(duì)象實(shí)現(xiàn)上的方法;(3) 將結(jié)果(返回值或異常)編組(寫(xiě)入并傳輸)給調(diào)用程序。stub和skeleton由rmic編譯器生成。2.3 RMI分布式應(yīng)用程序機(jī)制:(1) 定位遠(yuǎn)程對(duì)象。應(yīng)用程序可使用兩種

8、機(jī)制中的一種得到對(duì)遠(yuǎn)程對(duì)象的引用。它既可用RMI的簡(jiǎn)單命名工具rmiregistry來(lái)注冊(cè)它的遠(yuǎn)程對(duì)象,也可以將遠(yuǎn)程對(duì)象引用作為常規(guī)操作的一部分來(lái)進(jìn)行傳遞和返回。(2)與遠(yuǎn)程對(duì)象通信。遠(yuǎn)程對(duì)象間通信的細(xì)節(jié)由RMI處理,對(duì)于程序員來(lái)說(shuō),遠(yuǎn)程通信看起來(lái)就像標(biāo)準(zhǔn)的Java方法調(diào)用。(3)給作為參數(shù)或返回值傳遞的對(duì)象加載類(lèi)字節(jié)碼。因?yàn)镽MI允許調(diào)用程序?qū)⒓僇ava對(duì)象傳給遠(yuǎn)程對(duì)象,所以,RMI將提供必要的機(jī)制,既可以加載對(duì)象的代碼又可以傳輸對(duì)象的數(shù)據(jù)。在RMI分布式應(yīng)用程序運(yùn)行時(shí),服務(wù)器調(diào)用注冊(cè)服務(wù)程序以使名字與遠(yuǎn)程對(duì)象相關(guān)聯(lián)??蛻魴C(jī)在服務(wù)器上的注冊(cè)服務(wù)程序中用遠(yuǎn)程對(duì)象的名字查找該遠(yuǎn)程對(duì)象,然后調(diào)用它

9、的方法。3 值對(duì)象(value object)模式 值對(duì)象(value object)模式通過(guò)減少分布式通信的消息而促進(jìn)數(shù)據(jù)的交換,通常這里所指的通信是在Client層和EJB層之間。在一個(gè)遠(yuǎn)程調(diào)用中,一個(gè)單一值對(duì)象可以被用來(lái)取出一系列相關(guān)數(shù)據(jù)并提供給客戶。 這種設(shè)計(jì)模式的出現(xiàn)是基于客戶需要與ejb大量地交換數(shù)據(jù)的情況。具體來(lái)說(shuō),在J2EE平臺(tái)中,應(yīng)用系統(tǒng)通常將服務(wù)器端的程序組件實(shí)現(xiàn)為會(huì)話bean和實(shí)體bean,而這些組件的部分方法則需要將數(shù)據(jù)返回給客戶;這種情況下,通常一個(gè)用戶會(huì)重復(fù)調(diào)用相關(guān)方法多次,直到它得到相關(guān)信息,應(yīng)該注意的是,多數(shù)情況這些方法調(diào)用的目的都是為了取得單一的信息,例如用戶

10、名或者用戶地址等。 在J2EE平臺(tái)上,這種調(diào)用基本上都是來(lái)自遠(yuǎn)程的。也就是說(shuō),用戶多次調(diào)用相應(yīng)的方法會(huì)給應(yīng)用服務(wù)器帶來(lái)極大的負(fù)擔(dān),即使用戶和EJB容器加載相同的JVM、OS和計(jì)算機(jī)上運(yùn)行EJB程序,由于方法調(diào)用被缺省地認(rèn)為是遠(yuǎn)程任務(wù),所以這種問(wèn)題依然存在。 由于以上所提到的問(wèn)題,在遠(yuǎn)程方法的調(diào)用次數(shù)增加的時(shí)候,相關(guān)的應(yīng)用程序性能將會(huì)有很大的下降,因此利用多次方法調(diào)用而取得單一的信息是非常低效的;在這種情況,建議使用傳輸對(duì)象來(lái)包含所有的程序數(shù)據(jù),即每次方法調(diào)用可以發(fā)送和接收這個(gè)傳輸對(duì)象;當(dāng)用戶向EJB發(fā)出對(duì)于程序數(shù)據(jù)的請(qǐng)求時(shí),EJB會(huì)創(chuàng)建這個(gè)傳輸對(duì)象,將它的各個(gè)域賦以相關(guān)的數(shù)值,并將整個(gè)對(duì)象傳送

11、給用戶。4 值對(duì)象能提高J2EE中RMI的效率使用粗粒度數(shù)據(jù)對(duì)象來(lái)代表這些信息,我們把EJB 中的屬性變量整和到一個(gè) 數(shù)據(jù)對(duì)象ContactInFORMation 中,之后該對(duì)象序列化后被傳輸?shù)娇蛻舳苏{(diào)用,在那里被逆序列化后被客戶解讀,可以看出后來(lái)的解讀過(guò)程是客戶端對(duì)本地對(duì)象的操作,而不是對(duì)遠(yuǎn)程EJB 的操作,所以沒(méi)有占用服務(wù)器的工作,減少了資源利用。 5 值對(duì)象在RMI中傳輸必須序列化在RMI分布式應(yīng)用系統(tǒng)中,服務(wù)器與客戶機(jī)之間傳遞的Java對(duì)象必須是可序列化的對(duì)象。不可序列化的對(duì)象不能在對(duì)象流中進(jìn)行傳遞。對(duì)象序列化擴(kuò)展了核心Java輸入/輸出類(lèi),同時(shí)也支持對(duì)象。對(duì)象序列化支持把對(duì)象編碼以及

12、將通過(guò)它們可訪問(wèn)到的對(duì)象編碼變成字節(jié)流;同時(shí),它也支持流中對(duì)象圖形的互補(bǔ)重構(gòu)造。序列化用于輕型持久性和借助于套接字或遠(yuǎn)程方法調(diào)用(RMI)進(jìn)行的通信。序列化中現(xiàn)在包括一個(gè) API(Application Programming Interface,應(yīng)用程序接口),允許獨(dú)立于類(lèi)的域指定對(duì)象的序列化數(shù)據(jù),并允許使用現(xiàn)有協(xié)議將序列化數(shù)據(jù)域?qū)懭肓髦谢驈牧髦凶x取,以確保與缺省讀寫(xiě)機(jī)制的兼容性。為編寫(xiě)應(yīng)用程序,除多數(shù)瞬態(tài)應(yīng)用程序外,都必須具備存儲(chǔ)和檢索 Java對(duì)象的能力。以序列化方式存儲(chǔ)和檢索對(duì)象的關(guān)鍵在于提供重新構(gòu)造該對(duì)象所需的足夠?qū)ο鬆顟B(tài)。存儲(chǔ)到流的對(duì)象可能會(huì)支持 Serializable(可序列化

13、)或 Externalizable(可外部化)接口。對(duì)于Java對(duì)象,序列化形式必須能標(biāo)識(shí)和校驗(yàn)存儲(chǔ)其內(nèi)容的對(duì)象所屬的 Java類(lèi),并且將該內(nèi)容還原為新的實(shí)例。對(duì)于可序列化對(duì)象,流將提供足夠的信息將流的域還原為類(lèi)的兼容版本。對(duì)于可外部化對(duì)象,類(lèi)將全權(quán)負(fù)責(zé)其內(nèi)容的外部格式。序列化 Java 對(duì)象的目的是:提供一種簡(jiǎn)單但可擴(kuò)充的機(jī)制,以序列化方式維護(hù) Java對(duì)象的類(lèi)型及安全屬性;具有支持編組和解編的擴(kuò)展能力以滿足遠(yuǎn)程對(duì)象的需要;具有可擴(kuò)展性以支持 Java 對(duì)象的簡(jiǎn)單持久性;只有在自定義時(shí),才需對(duì)每個(gè)類(lèi)提供序列化自實(shí)現(xiàn);允許對(duì)象定義其外部格式。6 對(duì)象模式體系結(jié)構(gòu) EJB使用傳輸對(duì)象的時(shí)候,用戶

14、可以通過(guò)僅僅一次方法調(diào)用來(lái)取得整個(gè)對(duì)象,而不是使用多次方法調(diào)用以得到對(duì)象中每個(gè)域的數(shù)值;由于傳輸對(duì)象是通過(guò)值傳遞而交送給用戶的,所以所有對(duì)于該傳輸對(duì)象的調(diào)用或取值都是本地調(diào)用,而不是遠(yuǎn)程方法調(diào)用。不過(guò)需要注意的是,這個(gè)傳輸對(duì)象必須具有對(duì)應(yīng)于每個(gè)屬性的訪問(wèn)方法,或者將所有屬性都設(shè)為公共的。類(lèi)圖1表示了值對(duì)象模式的體系結(jié)構(gòu)。圖1 值對(duì)象類(lèi)圖在圖1中,傳輸對(duì)象首先在EJB中創(chuàng)建,然后返回給遠(yuǎn)程客戶;當(dāng)然,傳輸對(duì)象也可以根據(jù)需要融合其他的設(shè)計(jì)模式。7 對(duì)象模式參與模塊的交互 圖2顯示了傳輸對(duì)象模式中的參與模塊和它們之間的交互。圖2 值對(duì)象序列圖 傳輸對(duì)象模式的各個(gè)參與模塊: (1)客戶(Client)

15、??蛻舸砹薊JB所提供服務(wù)的使用者,通常是運(yùn)行于用戶終端的應(yīng)用程序。 (2)業(yè)務(wù)對(duì)象。業(yè)務(wù)對(duì)象表示在一個(gè)模式中由會(huì)話bean、實(shí)體bean或數(shù)據(jù)訪問(wèn)對(duì)象(Data Access Object)實(shí)現(xiàn)的角色。業(yè)務(wù)對(duì)象通常負(fù)責(zé)創(chuàng)建傳輸對(duì)象,并根據(jù)請(qǐng)求將其傳送到相關(guān)的用戶;業(yè)務(wù)對(duì)象也可以從用戶中取得一個(gè)傳輸對(duì)象格式的數(shù)據(jù),并應(yīng)用這些數(shù)據(jù)來(lái)執(zhí)行一些更新。 (3)傳輸對(duì)象。傳輸對(duì)象是一個(gè)可序列化的Java對(duì)象。在這個(gè)對(duì)象的類(lèi)中,通常會(huì)有一個(gè)包含所有域的構(gòu)造函數(shù),用來(lái)創(chuàng)建這個(gè)傳輸對(duì)象。 這個(gè)傳輸對(duì)象中的成員變量基本都被定義為公共,從而無(wú)需為它們提供相關(guān)的訪問(wèn)方法。當(dāng)然如果存在一定安全的需要,相關(guān)的成員變量

16、也可以設(shè)為保護(hù)或私有,并且給定各自的訪問(wèn)方法。由此可見(jiàn),傳輸對(duì)象的設(shè)計(jì)是隨著應(yīng)用系統(tǒng)的需要不同而改變的,是否將對(duì)象中的成員變量設(shè)為公共,或提供一定的訪問(wèn)方法,將是一個(gè)很重要的設(shè)計(jì)問(wèn)題。通常在實(shí)現(xiàn)這個(gè)模式時(shí),最多采取的是可更新的傳輸對(duì)象策略和多傳輸對(duì)象策略。在可更新的傳輸對(duì)象策略中,傳輸對(duì)象不僅可以從服務(wù)于用戶的業(yè)務(wù)對(duì)象中取得相關(guān)信息和數(shù)據(jù),還可以從業(yè)務(wù)對(duì)象中得到用戶對(duì)于數(shù)據(jù)所需要進(jìn)行的改變。8 值對(duì)象在業(yè)務(wù)中的應(yīng)用8.1 更新值對(duì)象類(lèi)圖說(shuō)明 圖3以類(lèi)圖表的形式表明了業(yè)務(wù)對(duì)象和傳輸對(duì)象之間的關(guān)系。圖3 可更新值對(duì)象類(lèi)圖 業(yè)務(wù)對(duì)象創(chuàng)建了傳輸對(duì)象。而用戶通過(guò)訪問(wèn)業(yè)務(wù)對(duì)象,既得到了所需的信息,也對(duì)相關(guān)

17、數(shù)據(jù)做出了一定的修改;為了能夠使得用戶可以修改業(yè)務(wù)對(duì)象各個(gè)域的取值,這個(gè)對(duì)象必須提供一定的變值方法,而出于對(duì)Web負(fù)擔(dān)和應(yīng)用服務(wù)器的考慮,業(yè)務(wù)對(duì)象所提供的方法最好以傳輸對(duì)象為參數(shù)。相應(yīng)地,這些方法可以去調(diào)用傳輸對(duì)象所提供的方法,來(lái)設(shè)置傳輸對(duì)象的各個(gè)成員變量的取值;同時(shí)在傳輸對(duì)象的方法中,我們也可以植入數(shù)據(jù)驗(yàn)證和完整性檢查的邏輯,這樣在用戶從業(yè)務(wù)對(duì)象的方法得到傳輸對(duì)象時(shí),可以直接調(diào)用傳輸對(duì)象的成員方法進(jìn)行本地?cái)?shù)據(jù)訪問(wèn),當(dāng)然這種本地?cái)?shù)據(jù)訪問(wèn)不會(huì)影響到業(yè)務(wù)對(duì)象。 當(dāng)用戶調(diào)用業(yè)務(wù)對(duì)象的變值方法時(shí),該方法會(huì)將用戶端的傳輸對(duì)象序列化,再將它發(fā)送給業(yè)務(wù)對(duì)象;業(yè)務(wù)對(duì)象接收到更新的傳輸對(duì)象,便將這些更新寫(xiě)回到自

18、己的對(duì)象拷貝中去; 這里需要說(shuō)明的是,上面提到的寫(xiě)回只是涉及到被更新的變量,而不是全部變量的寫(xiě)回,因此我們需要在傳輸對(duì)象中另設(shè)置一個(gè)變量,來(lái)指定哪些成員變量被用戶更新過(guò),這也就使得這種模式的設(shè)計(jì)相對(duì)復(fù)雜,開(kāi)發(fā)人員需要考慮同步化和版本控制的問(wèn)題。8.2 更新值對(duì)象序列圖說(shuō)明圖4顯示了這個(gè)更新過(guò)程的序列圖。圖4 可更新值對(duì)象序列圖8.3 多傳輸值對(duì)象說(shuō)明 多傳輸對(duì)象的方法是指一個(gè)單一的業(yè)務(wù)對(duì)象可以根據(jù)用戶請(qǐng)求制造多個(gè)不同的傳輸對(duì)象。也就是說(shuō),業(yè)務(wù)對(duì)象和它所創(chuàng)建的傳輸對(duì)象保持一對(duì)多的關(guān)系。類(lèi)圖5表示了這種實(shí)現(xiàn)方法的各個(gè)參與模塊以及它們之間的調(diào)用關(guān)系。圖5 多傳輸對(duì)象類(lèi)圖當(dāng)一個(gè)用戶需要A類(lèi)型的傳輸對(duì)象

19、時(shí),他會(huì)激活相關(guān)EJB的getDataA()方法來(lái)取得傳輸對(duì)象A;當(dāng)他需要B類(lèi)型的傳輸對(duì)象時(shí),他會(huì)激活getDataB()方法來(lái)獲取傳輸對(duì)象B;依此類(lèi)推。序列圖6表示了這一過(guò)程。圖6 多傳輸對(duì)象序列圖 使用這種設(shè)計(jì)模式,應(yīng)用系統(tǒng)的實(shí)體bean及其遠(yuǎn)程接口會(huì)變得十分簡(jiǎn)單。實(shí)體bean中無(wú)需再為每一個(gè)成員變量都實(shí)現(xiàn)一個(gè)set()和get()方法,并在遠(yuǎn)程接口中實(shí)現(xiàn)相應(yīng)的定義。用戶無(wú)需再進(jìn)行多次的方法調(diào)用來(lái)取得信息和數(shù)據(jù),所需要的只是一次方法調(diào)用以獲得整個(gè)傳輸對(duì)象。當(dāng)然這里需要考慮服務(wù)器負(fù)擔(dān)和大量數(shù)據(jù)一次傳輸?shù)臋?quán)衡。開(kāi)發(fā)人員可以根據(jù)不同的需要來(lái)選擇不同的實(shí)現(xiàn)方法。9 應(yīng)用例子9.1 上傳值對(duì)象public ValueObject execProc(ValueObject pVO) throws DataAccessException /轉(zhuǎn)換值對(duì)象UserInfoVO userVO = (UserInfoVO) pVO;/用一個(gè)粗粒度的對(duì)象上傳參數(shù),解析參數(shù)9.2 下傳值對(duì)象方法:public ValueObject delegate(ValueObject pVO) throws Exception .調(diào)用: UserVO userVO = new UserVO();

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論