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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、模式和window狀態(tài)分別來表示portlet正在執(zhí)行的功能(查看,編輯,幫助)以及門戶頁實際狀態(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中,當servlet容器接收到一個get請求的時

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

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

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

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

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

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

16、ebservice的調(diào)用會產(chǎn)生網(wǎng)絡瓶頸,這樣就給系統(tǒng)帶來了性能問題。4 mvc模式portlet調(diào)用服務方案 針對門戶中的服務可以分為兩種,而WSRP在客戶端的調(diào)用代碼已經(jīng)由調(diào)用wsrp服務的門戶實現(xiàn)了。這里我們把關(guān)注點聚焦到面向數(shù)據(jù)的服務上來。 回顧前面portlet容器的運作機制以及相關(guān)介紹,portlet是控制器,jsp是展現(xiàn)層,這里把服務的內(nèi)容封裝到javabean中作為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ā)請求到對應的jsp文件中這里,portlet容器接收到瀏覽器端的請求后,portlet的doView方法中先實例化jsp中的相關(guān)需要從服務獲取數(shù)據(jù)的javabeanbean對象,然后獲取web服務調(diào)用得來的數(shù)據(jù)設(shè)置到javabean中并存儲在resquest對象中,然后通過portlet請求轉(zhuǎn)發(fā)器,轉(zhuǎn)發(fā)請求內(nèi)容到目標jsp,在目標jsp中通過獲取request對象的javabean值來最終發(fā)送響應給瀏覽器展現(xiàn)頁面。5 用oscache和jms提升系統(tǒng)性能 使用mvc模式固然解決了系統(tǒng)開發(fā)難于維護

18、的問題。但是由于Web服務始終是以遠程的形式出現(xiàn)的,而即使服務在本地,portlet仍通過服務調(diào)用的形式來使用服務,那么效率也會大打折扣。因此本地調(diào)用考慮實現(xiàn)非服務版本。對于遠程服務的調(diào)用,應該說系統(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標記(標記不同,緩存要求不一樣),從而使得這些被標記的數(shù)據(jù)產(chǎn)生處內(nèi)容被oscach

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

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

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

溫馨提示

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

評論

0/150

提交評論