JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用_第1頁(yè)
JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用_第2頁(yè)
JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用_第3頁(yè)
JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用_第4頁(yè)
JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用_第5頁(yè)
已閱讀5頁(yè),還剩3頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用    JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用方案的研究和實(shí)現(xiàn)李立焰 譚慶平 繳名揚(yáng) 李玉(國(guó)防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院,長(zhǎng)沙 410073)摘 要 Portlet 和Webservice都是適合開發(fā)分布式應(yīng)用的技術(shù)。分布式系統(tǒng)存在很大的性能問題,本文通過研究擬提出一種能保持mvc模式調(diào)用服務(wù)并引入緩存系統(tǒng)提升性能的方案。關(guān)鍵詞 JSR168 portlet webservice 使用服務(wù) mvc開發(fā)模式 命中率1    

2、60;  引言JSR 168 Portlet 是開放門戶軟件開發(fā)中最核心的部分,它適合于集成不同的應(yīng)用,尤其是分布式的應(yīng)用。而在分布式系統(tǒng)的開發(fā)中經(jīng)常要使用到webservice。對(duì)于開發(fā)人員來說,采用良好的技術(shù)架構(gòu)方式對(duì)于提高系統(tǒng)的健壯性具有十分顯著的意義。本文擬討論JSR 168 Portlet應(yīng)用中調(diào)用服務(wù)的方式以及如何通過緩存系統(tǒng)提升整體系統(tǒng)的性能。文章組織結(jié)構(gòu)如下:第二節(jié)介紹開發(fā)模型model2以及portlet應(yīng)用為什么可以采用mvc模式;第三節(jié)介紹webservice和portlet調(diào)用服務(wù)的技術(shù)體系以及因此造成的性能問題;第四節(jié)介紹一種保持mvc模式的服務(wù)調(diào)用方式;第

3、五節(jié)介紹用oscache和jms來提升系統(tǒng)性能。最后對(duì)全文總結(jié)。2 開發(fā)模型model2model2主要解決系統(tǒng)功能模塊和顯示模塊的分離以增強(qiáng)可維護(hù)性。Model2是一種mvc模式。其jsp架構(gòu)圖為: MVC是Model,View,Controller的縮寫,它包括三類對(duì)象:(1)模型(Model)對(duì)象:應(yīng)用程序的主體部分。(2)視圖(View)對(duì)象:應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。(3)控制器(Control)對(duì)象:根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新Model對(duì)象狀態(tài)的部分。在jsp的應(yīng)用中,servlet作為控制器出現(xiàn),javabean作為model出現(xiàn),而jsp(當(dāng)然也可以用v

4、elocity,freemark等模板語(yǔ)言,限于說明方便性本文只限定于使用jsp)則負(fù)責(zé)界面顯示。規(guī)范中把portlet和servlet做了比較并指出其相似和不同之處,下面是其中的一部分比較:相似點(diǎn):l         Portlets 是以java技術(shù)為基礎(chǔ)的web構(gòu)件l         Portlets受專有容器的管理l         Portlets

5、是產(chǎn)生動(dòng)態(tài)內(nèi)容l         Portlets的生命周期由容器管理l         Portlets通過請(qǐng)求響應(yīng)模式和web客戶端通信差異點(diǎn):l         Portlets只產(chǎn)生整個(gè)頁(yè)面中的部分標(biāo)記片段。由門戶服務(wù)器負(fù)責(zé)把多個(gè)portlet產(chǎn)生的標(biāo)記片段以及門戶中所設(shè)置的修飾片段聚合在一起,從而構(gòu)成整個(gè)輸出頁(yè)面l   

6、;      Portlets并不直接綁定到一個(gè)url,url必須由portlet api或者標(biāo)記庫(kù)標(biāo)簽產(chǎn)生。l         Portlets規(guī)定了更加細(xì)粒度的請(qǐng)求處理,把請(qǐng)求劃分為action request和render request,action request主要處理動(dòng)作設(shè)置,而render request主要負(fù)責(zé)頁(yè)面展現(xiàn)。l         Portlets有預(yù)定義的門戶

7、模式和window狀態(tài)分別來表示portlet正在執(zhí)行的功能(查看,編輯,幫助)以及門戶頁(yè)實(shí)際狀態(tài)的數(shù)量(最大化,最小化,正常)l         一個(gè)門戶頁(yè)中portlet可以存在多次。 下面比較一個(gè)Servlet和Portlet的方法。Servlet:public class HelloWorldServlet extends HttpServlet public void doGet(HttpServletRequest request, HttpServletResponse response) publi

8、c void doPost(HttpServletRequest request, HttpServletResponse response) Portlet:public class HellowWorldPortlet extends GenericPortlet public void doView(RenderRequest request, RenderResponse response)throws PortletException, IOException public void doEdit(RenderRequest request, RenderResponse respo

9、nse)throws PortletException, IOException public void render(RenderRequest request, RenderResponse response) throws PortletException, IOException public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException 上面的HelloWorldServlet中,當(dāng)servlet容器接收到一個(gè)get請(qǐng)求的時(shí)

10、候,Servelt容器就會(huì)調(diào)用此servlet父類的service方法,并由service方法調(diào)度HelloWorldServlet的doGet方法并執(zhí)行方法體內(nèi)的代碼。同理,若servlet容器接收到post請(qǐng)求,那么最后會(huì)執(zhí)行doPost方法。 上面的Portlet中有兩種請(qǐng)求方式:actionRequest和renderRequest。當(dāng)portlet容器接收到一個(gè)actionRequest請(qǐng)求的時(shí)候,如果請(qǐng)求后的portlet模式為view,那么portlet容器先調(diào)用portlet的processAction方法,然后調(diào)用portlet的render方法去執(zhí)行portlet的doVi

11、ew()方法;如果請(qǐng)求后的portlet模式為edit,則最后去調(diào)用doEdit()方法。當(dāng)portlet容器接收到一個(gè)renderRequest請(qǐng)求的時(shí)候,它將不會(huì)調(diào)用processAction方法,portlet容器直接調(diào)用render方法以執(zhí)行對(duì)應(yīng)的view模式對(duì)應(yīng)的doView方法或是edit模式對(duì)應(yīng)的doEdit方法。 由上可見,portlet和servlet在體系結(jié)構(gòu)上有很大的相似性,主要差異只是在功能內(nèi)容上。由此, portlet應(yīng)用中是可以而且很適合使用mvc模式的,這里把portlet對(duì)應(yīng)于mvc中的控制器。3 Webservice和portlet調(diào)用服務(wù)性能問題 webse

12、rvice設(shè)計(jì)的主要目標(biāo)是跨位置分布,跨平臺(tái)交互協(xié)作。邏輯上webservice對(duì)所有應(yīng)用來說都是一樣的,用java語(yǔ)言實(shí)現(xiàn)的應(yīng)用和c+實(shí)現(xiàn)的應(yīng)用可以通過構(gòu)建其上的服務(wù)框架將自身實(shí)現(xiàn)為服務(wù),通過soap協(xié)議進(jìn)行協(xié)同交互。實(shí)現(xiàn)這種交互使用到三個(gè)關(guān)鍵技術(shù):soap,wsdl,uddi。示意如下:                            u

13、ddi是一個(gè)公共的注冊(cè)中心,物理上通常分布在一個(gè)單獨(dú)的服務(wù)器中。Wsdl描述服務(wù),和服務(wù)所在的位置直接聯(lián)系在一起。對(duì)于客戶程序來說,無論是uddi注冊(cè)中心還是wsdl所描述的服務(wù),通常彼此分布在不同的物理機(jī)器上,不同的平臺(tái)上。 Portlet門戶應(yīng)用具有單點(diǎn)登錄的特性,擁有系統(tǒng)整合的強(qiáng)大功能,可以實(shí)現(xiàn)設(shè)備無關(guān)性。對(duì)不同的客戶,門戶自動(dòng)提供適合客戶的內(nèi)容:對(duì)于瀏覽器可能是html或者xhtml;對(duì)于手機(jī),pad則是wml。這種整合應(yīng)用的需求使得門戶技術(shù)特別適合于分布式系統(tǒng)的企業(yè)應(yīng)用。門戶應(yīng)用中portlet通常作為webservice的客戶端程序。 portlet和遠(yuǎn)程應(yīng)用的交互是一個(gè)網(wǎng)絡(luò)交互過

14、程。遠(yuǎn)程應(yīng)用中以webservice形式出現(xiàn)的構(gòu)件會(huì)獲取其后端EIS或者是其他系統(tǒng)的信息數(shù)據(jù)。Portlet和遠(yuǎn)程應(yīng)用的交互是為了獲取遠(yuǎn)程數(shù)據(jù)。針對(duì)這種數(shù)據(jù),目前可以把服務(wù)分為兩類:1.面向數(shù)據(jù)的webservice;2.面向展現(xiàn)的webservice。兩種服務(wù)的性質(zhì)是一樣的,不同的地方只在于兩者提供的數(shù)據(jù)層次不一樣??梢哉J(rèn)為面向展現(xiàn)的webservice是在面向數(shù)據(jù)的webservice基礎(chǔ)上規(guī)定并實(shí)現(xiàn)了其展現(xiàn)的樣式。從數(shù)據(jù)上講前者是后者的子集。Portlet調(diào)用webservcie示意圖如下:實(shí)際上,OASIS制定的WSRP(Web Service For Remote Portlet)協(xié)

15、議就是針對(duì)面向展現(xiàn)的web服務(wù)而建立的。它的目標(biāo)是讓用戶不必經(jīng)過大量的手工編程來獲取數(shù)據(jù),并針對(duì)獲取的數(shù)據(jù)提供其展現(xiàn)邏輯;它讓用戶可以在應(yīng)用程序或者門戶中通過一定的工具點(diǎn)擊幾下鼠標(biāo)就可以輕松做到對(duì)web服務(wù)的集成,從而直接獲取標(biāo)記片段。WSRP的參考實(shí)現(xiàn)是apache的wsrp4j。在門戶中集成WSRP,需要設(shè)置portlet代理,代理調(diào)用遠(yuǎn)程portlet門戶服務(wù),由遠(yuǎn)程門戶服務(wù)通過其標(biāo)記接口獲取遠(yuǎn)程portlet的標(biāo)記。這里遠(yuǎn)程portlet產(chǎn)生的標(biāo)記片段通過遠(yuǎn)程portlet服務(wù)(WSRP)被傳遞給了本地portlet代理。更清晰的示意圖如下:由上可見,在這樣一個(gè)多網(wǎng)絡(luò)交互的過程中, w

16、ebservice的調(diào)用會(huì)產(chǎn)生網(wǎng)絡(luò)瓶頸,這樣就給系統(tǒng)帶來了性能問題。4 mvc模式portlet調(diào)用服務(wù)方案 針對(duì)門戶中的服務(wù)可以分為兩種,而WSRP在客戶端的調(diào)用代碼已經(jīng)由調(diào)用wsrp服務(wù)的門戶實(shí)現(xiàn)了。這里我們把關(guān)注點(diǎn)聚焦到面向數(shù)據(jù)的服務(wù)上來。 回顧前面portlet容器的運(yùn)作機(jī)制以及相關(guān)介紹,portlet是控制器,jsp是展現(xiàn)層,這里把服務(wù)的內(nèi)容封裝到j(luò)avabean中作為model。不失一般性,可以用前面的doView方法為例。 doView(RenderRequest request, RenderResponse response) 1.初始化bean對(duì)象 2.獲取webservi

17、ce內(nèi)容,并把得到的數(shù)據(jù)置入相關(guān)javabean中。3. 把javabean封裝到請(qǐng)求對(duì)象里。并轉(zhuǎn)發(fā)請(qǐng)求到對(duì)應(yīng)的jsp文件中這里,portlet容器接收到瀏覽器端的請(qǐng)求后,portlet的doView方法中先實(shí)例化jsp中的相關(guān)需要從服務(wù)獲取數(shù)據(jù)的javabeanbean對(duì)象,然后獲取web服務(wù)調(diào)用得來的數(shù)據(jù)設(shè)置到j(luò)avabean中并存儲(chǔ)在resquest對(duì)象中,然后通過portlet請(qǐng)求轉(zhuǎn)發(fā)器,轉(zhuǎn)發(fā)請(qǐng)求內(nèi)容到目標(biāo)jsp,在目標(biāo)jsp中通過獲取request對(duì)象的javabean值來最終發(fā)送響應(yīng)給瀏覽器展現(xiàn)頁(yè)面。5 用oscache和jms提升系統(tǒng)性能 使用mvc模式固然解決了系統(tǒng)開發(fā)難于維護(hù)

18、的問題。但是由于Web服務(wù)始終是以遠(yuǎn)程的形式出現(xiàn)的,而即使服務(wù)在本地,portlet仍通過服務(wù)調(diào)用的形式來使用服務(wù),那么效率也會(huì)大打折扣。因此本地調(diào)用考慮實(shí)現(xiàn)非服務(wù)版本。對(duì)于遠(yuǎn)程服務(wù)的調(diào)用,應(yīng)該說系統(tǒng)所要付出的開銷還是很大的,因此有必要引入緩存系統(tǒng)。對(duì)于一個(gè)jsp頁(yè)面,其內(nèi)部數(shù)據(jù)的構(gòu)成可分為相對(duì)穩(wěn)定的數(shù)據(jù)和易變數(shù)據(jù)。引入緩存系統(tǒng),客戶層瀏覽器等所需相對(duì)穩(wěn)定的數(shù)據(jù)就可以從緩存中獲取,這樣可以提高系統(tǒng)效率。開源網(wǎng)站開發(fā)的產(chǎn)品oscache可以為jsp頁(yè)面提供緩存支持。它通過在jsp頁(yè)面相關(guān)數(shù)據(jù)產(chǎn)生處添加oscache標(biāo)記(標(biāo)記不同,緩存要求不一樣),從而使得這些被標(biāo)記的數(shù)據(jù)產(chǎn)生處內(nèi)容被oscach

19、e緩存。按照這里設(shè)計(jì)的mvc模式服務(wù)調(diào)用方案,web服務(wù)的調(diào)用是先于jsp頁(yè)面的產(chǎn)生而進(jìn)行的(原因是:web服務(wù)調(diào)用的結(jié)果會(huì)被置入jsp對(duì)應(yīng)的javabean對(duì)象中,而這個(gè)javabean對(duì)象是真正的model)。oscache的標(biāo)記發(fā)揮不了作用。這里使用oscache也提供的另外兩種緩存模式:請(qǐng)求緩存模式和通用緩存模式。請(qǐng)求模式是以一個(gè)過濾器來實(shí)現(xiàn)對(duì)包含動(dòng)態(tài)產(chǎn)生的圖象的httpresponse的緩存;通用緩存模式提供了通用的緩存解決方案,任何java代碼可以通過oscache api直接使用oscache的緩存。oscache提供了多種現(xiàn)成的緩存機(jī)制,允許將對(duì)象緩存到內(nèi)存,硬盤,以及服務(wù)器集

20、群中,還提供擴(kuò)展接口允許把緩存內(nèi)容放到數(shù)據(jù)庫(kù)或者LDAP目錄上,這使得緩存方案在速度和位置上都具有很大的靈活性。由于硬盤緩存機(jī)制可以允許系統(tǒng)崩潰后重新恢復(fù)緩存內(nèi)容。故在這里提出的mvc方案中可以采用內(nèi)存和硬盤緩存兼用的方式以同時(shí)獲得速度和可恢復(fù)性的優(yōu)點(diǎn)。 在使用緩存的時(shí)候涉及到穩(wěn)定程度如何的問題,即jsp頁(yè)面所需要的javabean數(shù)據(jù)在多久時(shí)間內(nèi)是穩(wěn)定的。這樣就要用命中率來衡量這種需要緩存的數(shù)據(jù)的穩(wěn)定性。如果對(duì)于一個(gè)portlet緩存系統(tǒng),為獲取最新數(shù)據(jù),客戶端對(duì)系統(tǒng)進(jìn)行n次的訪問過程,其中n1次導(dǎo)致了采用緩存的數(shù)據(jù),n2次導(dǎo)致放棄使用緩存數(shù)據(jù)而去訪問緩存系統(tǒng)的后端系統(tǒng)的數(shù)據(jù)。設(shè)置nn1n2

21、,命中率定義為hn1/n=n1/(n1+n2);當(dāng)h接近于1的時(shí)候表明被緩存的數(shù)據(jù)是相對(duì)穩(wěn)定的。oscache對(duì)穩(wěn)定的估計(jì)是人為設(shè)定的,比如統(tǒng)一設(shè)定為15分鐘刷新一次,這不能精確反映出數(shù)據(jù)的準(zhǔn)確性,可能會(huì)導(dǎo)致比較大的誤差。這里引入消息傳輸系統(tǒng)JMS。在portlet應(yīng)用端設(shè)計(jì)一個(gè)后端EIS數(shù)據(jù)監(jiān)視系統(tǒng)的訂閱者,通過消息傳輸系統(tǒng)JMS連接前端的訂閱系統(tǒng)和后端數(shù)據(jù)監(jiān)視系統(tǒng),當(dāng)后端數(shù)據(jù)發(fā)生變化的時(shí)候,數(shù)據(jù)監(jiān)視系統(tǒng)主動(dòng)通知訂閱系統(tǒng)。并讓前端訂閱系統(tǒng)調(diào)用web服務(wù)后刷新緩存系統(tǒng)數(shù)據(jù)。這樣下次portlet重新訪問緩存系統(tǒng)的時(shí)候基本上能得到最新的數(shù)據(jù)(在網(wǎng)絡(luò)延遲,消息系統(tǒng)故障等情況下有可能不能得到最新數(shù)據(jù)),從而提高了客戶端對(duì)最新數(shù)據(jù)的命中率,保證了客戶端系統(tǒng)獲取數(shù)據(jù)的及時(shí)性并且消除了系統(tǒng)數(shù)據(jù)多次網(wǎng)絡(luò)獲取過程的瓶頸。(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論