馬 將
(唐山學(xué)院現(xiàn)代教育技術(shù)中心 唐山 063000)
?
基于MVC模式的多租戶portlet應(yīng)用研究*
馬 將
(唐山學(xué)院現(xiàn)代教育技術(shù)中心 唐山 063000)
在深入研究 Portal和多租戶技術(shù)的基礎(chǔ)上,將MVC設(shè)計(jì)模式與多租戶技術(shù)相結(jié)合,提出了基于MVC模式的多租戶portlet開發(fā)模型。在信息門戶的構(gòu)建中應(yīng)用portlet多租戶技術(shù),考慮了portlet可復(fù)用性和租戶的差異性,支持租戶應(yīng)用的個性化配置和不同數(shù)據(jù)源連接,降低了租戶的Portal構(gòu)建成本,并具有很強(qiáng)的擴(kuò)展性。
多租戶; MVC模式; portlet; JSR286規(guī)范
Class Number TP393
Portal是基于Web的應(yīng)用綜合體,通常提供個性化應(yīng)用,是整合不同資源的信息統(tǒng)一平臺[1]。Portal使用Portlet作為可插拔用戶接口組件,每個Portal頁面由若干Portlet構(gòu)成。Portlet是基于java技術(shù)的web組件,Portlet生成的內(nèi)容被portal聚集并通過個性化配置展現(xiàn)給用戶。portlet容器為portlet提供必需的運(yùn)行環(huán)境,管理Portlet的整個生命周期,并為其提供持久性存儲機(jī)制。Portlet開發(fā)有完備的標(biāo)準(zhǔn)和規(guī)范。
Portlet標(biāo)準(zhǔn)和規(guī)范主要有JSR168、JSR286和WSRP (Web Services for Remote Portlets)1.0與WSRP2.0。 JSR168建立了創(chuàng)建Portlet的標(biāo)準(zhǔn)API. JSR 286兼容JSR 168,并提供了新功能、新特性。符合標(biāo)準(zhǔn)的Portlet應(yīng)用(war包),可以部署運(yùn)行在符合該規(guī)范的不同portal server上,可以由不同的Portal應(yīng)用平臺集成[2]。WSRP規(guī)范中的Portlet應(yīng)用運(yùn)行于遠(yuǎn)程portal服務(wù)器上,遠(yuǎn)程portlet直接集成到外部Portal頁面[3]。
按照portlet的應(yīng)用對象屬性,可將其分為公共portlet、私有portlet和多租戶portlet。與公共信息相關(guān)的Portlet稱為公共portlet;私有portlet為特定用戶開發(fā)的實(shí)現(xiàn)特定功能并用于特定條件下的portlet,在實(shí)現(xiàn)上不具備通用性,應(yīng)用本身有一定的保密性要求;多租戶portlet,可定制,多個租戶共用一個portlet應(yīng)用,租戶的數(shù)據(jù)既有隔離又有共享。
多租戶技術(shù)(multi-tenancy technology)是尋求在多租戶環(huán)境下共用相同的系統(tǒng)或應(yīng)用程序組件。與portal的多租戶技術(shù)相比,portlet的多租戶技術(shù)難度更大,應(yīng)用性更強(qiáng)。
鑒于Portlet應(yīng)用在各門戶間交叉租用的實(shí)際需求,從聯(lián)邦門戶的角度考慮portlet多租戶,更具通用性。聯(lián)邦門戶是包括遠(yuǎn)程分布資源的門戶網(wǎng)絡(luò),各獨(dú)立門戶之間通過portlet共享和交互進(jìn)行信息傳遞,完成信息交互的工作[2]。每個portal 頁面中既可包含本地Portlet也可包含遠(yuǎn)程portlet[4]。聯(lián)邦門戶內(nèi)部可通過portlet共享、portlet多租戶實(shí)現(xiàn)portlet應(yīng)用的跨門戶復(fù)用。
虛擬門戶(Virtual Portal)是在一個已有門戶架構(gòu)基礎(chǔ)上快速實(shí)施一個附加的門戶。同一門戶平臺上可創(chuàng)建和管理多個虛擬門戶,每個虛擬門戶擁有獨(dú)立的邏輯分區(qū),依附于獨(dú)立門戶且運(yùn)行于本地portal server之上。虛擬門戶既可從本地門戶添加本地portlet,也可添加遠(yuǎn)程portlet。
圖1 聯(lián)邦門戶下portlet多租戶管理框架
Portlet生產(chǎn)者通過UDDI注冊中心發(fā)布portlet,portlet租戶用Portal管理工具來搜索UDDI目錄,經(jīng)過portlet管理者注冊申請后,將portlet應(yīng)用加到自己Portal的Portlet注冊表中。Portlet注冊登記后,租戶就可以選擇這些Portlet并把它們加到自己的頁面中去,最終在聯(lián)邦門戶中展現(xiàn)。
多租戶的實(shí)現(xiàn)方式有多個應(yīng)用實(shí)例和單個應(yīng)用實(shí)例兩種模式。單應(yīng)用實(shí)例的多租戶模式則可以支持大數(shù)量級的租戶,且資源占用率小,更符合多租戶portlet的實(shí)際。當(dāng)多個租戶使用同一個Portlet應(yīng)用時(shí),通過租戶數(shù)據(jù)的隔離和復(fù)用Portlet代碼,多租戶共享此Portlet的唯一實(shí)例。在portlet實(shí)例運(yùn)行時(shí),根據(jù)當(dāng)前調(diào)用它的租戶,從租戶信息數(shù)據(jù)庫中選取調(diào)用租戶所屬數(shù)據(jù)并結(jié)合后臺的源數(shù)據(jù)進(jìn)行處理,返回租戶相關(guān)的Portlet片段,結(jié)果用戶看到的是所屬租戶的視圖,而不是其他租戶的視圖。
Portlet數(shù)據(jù)架構(gòu)包含兩部分,即租戶信息數(shù)據(jù)庫和租戶數(shù)據(jù)源數(shù)據(jù)庫。租戶信息數(shù)據(jù)庫里記錄租戶信息、個性化屬性和租戶信息到租戶數(shù)據(jù)的映射。租戶數(shù)據(jù)源數(shù)據(jù)庫則提供了portlet應(yīng)用所訪問的后臺租戶數(shù)據(jù)。面向多租戶portlet的數(shù)據(jù)架構(gòu)著力解決租戶身份認(rèn)證與授權(quán)、租戶數(shù)據(jù)共享與隔離兩大問題。
4.1 身份認(rèn)證和權(quán)限管理
根據(jù)portal平臺和portlet應(yīng)用的特性,采用覆蓋從租戶到用戶的完整身份認(rèn)證權(quán)限管理模式。租戶的身份認(rèn)證通過租戶注冊完成,權(quán)限設(shè)置由portlet管理者管理、調(diào)整,用戶的的身份認(rèn)證和權(quán)限設(shè)置由其歸屬的租戶管理,portlet管理者負(fù)責(zé)審查租戶數(shù)據(jù)的完整性和正確性。。同一個portlet應(yīng)用對應(yīng)多個租戶,各個租戶相互獨(dú)立,同一個租戶對應(yīng)多個用戶,各個用戶相對獨(dú)立。身份認(rèn)證要適應(yīng)聯(lián)邦門戶下的分布式環(huán)境,滿足一平臺多應(yīng)用,一應(yīng)用多租戶,一租戶多用戶的。租戶管理包括租戶的注冊、ID關(guān)聯(lián)、權(quán)限控制、注銷、租戶上下文管理等。以下給出了portlet租戶的部分注冊代碼:
……
……
巖土類型:巖土體是產(chǎn)生崩塌的物質(zhì)條件,不同性質(zhì)、類型的巖土體發(fā)生崩塌的機(jī)率、規(guī)模均會有所不同[6-7]。川藏高速公路汶馬段主要發(fā)育千枚巖、板巖、石英砂巖、砂泥巖和大型巖堆等地層,造成區(qū)內(nèi)多發(fā)育軟巖、較軟巖的傾倒式和順片理面的滑移式崩塌,軟硬巖體差異風(fēng)化主要發(fā)育墜落式崩塌,廣泛分布的高位巖堆易形成滾落式崩塌。
4.2 數(shù)據(jù)共享與隔離
以策略確保多租戶間的數(shù)據(jù)隔離,不僅可以讓不同的租戶共享相同的Portlet實(shí)例,還可以為租戶提供獨(dú)立的數(shù)據(jù)空間和視圖[5]。在 Multi-Tenant Data Architecture 中,系統(tǒng)總結(jié)了數(shù)據(jù)層的三種多租戶架構(gòu):獨(dú)立數(shù)據(jù)庫;共享數(shù)據(jù)庫、獨(dú)立Schema;共享數(shù)據(jù)庫、共享 Schema[6~7]。
portlet多租戶認(rèn)證數(shù)據(jù)庫采用共享數(shù)據(jù)庫,獨(dú)立schema的數(shù)據(jù)架構(gòu)。認(rèn)證數(shù)據(jù)庫中的Schema,為數(shù)據(jù)庫對象的集合,一個租戶對應(yīng)一個schema,并以不同的命名空間區(qū)分。每個租戶關(guān)聯(lián)到相同數(shù)據(jù)庫的不同 Schema,租戶間數(shù)據(jù)彼此邏輯不可見。同一租戶內(nèi)的用戶共享Schema,但每個用戶使用獨(dú)立數(shù)據(jù)表。租戶注冊時(shí),認(rèn)證數(shù)據(jù)庫創(chuàng)建與租戶同名的Schema,Schema內(nèi)同時(shí)生成與租戶同名的table表,用于存放租戶注冊信息。租戶數(shù)據(jù)由租戶向portlet管理者提交,portlet管理者負(fù)責(zé)審查租戶數(shù)據(jù)的完整性和正確性。認(rèn)證過程中對數(shù)據(jù)庫的訪問不需要為區(qū)分租戶做特殊處理。租戶數(shù)據(jù)源數(shù)據(jù)庫可由租戶提供連接方式,缺省條件下使用portlet應(yīng)用默認(rèn)的后臺數(shù)據(jù)庫。
將MVC的設(shè)計(jì)模式引入portlet開發(fā)的目的,不能只局限在簡化portlet開發(fā)過程、提高portlet擴(kuò)展性與復(fù)用性的層面上。采用MVC模式旨在降低層與層之間的依賴和耦合,分割底層數(shù)據(jù)庫設(shè)計(jì)和上層業(yè)務(wù)邏輯,將portlet組件改造成能通過個性化配置滿足不同租戶需求的多租戶portlet。個性化配置不涉及portlet源代碼的修改,個性化配置點(diǎn)在MVC設(shè)計(jì)中體現(xiàn)。
目前支持portlet開發(fā)的MVC框架主要有Spring Portlet MVC、JSF Portlet MVC、Struts portlet MVC等。本文首次引入JessMA框架進(jìn)行多租戶portlet開發(fā),JessMA是功能完備的高性能 Full-Stack Web 應(yīng)用開發(fā)框架,內(nèi)置可擴(kuò)展的 MVC Web 基礎(chǔ)架構(gòu)和 DAO 數(shù)據(jù)庫訪問組件,JessMA通過plug-in機(jī)制可以靈活擴(kuò)展,整合常用框架和應(yīng)用組件[8]。本文在JessMA MVC框架的基礎(chǔ)上,利用其基礎(chǔ)應(yīng)用框架、公共組件、擴(kuò)展插件,構(gòu)建支持多租戶的JessMAportlet MVC框架。
本文依據(jù)MVC的分層設(shè)計(jì)模式,充分考慮租戶的個體差異性和portlet應(yīng)用的高復(fù)用性,結(jié)合租戶身份驗(yàn)證、授權(quán),進(jìn)行portlet和portal開發(fā)的整體設(shè)計(jì),增強(qiáng)portlet應(yīng)用的可配置性,屬性可配置,數(shù)據(jù)可配置,控制邏輯可配置。
View層的個性化配置點(diǎn)主要有用戶界面和portlet顯示屬性值兩部分。Vew視圖層重用JessMA web MVC中的視圖技術(shù),JessMAPortlet MVC框架利用Servlet ViewRenderServlet來使用Servlet框架里的視圖顯示功能,Portlet視圖以Servlet底層代碼來顯示。當(dāng)有需要顯示內(nèi)容的時(shí)候, portal容器會向portlet發(fā)render request. render request到達(dá)portlet的時(shí)候,render(RenderRequest request, RenderResponse response)方法被調(diào)用,根據(jù)render的mode不同,調(diào)用doView,doEdit或者doHelp方法。租戶可通過portlet page頁面屬性值設(shè)置,來改變portlet的視圖顯示內(nèi)容。
主題與皮膚是portlet視圖層的外觀配置點(diǎn),其中主題提供portlet內(nèi)容區(qū)域外的門戶外觀和布局,而皮膚指portlet組件的標(biāo)題欄、背景圖像和邊框等租戶個性化設(shè)置。Baseportletskin基類定義portlet顯示屬性,portletskin接口實(shí)現(xiàn)portlet外觀格式。在Portlet中仍能使用JSP、Velocity等顯示方法。portlet-skin.jsp描述render portlet的視圖。portlet布局組件繼承于PortletContainer類,有width,height,CSS, Frame等屬性。這樣,Portlet應(yīng)用產(chǎn)生的標(biāo)記片段和主題皮膚、控制按鈕以及其他裝飾所形成的新片段共同構(gòu)成了portlet窗口,即portlet視圖層。
2) Control控制層
Control控制層的個性化配置點(diǎn)主要包括portlet業(yè)務(wù)流程定制,以及相應(yīng)的event和Action等。Portletactiondispatcher為portlet應(yīng)用的前端控制器,它繼承自Portlet標(biāo)準(zhǔn)中的基類GenericPortlet并進(jìn)行了相應(yīng)擴(kuò)展,增加tenantvalidate()方法進(jìn)行租戶合法性驗(yàn)證,增加gettenantparameters()方法獲取不同租戶的portlet業(yè)務(wù)邏輯部分的屬性值,setportletparameters()方法對portlet應(yīng)用賦值,數(shù)據(jù)來源于租戶認(rèn)證數(shù)據(jù)庫.控制器主要負(fù)責(zé)處理Portlet Request,將租戶參數(shù)屬性值綁定到命令對象,并交由業(yè)務(wù)對象處理。過濾器由Portletfilter類實(shí)現(xiàn)。Portletfilter是能夠轉(zhuǎn)換portlet請求與響應(yīng)動態(tài)呈現(xiàn)內(nèi)容的可復(fù)用代碼段,能截獲并修改request請求和response響應(yīng)。Portletfilter通過實(shí)現(xiàn)Javax.portlet.filter.XYZFilter接口來創(chuàng)建一個Portlet過濾器,包括init(),dofilter(),destory()三個方法。其中init()用于初始化Portlet過濾器,dofilter()用于實(shí)現(xiàn)具體的邏輯處理,destory()用于銷毀過濾器實(shí)例并釋放資源。JSR 286規(guī)范提供了Action filter,Renderfilter,Resourcefilter,Event filter四種類型的portlet過濾器。 Portlet過濾器的聲明包括過濾器的定義聲明以及過濾器的映射聲明。
3) Mode數(shù)據(jù)層
多個租戶基于不同數(shù)據(jù)源,對應(yīng)于相同portlet應(yīng)用實(shí)體。租戶在調(diào)用porlet應(yīng)用時(shí),必須預(yù)先配置正確的數(shù)據(jù)源來對數(shù)據(jù)進(jìn)行操作。portlet應(yīng)用本身有缺省的defaultTargetDataSource,通過調(diào)用Tenant Manager接口數(shù)據(jù)配置targetDataSources設(shè)置滿足租戶個性化要求的數(shù)據(jù)源。
JessMA內(nèi)置的DAO框架封裝了所有的數(shù)據(jù)庫訪問操作,內(nèi)置JDBC、Hibernate和MyBaits數(shù)據(jù)庫訪問組件以及Druid、Proxool、JNDI等連接池,兼容多種數(shù)據(jù)庫連接技術(shù)。DAO框架是可擴(kuò)展的,通過擴(kuò)展org.jessma.dao.AbstractFacade和org.jessma.dao.AbstractSessionMgr實(shí)現(xiàn)自己的數(shù)據(jù)庫訪問組件。根據(jù)不同租戶請求為portlet應(yīng)用的各個租戶建立正確的數(shù)據(jù)連接,利用connectionprovider取得JDBC連接. Hibernate的org.hibernate.cfg.NamingStrategy接口中重寫ClassToTableName()和propertyToColumnName()方法中定義類名到表名,屬性名到字段名的轉(zhuǎn)換,實(shí)現(xiàn)portlet業(yè)務(wù)邏輯對數(shù)據(jù)的調(diào)用。SQL操作則通過hibernate的過濾器,重寫EmptyInterceptor中的public String onPrepareStatement(String sql) 方法來實(shí)現(xiàn)。
public class MultiTenantDatasourserouting( ) {public Connection getConnection(String tenantIdentifier) throws SQLException {
final Connection connection = connectionProvider.getConnection();
connection.createStatement().execute("tenantId " + tenantIdentifier);
Datasoursedatasourse=(Datasourse) this.connection;
If(datasourse==null)datasourse=this.defaultdatabase;
else
returndatasourse;
}
}//獲取特定租戶源數(shù)據(jù)連接
多租戶技術(shù)普及的難點(diǎn)在于軟件的個性化定制。本文通過對多租戶數(shù)據(jù)隔離技術(shù)和portlet應(yīng)用MVC架構(gòu)的擴(kuò)展性研究[9~10],為portlet應(yīng)用更好地適應(yīng)多租戶的個性化需求以及多租戶條件下的portlet應(yīng)用管理方面提供了較好的解決辦法,對云架構(gòu)下的軟件多租戶開發(fā)也有一定參考價(jià)值。未來將研究Portlet的各租戶數(shù)據(jù)源對虛擬化云數(shù)據(jù)中心的支持,并通過云應(yīng)用的多租戶portlet轉(zhuǎn)化,為大數(shù)據(jù)分析、實(shí)時(shí)查詢及大數(shù)據(jù)分析提供良好的門戶展現(xiàn)和租戶體驗(yàn)。
[1] Portlet1.0技術(shù)規(guī)范.http://jcp.org/ en/jsr/detail?id=168(Java Specification Request 168 [EB/OL].http://jcp.org/ en/jsr/detail?id=168.
[2] Portlet2..0技術(shù)規(guī)范[EB/OL].http://jcp.org/en/ jsr/detail?id=286. (JSR 286-Portlet Specification 2.0[EB/OL].http://jcp.org/en/ jsr/detail?id=286.
[3]WSRP技術(shù)規(guī)范2.0[EB/OL] .http://docs.oasis-open.org/wsrp/v2/wsrp-2.0-spec.pdf,2008.(OASISwebservices for remote portletsspecificationversion 2.0[EB/OL] .http://docs.oasis-open.org/wsrp/v2/wsrp-2.0-spec.pdf,2008.
[4] 馬將,聶瑞華.聯(lián)邦門戶中基于WSRP和ALSB的portlet協(xié)作研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(2):426. MA Jiang, NIE Ruihua. Research of portlet collaboration based on WSRP and ALSB in federated portals[J].Computer Engineering and Design,2010,31(2):426.
[5] 黃冠華.基于Portal的多租戶信息門戶平臺研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2013:29-32. HUANG Guanhua. Research and implementation ofmulti-tenant information portalplatform based on portal technology[D]. Chengdu: University of Electronic Science and Technology of China,2013:29-32.
[6] M.Lukicicl, V.Sruk, L.Budin. Portal Technology and Web Services as Platform for ProcessIntegration in Virtual Organizations[C]//Information technology interface, Cavtat,Croatia,2006:413-418.
[7] Grund, M.Schapranow, M.Krueger, J.Schaffner, J.Bog. Shared Table Access Pattern Analysis forMulti-Tenant Applications[C]//Advanced Management of Information for GlobalizedEnterprises,2008:1-5.
[8] JessMAOpenSource[EB/OL].http://www.jessma.org/[9] 韓順.基于虛擬化技術(shù)的多租戶應(yīng)用系統(tǒng)性能隔離算法研究[D].濟(jì)南:山東大學(xué),2010. HAN Shun. Study of the performance isolation algorithms of Multi-tenant applications based on virtualization technology[D]. Jinan: Shandong university,2010.
[10] 高蕾,楊燕.面向多租戶的門戶資源管理框架[J].計(jì)算機(jī)工程與設(shè)計(jì),2012(33):3017-3021. GAO Lei, YANG Yan. Multi-tenant resource management framework for portal[J]. Computer engineering and design,2012(33):3017-3021.
Multi-Tenant Portlet Application Based on MVC Model
MA Jiang
(Network and Education Center,Tangshan College, Tangshan 063000)
Based on the in-depth study of portal and multi-tenant technology, this paper combines multi-tenant technology and the combination of MVC design pattern, puts forward a multi-tenant portlet development model based on MVC model. Multi-tenant applications portlet technology in construction of the information portal, taking into account the portlet can multiplex and tenants differences, supports tenant applications of personalized configuration and different data source connection, reduces the tenants of the portal construction cost, and has strong scalability.
multi-tenant, MVC model, portlet, JSR286
2016年5月7日,
2016年6月24日
唐山市應(yīng)用基礎(chǔ)研究計(jì)劃項(xiàng)目(編號:14130284a)資助。
馬將,男,碩士,工程師,研究方向:分布式系統(tǒng)與數(shù)據(jù)集成。
TP393
10.3969/j.issn.1672-9722.2016.11.028