999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Session Facade在分布式系統(tǒng)中的應(yīng)用研究

2008-04-12 00:00:00
現(xiàn)代電子技術(shù) 2008年10期

摘 要:討論一種J2EE設(shè)計(jì)模式Session Facade在分布式系統(tǒng)開發(fā)設(shè)計(jì)中的使用,進(jìn)一步針對(duì)分布式系統(tǒng)并行處理的復(fù)雜性,結(jié)合Singleton模式提出對(duì)Session Facade的一種改進(jìn)方法。通過設(shè)計(jì)模式的改進(jìn)可以顯著提高某一個(gè)領(lǐng)域內(nèi)系統(tǒng)開發(fā)設(shè)計(jì)的效率,能夠有效增強(qiáng)系統(tǒng)的安全性、數(shù)據(jù)完整性、性能、可維護(hù)性和可擴(kuò)展性。

關(guān)鍵詞:?jiǎn)巫幽J剑?會(huì)話門面; 分布式; 并行計(jì)算

中圖分類號(hào):TP311.5 文獻(xiàn)標(biāo)識(shí)碼:A

文章編號(hào):1004-373X(2008)10-054-03

Research and Application on Session Facade in Distributed System

SHI Liang

(School of ElectronicInformation,Jiangsu University of Science and Technology,Zhenjiang,212003,China)

Abstract:Design pattern is the elegant solution to common problems in software design.The application of a type of J2EE design pattern-Session Facade is discussed.Combined with Singleton,a method to improve Session Facade for the complexity of parallel programming is put forward.The efficiency of developing and designing a system of a specified domain can be improved remarkably by design pattern,therefore it can enhance numerous aspects of the system,including security,data integrity,manageability,and scalability.

Keywords:singleton;session facade;distributed;parallel computing

近年來,隨著網(wǎng)絡(luò)技術(shù)發(fā)展和應(yīng)用的需要,分布式應(yīng)用軟件系統(tǒng)的開發(fā)逐漸成為軟件界關(guān)注的焦點(diǎn)。為此,Microsoft在Visual C++的基礎(chǔ)上推出了C# ;Sun也在Java 2的基礎(chǔ)上推出了J2EE,C#是J2EE的競(jìng)爭(zhēng)對(duì)手,不過就分布式應(yīng)用程序的開發(fā)平臺(tái)來講,目前大部分軟件開發(fā)人員還是傾向于J2EE。而各種J2EE設(shè)計(jì)模式的出現(xiàn)更是為系統(tǒng)的開發(fā)設(shè)計(jì)提供了極為方便的解決方案,多種模式的組合顯著提高了系統(tǒng)開發(fā)的效率和性能[1,2]。與單進(jìn)程或單線程應(yīng)用程序比較,分布式應(yīng)用程序有他自身的特點(diǎn)。分布式的體系結(jié)構(gòu)以及多層之間的通信會(huì)帶來很多性能問題[3]。本文將對(duì)文獻(xiàn)[4]中的Session Facade設(shè)計(jì)模式在分布式系統(tǒng)開發(fā)中的設(shè)計(jì)使用進(jìn)行討論,最后針對(duì)并行計(jì)算結(jié)合Singleton模式提出一種改進(jìn)方法,展示了正確的設(shè)計(jì)Session Facade設(shè)計(jì)模式并針對(duì)特殊情況對(duì)其改進(jìn)后應(yīng)用到分布式應(yīng)用程序開發(fā)中,提高開發(fā)效率的同時(shí)還提高了系統(tǒng)的性能。

1 Session Facade(會(huì)話門面)模式

客戶端可以直接通過網(wǎng)絡(luò)訪問參與工作流的業(yè)務(wù)對(duì)象,如圖1所示,這樣處理時(shí)存在著幾個(gè)問題:

(1) 當(dāng)依靠RMI-IIOP技術(shù)進(jìn)行跨越網(wǎng)絡(luò)的調(diào)用時(shí),系統(tǒng)性能會(huì)受到極大影響。如果一個(gè)客戶端需要2個(gè)業(yè)務(wù)對(duì)象的信息(例如說賬戶余額和賬戶所有者姓名),則將需要2個(gè)遠(yuǎn)程方法調(diào)用。當(dāng)存在著大量的客戶端,而每個(gè)客戶端又需要調(diào)用多個(gè)業(yè)務(wù)對(duì)象時(shí),這種細(xì)粒度的網(wǎng)絡(luò)調(diào)用就會(huì)成倍的增加,系統(tǒng)性能就會(huì)因?yàn)榫W(wǎng)絡(luò)負(fù)載而降低。

(2) 更重要的是,如果允許 客戶端直接訪問業(yè)務(wù)對(duì)象,那么就要求客戶端了解業(yè)務(wù)對(duì)象的內(nèi)部方法,這樣就把業(yè)務(wù)模型的細(xì)節(jié)不適當(dāng)?shù)乇┞督o客戶端,從而增加了客戶端與業(yè)務(wù)對(duì)象之間的耦合度。當(dāng)業(yè)務(wù)對(duì)象的方法做了改動(dòng)時(shí),調(diào)用他的客戶端的程序也要進(jìn)行相應(yīng)的修改。這樣做就違背了EJB的設(shè)計(jì)中要求具有良好的可移植性的原則。

Session Facade[4]模式為避免這些問題提供了很好的解決方案。Facade[5]模式描述為:“為子系統(tǒng)中的一套接口提供了一個(gè)統(tǒng)一的接口。Facade 定義了一個(gè)更高層次的接口,使子系統(tǒng)更容易使用。” 在EJB設(shè)計(jì)中,Session Facade是應(yīng)用最廣泛的設(shè)計(jì)模式。他應(yīng)用Session Bean實(shí)現(xiàn)Facade模式的思想,把構(gòu)成子系統(tǒng)的一套業(yè)務(wù)對(duì)象“包裝”在Session Bean中。這樣,Session Facade作為客戶端訪問業(yè)務(wù)對(duì)象的攔截器,屏蔽了業(yè)務(wù)對(duì)象。EJB客戶端訪問Session Bean代替訪問業(yè)務(wù)對(duì)象,當(dāng)一個(gè)EJB客戶端需要調(diào)用多個(gè)業(yè)務(wù)對(duì)象的方法時(shí),他只需要進(jìn)行一次粗粒度的遠(yuǎn)程方法調(diào)用,將請(qǐng)求送給Session Facade,再由Session Facade通過本地方法調(diào)用,調(diào)用相應(yīng)的業(yè)務(wù)對(duì)象,執(zhí)行其方法。這樣就減輕了網(wǎng)絡(luò)負(fù)載,提高了系統(tǒng)性能。如圖2所示。

2 Session Facade模式的設(shè)計(jì)應(yīng)用

在實(shí)現(xiàn)Session Facade時(shí),首先必須決定門面的Session Bean究竟是有狀態(tài)的還是無(wú)狀態(tài)的,這一點(diǎn)必須根據(jù)Session Facade為了完成用例請(qǐng)求所要實(shí)現(xiàn)的業(yè)務(wù)過程來決定。 

無(wú)狀態(tài)會(huì)話門面 使用stateless session bean 來代表公用的服務(wù)流程,這種服務(wù)流程只需要執(zhí)行一次方法調(diào)用就能完成服務(wù)。因此在設(shè)計(jì)會(huì)話門面前,先對(duì)用例和應(yīng)用場(chǎng)景進(jìn)行考察。如果用例是無(wú)會(huì)話的,那么客戶端只需要啟動(dòng)該用例,調(diào)用會(huì)話門面上的一個(gè)方法即可。方法調(diào)用完成了,用例也就完成了。無(wú)需在多次方法調(diào)用之間保存會(huì)話狀態(tài)。

有狀態(tài)會(huì)話門面 使用stateful session bean代表區(qū)分個(gè)體的,短期的工作流程。這種工作流程需要多次方法調(diào)用才能完成任務(wù),在客戶端的多次方法調(diào)用之間,必須保存會(huì)話狀態(tài)。在這種應(yīng)用場(chǎng)景下,使用有狀態(tài)的session bean實(shí)現(xiàn)會(huì)話門面。

在下面的應(yīng)用范例中,可以看到session facade本身只包含很少的業(yè)務(wù)邏輯,他把各種細(xì)粒度的交互集中到少數(shù)粗粒度的方法中,從而控制客戶端對(duì)業(yè)務(wù)對(duì)象的訪問,并且當(dāng)業(yè)務(wù)對(duì)象的方法改動(dòng)時(shí),只需要修改Session Bean,而客戶端可以保持不變。這就減少了客戶端和業(yè)務(wù)對(duì)象之間的耦合度,同時(shí)客戶端也不必管理事務(wù)的細(xì)節(jié)。

客戶端層:

class clientHelper{ 

public Object Init(String JNDIName) { 

InitialContext cntxt = new InitialContext( );

return cntxt.lookup(JNDIName);

} 

public myEjbProxy getProxySession(int UID){ 

//這里返回會(huì)話門面的遠(yuǎn)程對(duì)象 

Object ref=Init(\"java:comp/env/ejb/myEjbProxy\");

myEjbProxyHome myProxyHome= (myEjbProxyHome )PortableRemoteObject.narrow(ref,myEjbProxyHome.class);

return myProxyHome.create(UID);

} 

public CartItem getCartItem(int UID){ 

// 獲得會(huì)話門面myEjbProxy,這是一個(gè)有狀態(tài)的門面 

myEjbProxy theproxy = getProxySession(UID);

return theproxy.getCartItem();

} 

…

…

} 

會(huì)話門面:

public class myEjbProxyBean implements SessionBean{ 

…

…

public CartItem getCartItem(){ 

//調(diào)用實(shí)體bean中的方法 

} 

}

3 并行計(jì)算中對(duì)Session Facade模式的改進(jìn) 

對(duì)分布式系統(tǒng)的特點(diǎn)進(jìn)一步分析,目前大多數(shù)分布式系統(tǒng)(特別是中等粒度或粗粒度的應(yīng)用)采用的都是常見的并行處理技術(shù),如任務(wù)池(task-term)或者分治法(divide and conquer)[6],但是采用這些方法開發(fā)系統(tǒng),處理并行的代碼會(huì)和同步、通信處理的代碼緊緊交織在一起,增加了系統(tǒng)的復(fù)雜性,更不符合當(dāng)前可重用軟件松耦合的要求。

原有的會(huì)話門面模式作為一種遠(yuǎn)程連接的集成抽象,并不能獨(dú)自的解決這個(gè)問題,不管是有狀態(tài)會(huì)話還是無(wú)狀態(tài)會(huì)話都需要借助EJB容器具有的集群功能實(shí)現(xiàn)并發(fā)控制,通過對(duì)home-is-clusterable,stateless-bean-is-clusterable,stateless-bean-load-algorithm和 stateless-bean-is-clusterableparameter等參數(shù)的設(shè)置提供負(fù)載平衡的功能。這就大大提高了系統(tǒng)的復(fù)雜度,更主要的是這使得系統(tǒng)的并行處理完全依賴于EJB容器,對(duì)于那些具有遺留系統(tǒng)的分布式應(yīng)用程序設(shè)計(jì),如何處理會(huì)話門面之后的對(duì)象的并發(fā)訪問就成了問題。在這種情況下,引入了單子模式(Singleton)[5]。

3.1 單子模式(Singleton)

Singleton模式是一種單線程的設(shè)計(jì)模式,主要作用是保證在Java應(yīng)用程序中,一個(gè)類Class只有一個(gè)實(shí)例存在,這樣就可以避免并發(fā)沖突。singleton能夠被狀態(tài)化;這樣,多個(gè)單態(tài)類在一起就可以作為一個(gè)狀態(tài)倉(cāng)庫(kù)一樣向外提供服務(wù);另外方面,Singleton也能夠被無(wú)狀態(tài)化。Singleton類似于全局對(duì)象。但是實(shí)際上,并不能用全局對(duì)象代替Singleton模式,這是因?yàn)椋浩湟唬罅渴褂萌謱?duì)象會(huì)使得程序質(zhì)量降低。其二,全局對(duì)象的方法并不能阻止人們將一個(gè)類實(shí)例化多次:除了類的全局實(shí)例外,開發(fā)人員仍然可以通過類的構(gòu)造函數(shù)創(chuàng)建類的多個(gè)局部實(shí)例,從而用于多線程的應(yīng)用程序。而Singleton模式則通過從根本上控制類的創(chuàng)建,將“保證只有一個(gè)實(shí)例”這個(gè)任務(wù)交給了類本身,開發(fā)人員不可能再有其他途徑得到類的多個(gè)實(shí)例。這一點(diǎn)是全局對(duì)象方法與Singleton模式的根本區(qū)別。使用Singleton可以節(jié)省內(nèi)存,因?yàn)樗拗屏藢?shí)例的個(gè)數(shù),有利于Java垃圾回收(garbage collection)。

3.2 Session Facade模式與Singleton的結(jié)合

將單子模式作為Session Facade模式的一個(gè)模塊,改進(jìn)后的Session Facade模式可以稱為DPSF(Distributed Processing Session Facade),模式內(nèi)包括接口,負(fù)責(zé)輸入輸出,還包括多個(gè)連接,每條連接都可以把他看作是一個(gè)singleton的復(fù)制(replicate)(見圖3),可以處理一個(gè)進(jìn)程,正好對(duì)應(yīng)于單線程編程的業(yè)務(wù)對(duì)象。門面的接口從客戶端得到輸入,通過負(fù)載平衡的算法分配到對(duì)應(yīng)的連接,該連接可能連到其他服務(wù)器上的業(yè)務(wù)對(duì)象,也可能是本機(jī)上的應(yīng)用程序,每個(gè)連接處理完返回結(jié)果到接口,依次傳遞到對(duì)應(yīng)的節(jié)點(diǎn)。在工作時(shí),模式內(nèi)的每條連接都處于循環(huán)服務(wù)方式(service-loop),通過端口等待輸入,接收到輸入的信息后,將輸入傳遞給對(duì)應(yīng)的Singleton,處理完后從原端口返回結(jié)果,創(chuàng)建實(shí)例,建立連接(見圖4)。

外部經(jīng)常通過調(diào)用靜態(tài)方法Singleton.getInstance( )訪問單態(tài)類。用Singleton實(shí)現(xiàn)多線程的并發(fā)控制,實(shí)例延遲初始化(lazy initialization)的創(chuàng)建步驟是個(gè)關(guān)鍵的問題,通常可將該方法包含在并發(fā)處理的代碼中。DPSF中Singleton的實(shí)現(xiàn)方法如下:

public class Singleton {

private Singleton( ){ }

//注意這是private 只供內(nèi)部調(diào)用

public static synchronized Singleton getInstance( )

{

if ( instance = = 1 )

{

//多線程應(yīng)用中的關(guān)鍵

instance = new Singleton( );

}

return instance;

}

} 

沒有實(shí)際訪問該實(shí)例的時(shí)候,就可以避免創(chuàng)建實(shí)例,防止浪費(fèi)資源。

4 結(jié) 語(yǔ)

位于業(yè)務(wù)層的Session Facade 模式對(duì)于用J2EE設(shè)計(jì)分布式系統(tǒng)非常重要,提高了性能、降低了耦合性、使系統(tǒng)的層次更加清楚,而改進(jìn)后的DPSF針對(duì)并行計(jì)算抽象并行處理的技術(shù),并且在艦船綜合后勤保障計(jì)算機(jī)輔助系統(tǒng)中得到應(yīng)用,取得很好的效果。他避免了對(duì)J2EE服務(wù)器過度的依賴,尤其針對(duì)具有遺留系統(tǒng)的分布式應(yīng)用程序的開發(fā)具有重要意義,而且作為一種可復(fù)用的模式,在改善系統(tǒng)性能的同時(shí),使開發(fā)人員僅需提供一些應(yīng)用專有的程序和節(jié)點(diǎn)間傳送數(shù)據(jù)和結(jié)果的通信代碼,大大提高系統(tǒng)開發(fā)的效率和可靠性。

參 考 文 獻(xiàn)

[1]曾文,章小芳.基于多設(shè)計(jì)模式在J2EE項(xiàng)目中的應(yīng)用研究[J].微計(jì)算機(jī)應(yīng)用,2005,26(1):110-112.

[2]許文雨,申曉龍,譚獻(xiàn)海.J2EE設(shè)計(jì)模式的研究與應(yīng)用[J].成都信息工程學(xué)院學(xué)報(bào),2005,20(4):402-406.

[3]Hansen P Brinch.Search for Simplicity:Essays in Parallel Programming[J].IEEE Computer Society Press,1996:422-446.

[4]Deepak Alur,John Crupi,Dan Malks.Core J2EE(tm)Patterns:Best Practices and Design Strategies\\[M\\].Second Edition.Prentice Hall PTR,2003.

[5]Erich Gamma,Richard Helms,Ralph Johnson,et al.Design Patterns:Elements of Reusable Object-Oriented Design [M].Addison-Wesley,1995.

[6]Andrews G,Schneider F B.Concepts and Notations for Concurrent Programming[J].ACM Computing Surveys,1983,15(1).

作者簡(jiǎn)介 石 亮 女,1981年出生,江蘇鎮(zhèn)江人,助教。主要從事軟件工程理論與應(yīng)用的研究。

主站蜘蛛池模板: 国产精品国产主播在线观看| 久久久精品国产亚洲AV日韩| 国产成人亚洲欧美激情| 真实国产乱子伦视频| 国产一级α片| 五月天综合网亚洲综合天堂网| 91无码人妻精品一区二区蜜桃| 色妞www精品视频一级下载| 日韩欧美国产另类| 老司机精品一区在线视频| 久久成人免费| 亚洲日韩精品伊甸| 国产精品一区二区不卡的视频 | 欧美激情视频在线观看一区| 国产视频自拍一区| 69视频国产| 亚洲人成网址| 青草视频免费在线观看| 欧美黑人欧美精品刺激| 欧美一区二区丝袜高跟鞋| 亚洲全网成人资源在线观看| 国产精品视频999| 好紧好深好大乳无码中文字幕| 2021国产乱人伦在线播放| 午夜精品国产自在| 久久亚洲国产视频| 色婷婷狠狠干| 一级黄色网站在线免费看| 在线日韩日本国产亚洲| 香蕉视频在线观看www| 亚洲自偷自拍另类小说| 亚洲成人播放| 亚洲国产精品日韩欧美一区| 97久久免费视频| 99热亚洲精品6码| 亚洲精品大秀视频| 欧美国产在线精品17p| 中国成人在线视频| 中文字幕丝袜一区二区| 亚洲资源站av无码网址| 免费毛片视频| 四虎永久免费地址在线网站 | 日韩中文字幕亚洲无线码| 亚洲精品午夜无码电影网| 91偷拍一区| 国产又黄又硬又粗| 国产女人综合久久精品视| 欧美成人第一页| 久久久久亚洲av成人网人人软件| 亚洲伊人久久精品影院| 亚洲精品老司机| 国产黄色免费看| 亚洲久悠悠色悠在线播放| aaa国产一级毛片| 欧洲熟妇精品视频| 亚洲精品欧美重口| 国产亚洲精久久久久久久91| 国产人人乐人人爱| 欧美日韩亚洲综合在线观看| 亚洲AV无码乱码在线观看代蜜桃 | 丁香五月激情图片| 99精品伊人久久久大香线蕉| 国产国产人成免费视频77777| 精品人妻系列无码专区久久| 在线观看热码亚洲av每日更新| 色成人综合| 在线综合亚洲欧美网站| 天天干天天色综合网| 欧美精品不卡| 欧美性猛交xxxx乱大交极品| 亚洲精品无码av中文字幕| aⅴ免费在线观看| 国产成人啪视频一区二区三区 | 免费大黄网站在线观看| 一级成人a毛片免费播放| 亚洲AV成人一区二区三区AV| 日韩精品成人网页视频在线| 高清欧美性猛交XXXX黑人猛交 | 亚洲日韩AV无码一区二区三区人| 久久久久久久97| 91精品国产综合久久不国产大片| 色香蕉网站|