版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用 JSR 168 Portlet應(yīng)用中保持mvc模式帶緩存服務(wù)調(diào)用方案的研究和實(shí)現(xiàn)李立焰 譚慶平 繳名揚(yáng) 李玉(國防科學(xué)技術(shù)大學(xué)計(jì)算機(jī)學(xué)院,長沙 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。對于開發(fā)人員來說,采用良好的技術(shù)架構(gòu)方式對于提高系統(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)性能。最后對全文總結(jié)。2 開發(fā)模型model2model2主要解決系統(tǒng)功能模塊和顯示模塊的分離以增強(qiáng)可維護(hù)性。Model2是一種mvc模式。其jsp架構(gòu)圖為: MVC是Model,View,Controller的縮寫,它包括三類對象:(1)模型(Model)對象:應(yīng)用程序的主體部分。(2)視圖(View)對象:應(yīng)用程序中負(fù)責(zé)生成用戶界面的部分。(3)控制器(Control)對象:根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示及更新Model對象狀態(tài)的部分。在jsp的應(yīng)用中,servlet作為控制器出現(xiàn),javabean作為model出現(xiàn),而jsp(當(dāng)然也可以用v
4、elocity,freemark等模板語言,限于說明方便性本文只限定于使用jsp)則負(fù)責(zé)界面顯示。規(guī)范中把portlet和servlet做了比較并指出其相似和不同之處,下面是其中的一部分比較:相似點(diǎn):l Portlets 是以java技術(shù)為基礎(chǔ)的web構(gòu)件l Portlets受專有容器的管理l Portlets
5、是產(chǎn)生動態(tài)內(nèi)容l Portlets的生命周期由容器管理l Portlets通過請求響應(yīng)模式和web客戶端通信差異點(diǎn):l Portlets只產(chǎn)生整個頁面中的部分標(biāo)記片段。由門戶服務(wù)器負(fù)責(zé)把多個portlet產(chǎn)生的標(biāo)記片段以及門戶中所設(shè)置的修飾片段聚合在一起,從而構(gòu)成整個輸出頁面l
6、; Portlets并不直接綁定到一個url,url必須由portlet api或者標(biāo)記庫標(biāo)簽產(chǎn)生。l Portlets規(guī)定了更加細(xì)粒度的請求處理,把請求劃分為action request和render request,action request主要處理動作設(shè)置,而render request主要負(fù)責(zé)頁面展現(xiàn)。l Portlets有預(yù)定義的門戶
7、模式和window狀態(tài)分別來表示portlet正在執(zhí)行的功能(查看,編輯,幫助)以及門戶頁實(shí)際狀態(tài)的數(shù)量(最大化,最小化,正常)l 一個門戶頁中portlet可以存在多次。 下面比較一個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容器接收到一個get請求的時
10、候,Servelt容器就會調(diào)用此servlet父類的service方法,并由service方法調(diào)度HelloWorldServlet的doGet方法并執(zhí)行方法體內(nèi)的代碼。同理,若servlet容器接收到post請求,那么最后會執(zhí)行doPost方法。 上面的Portlet中有兩種請求方式:actionRequest和renderRequest。當(dāng)portlet容器接收到一個actionRequest請求的時候,如果請求后的portlet模式為view,那么portlet容器先調(diào)用portlet的processAction方法,然后調(diào)用portlet的render方法去執(zhí)行portlet的doVi
11、ew()方法;如果請求后的portlet模式為edit,則最后去調(diào)用doEdit()方法。當(dāng)portlet容器接收到一個renderRequest請求的時候,它將不會調(diào)用processAction方法,portlet容器直接調(diào)用render方法以執(zhí)行對應(yīng)的view模式對應(yīng)的doView方法或是edit模式對應(yīng)的doEdit方法。 由上可見,portlet和servlet在體系結(jié)構(gòu)上有很大的相似性,主要差異只是在功能內(nèi)容上。由此, portlet應(yīng)用中是可以而且很適合使用mvc模式的,這里把portlet對應(yīng)于mvc中的控制器。3 Webservice和portlet調(diào)用服務(wù)性能問題 webse
12、rvice設(shè)計(jì)的主要目標(biāo)是跨位置分布,跨平臺交互協(xié)作。邏輯上webservice對所有應(yīng)用來說都是一樣的,用java語言實(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)這種交互使用到三個關(guān)鍵技術(shù):soap,wsdl,uddi。示意如下: u
13、ddi是一個公共的注冊中心,物理上通常分布在一個單獨(dú)的服務(wù)器中。Wsdl描述服務(wù),和服務(wù)所在的位置直接聯(lián)系在一起。對于客戶程序來說,無論是uddi注冊中心還是wsdl所描述的服務(wù),通常彼此分布在不同的物理機(jī)器上,不同的平臺上。 Portlet門戶應(yīng)用具有單點(diǎn)登錄的特性,擁有系統(tǒng)整合的強(qiáng)大功能,可以實(shí)現(xiàn)設(shè)備無關(guān)性。對不同的客戶,門戶自動提供適合客戶的內(nèi)容:對于瀏覽器可能是html或者xhtml;對于手機(jī),pad則是wml。這種整合應(yīng)用的需求使得門戶技術(shù)特別適合于分布式系統(tǒng)的企業(yè)應(yīng)用。門戶應(yīng)用中portlet通常作為webservice的客戶端程序。 portlet和遠(yuǎn)程應(yīng)用的交互是一個網(wǎng)絡(luò)交互過
14、程。遠(yuǎn)程應(yīng)用中以webservice形式出現(xiàn)的構(gòu)件會獲取其后端EIS或者是其他系統(tǒng)的信息數(shù)據(jù)。Portlet和遠(yuǎn)程應(yīng)用的交互是為了獲取遠(yuǎn)程數(shù)據(jù)。針對這種數(shù)據(jù),目前可以把服務(wù)分為兩類:1.面向數(shù)據(jù)的webservice;2.面向展現(xiàn)的webservice。兩種服務(wù)的性質(zhì)是一樣的,不同的地方只在于兩者提供的數(shù)據(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、議就是針對面向展現(xiàn)的web服務(wù)而建立的。它的目標(biāo)是讓用戶不必經(jīng)過大量的手工編程來獲取數(shù)據(jù),并針對獲取的數(shù)據(jù)提供其展現(xiàn)邏輯;它讓用戶可以在應(yīng)用程序或者門戶中通過一定的工具點(diǎn)擊幾下鼠標(biāo)就可以輕松做到對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代理。更清晰的示意圖如下:由上可見,在這樣一個多網(wǎng)絡(luò)交互的過程中, w
16、ebservice的調(diào)用會產(chǎn)生網(wǎng)絡(luò)瓶頸,這樣就給系統(tǒng)帶來了性能問題。4 mvc模式portlet調(diào)用服務(wù)方案 針對門戶中的服務(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對象 2.獲取webservi
17、ce內(nèi)容,并把得到的數(shù)據(jù)置入相關(guān)javabean中。3. 把javabean封裝到請求對象里。并轉(zhuǎn)發(fā)請求到對應(yīng)的jsp文件中這里,portlet容器接收到瀏覽器端的請求后,portlet的doView方法中先實(shí)例化jsp中的相關(guān)需要從服務(wù)獲取數(shù)據(jù)的javabeanbean對象,然后獲取web服務(wù)調(diào)用得來的數(shù)據(jù)設(shè)置到j(luò)avabean中并存儲在resquest對象中,然后通過portlet請求轉(zhuǎn)發(fā)器,轉(zhuǎn)發(fā)請求內(nèi)容到目標(biāo)jsp,在目標(biāo)jsp中通過獲取request對象的javabean值來最終發(fā)送響應(yīng)給瀏覽器展現(xiàn)頁面。5 用oscache和jms提升系統(tǒng)性能 使用mvc模式固然解決了系統(tǒng)開發(fā)難于維護(hù)
18、的問題。但是由于Web服務(wù)始終是以遠(yuǎn)程的形式出現(xiàn)的,而即使服務(wù)在本地,portlet仍通過服務(wù)調(diào)用的形式來使用服務(wù),那么效率也會大打折扣。因此本地調(diào)用考慮實(shí)現(xiàn)非服務(wù)版本。對于遠(yuǎn)程服務(wù)的調(diào)用,應(yīng)該說系統(tǒng)所要付出的開銷還是很大的,因此有必要引入緩存系統(tǒng)。對于一個jsp頁面,其內(nèi)部數(shù)據(jù)的構(gòu)成可分為相對穩(wěn)定的數(shù)據(jù)和易變數(shù)據(jù)。引入緩存系統(tǒng),客戶層瀏覽器等所需相對穩(wěn)定的數(shù)據(jù)就可以從緩存中獲取,這樣可以提高系統(tǒng)效率。開源網(wǎng)站開發(fā)的產(chǎn)品oscache可以為jsp頁面提供緩存支持。它通過在jsp頁面相關(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頁面的產(chǎn)生而進(jìn)行的(原因是:web服務(wù)調(diào)用的結(jié)果會被置入jsp對應(yīng)的javabean對象中,而這個javabean對象是真正的model)。oscache的標(biāo)記發(fā)揮不了作用。這里使用oscache也提供的另外兩種緩存模式:請求緩存模式和通用緩存模式。請求模式是以一個過濾器來實(shí)現(xiàn)對包含動態(tài)產(chǎn)生的圖象的httpresponse的緩存;通用緩存模式提供了通用的緩存解決方案,任何java代碼可以通過oscache api直接使用oscache的緩存。oscache提供了多種現(xiàn)成的緩存機(jī)制,允許將對象緩存到內(nèi)存,硬盤,以及服務(wù)器集
20、群中,還提供擴(kuò)展接口允許把緩存內(nèi)容放到數(shù)據(jù)庫或者LDAP目錄上,這使得緩存方案在速度和位置上都具有很大的靈活性。由于硬盤緩存機(jī)制可以允許系統(tǒng)崩潰后重新恢復(fù)緩存內(nèi)容。故在這里提出的mvc方案中可以采用內(nèi)存和硬盤緩存兼用的方式以同時獲得速度和可恢復(fù)性的優(yōu)點(diǎn)。 在使用緩存的時候涉及到穩(wěn)定程度如何的問題,即jsp頁面所需要的javabean數(shù)據(jù)在多久時間內(nèi)是穩(wěn)定的。這樣就要用命中率來衡量這種需要緩存的數(shù)據(jù)的穩(wěn)定性。如果對于一個portlet緩存系統(tǒng),為獲取最新數(shù)據(jù),客戶端對系統(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ù)據(jù)是相對穩(wěn)定的。oscache對穩(wěn)定的估計(jì)是人為設(shè)定的,比如統(tǒng)一設(shè)定為15分鐘刷新一次,這不能精確反映出數(shù)據(jù)的準(zhǔn)確性,可能會導(dǎo)致比較大的誤差。這里引入消息傳輸系統(tǒng)JMS。在portlet應(yīng)用端設(shè)計(jì)一個后端EIS數(shù)據(jù)監(jiān)視系統(tǒng)的訂閱者,通過消息傳輸系統(tǒng)JMS連接前端的訂閱系統(tǒng)和后端數(shù)據(jù)監(jiān)視系統(tǒng),當(dāng)后端數(shù)據(jù)發(fā)生變化的時候,數(shù)據(jù)監(jiān)視系統(tǒng)主動通知訂閱系統(tǒng)。并讓前端訂閱系統(tǒng)調(diào)用web服務(wù)后刷新緩存系統(tǒng)數(shù)據(jù)。這樣下次portlet重新訪問緩存系統(tǒng)的時候基本上能得到最新的數(shù)據(jù)(在網(wǎng)絡(luò)延遲,消息系統(tǒng)故障等情況下有可能不能得到最新數(shù)據(jù)),從而提高了客戶端對最新數(shù)據(jù)的命中率,保證了客戶端系統(tǒng)獲取數(shù)據(jù)的及時性并且消除了系統(tǒng)數(shù)據(jù)多次網(wǎng)絡(luò)獲取過程的瓶頸。(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)學(xué)生社團(tuán)活動經(jīng)費(fèi)保障制度
- 人力資源配置與調(diào)整制度
- 企業(yè)風(fēng)險管理與防范制度
- 2026年環(huán)境科學(xué)與工程專業(yè)核心考點(diǎn)題集
- 2026年酒店業(yè)成本控制與效益分析考核題
- 2026年環(huán)境科學(xué)基礎(chǔ)知識考試題目
- 2025年氫燃料電池汽車示范運(yùn)行數(shù)據(jù)采集協(xié)議
- 2025年四川旅游學(xué)院馬克思主義基本原理概論期末考試模擬題帶答案解析(奪冠)
- 山西省晉中市澤州2025-2026年九年級上期末道德與法治試卷(含答案)
- 2025年五寨縣招教考試備考題庫帶答案解析
- 冷庫安全生產(chǎn)責(zé)任制制度
- 2025年航運(yùn)行業(yè)安全生產(chǎn)費(fèi)用提取和使用計(jì)劃
- 納米纖維凝膠隔熱材料的應(yīng)用研究進(jìn)展
- 總公司和分公司的合作協(xié)議
- 保險業(yè)務(wù)代理與分銷合作協(xié)議
- 2025年社區(qū)養(yǎng)老服務(wù)補(bǔ)貼政策及申領(lǐng)方法
- 法學(xué)本科畢業(yè)論文完整范文-大數(shù)據(jù)時代下電信網(wǎng)絡(luò)詐騙犯罪治理研究
- 初中物理八年級下冊第十一章《功和機(jī)械能》測試題(有答案解析)
- 廣東省佛山市2023-2024學(xué)年高一上學(xué)期期末考試物理試題(含答案)
- DL∕T 5157-2012 電力系統(tǒng)調(diào)度通信交換網(wǎng)設(shè)計(jì)技術(shù)規(guī)程
- 【人效】人效儀表盤
評論
0/150
提交評論