?

基于MVC模式的多租戶portlet應用研究*

2016-12-13 06:51
計算機與數字工程 2016年11期
關鍵詞:門戶租戶數據源

馬 將

(唐山學院現代教育技術中心 唐山 063000)

?

基于MVC模式的多租戶portlet應用研究*

馬 將

(唐山學院現代教育技術中心 唐山 063000)

在深入研究 Portal和多租戶技術的基礎上,將MVC設計模式與多租戶技術相結合,提出了基于MVC模式的多租戶portlet開發模型。在信息門戶的構建中應用portlet多租戶技術,考慮了portlet可復用性和租戶的差異性,支持租戶應用的個性化配置和不同數據源連接,降低了租戶的Portal構建成本,并具有很強的擴展性。

多租戶; MVC模式; portlet; JSR286規范

Class Number TP393

1 引言

Portal是基于Web的應用綜合體,通常提供個性化應用,是整合不同資源的信息統一平臺[1]。Portal使用Portlet作為可插拔用戶接口組件,每個Portal頁面由若干Portlet構成。Portlet是基于java技術的web組件,Portlet生成的內容被portal聚集并通過個性化配置展現給用戶。portlet容器為portlet提供必需的運行環境,管理Portlet的整個生命周期,并為其提供持久性存儲機制。Portlet開發有完備的標準和規范。

2 Portlet標準與Portlet分類

Portlet標準和規范主要有JSR168、JSR286和WSRP (Web Services for Remote Portlets)1.0與WSRP2.0。 JSR168建立了創建Portlet的標準API. JSR 286兼容JSR 168,并提供了新功能、新特性。符合標準的Portlet應用(war包),可以部署運行在符合該規范的不同portal server上,可以由不同的Portal應用平臺集成[2]。WSRP規范中的Portlet應用運行于遠程portal服務器上,遠程portlet直接集成到外部Portal頁面[3]。

按照portlet的應用對象屬性,可將其分為公共portlet、私有portlet和多租戶portlet。與公共信息相關的Portlet稱為公共portlet;私有portlet為特定用戶開發的實現特定功能并用于特定條件下的portlet,在實現上不具備通用性,應用本身有一定的保密性要求;多租戶portlet,可定制,多個租戶共用一個portlet應用,租戶的數據既有隔離又有共享。

3 多租戶條件下的聯邦門戶資源管理整體框架

多租戶技術(multi-tenancy technology)是尋求在多租戶環境下共用相同的系統或應用程序組件。與portal的多租戶技術相比,portlet的多租戶技術難度更大,應用性更強。

鑒于Portlet應用在各門戶間交叉租用的實際需求,從聯邦門戶的角度考慮portlet多租戶,更具通用性。聯邦門戶是包括遠程分布資源的門戶網絡,各獨立門戶之間通過portlet共享和交互進行信息傳遞,完成信息交互的工作[2]。每個portal 頁面中既可包含本地Portlet也可包含遠程portlet[4]。聯邦門戶內部可通過portlet共享、portlet多租戶實現portlet應用的跨門戶復用。

虛擬門戶(Virtual Portal)是在一個已有門戶架構基礎上快速實施一個附加的門戶。同一門戶平臺上可創建和管理多個虛擬門戶,每個虛擬門戶擁有獨立的邏輯分區,依附于獨立門戶且運行于本地portal server之上。虛擬門戶既可從本地門戶添加本地portlet,也可添加遠程portlet。

圖1 聯邦門戶下portlet多租戶管理框架

Portlet生產者通過UDDI注冊中心發布portlet,portlet租戶用Portal管理工具來搜索UDDI目錄,經過portlet管理者注冊申請后,將portlet應用加到自己Portal的Portlet注冊表中。Portlet注冊登記后,租戶就可以選擇這些Portlet并把它們加到自己的頁面中去,最終在聯邦門戶中展現。

4 多租戶portlet的數據架構

多租戶的實現方式有多個應用實例和單個應用實例兩種模式。單應用實例的多租戶模式則可以支持大數量級的租戶,且資源占用率小,更符合多租戶portlet的實際。當多個租戶使用同一個Portlet應用時,通過租戶數據的隔離和復用Portlet代碼,多租戶共享此Portlet的唯一實例。在portlet實例運行時,根據當前調用它的租戶,從租戶信息數據庫中選取調用租戶所屬數據并結合后臺的源數據進行處理,返回租戶相關的Portlet片段,結果用戶看到的是所屬租戶的視圖,而不是其他租戶的視圖。

Portlet數據架構包含兩部分,即租戶信息數據庫和租戶數據源數據庫。租戶信息數據庫里記錄租戶信息、個性化屬性和租戶信息到租戶數據的映射。租戶數據源數據庫則提供了portlet應用所訪問的后臺租戶數據。面向多租戶portlet的數據架構著力解決租戶身份認證與授權、租戶數據共享與隔離兩大問題。

4.1 身份認證和權限管理

根據portal平臺和portlet應用的特性,采用覆蓋從租戶到用戶的完整身份認證權限管理模式。租戶的身份認證通過租戶注冊完成,權限設置由portlet管理者管理、調整,用戶的的身份認證和權限設置由其歸屬的租戶管理,portlet管理者負責審查租戶數據的完整性和正確性。。同一個portlet應用對應多個租戶,各個租戶相互獨立,同一個租戶對應多個用戶,各個用戶相對獨立。身份認證要適應聯邦門戶下的分布式環境,滿足一平臺多應用,一應用多租戶,一租戶多用戶的。租戶管理包括租戶的注冊、ID關聯、權限控制、注銷、租戶上下文管理等。以下給出了portlet租戶的部分注冊代碼:

命名

訪問權限等級

……

portlet標識符

屬性值

租戶數據源數據庫

密碼

……

巖土類型:巖土體是產生崩塌的物質條件,不同性質、類型的巖土體發生崩塌的機率、規模均會有所不同[6-7]。川藏高速公路汶馬段主要發育千枚巖、板巖、石英砂巖、砂泥巖和大型巖堆等地層,造成區內多發育軟巖、較軟巖的傾倒式和順片理面的滑移式崩塌,軟硬巖體差異風化主要發育墜落式崩塌,廣泛分布的高位巖堆易形成滾落式崩塌。

4.2 數據共享與隔離

以策略確保多租戶間的數據隔離,不僅可以讓不同的租戶共享相同的Portlet實例,還可以為租戶提供獨立的數據空間和視圖[5]。在 Multi-Tenant Data Architecture 中,系統總結了數據層的三種多租戶架構:獨立數據庫;共享數據庫、獨立Schema;共享數據庫、共享 Schema[6~7]。

portlet多租戶認證數據庫采用共享數據庫,獨立schema的數據架構。認證數據庫中的Schema,為數據庫對象的集合,一個租戶對應一個schema,并以不同的命名空間區分。每個租戶關聯到相同數據庫的不同 Schema,租戶間數據彼此邏輯不可見。同一租戶內的用戶共享Schema,但每個用戶使用獨立數據表。租戶注冊時,認證數據庫創建與租戶同名的Schema,Schema內同時生成與租戶同名的table表,用于存放租戶注冊信息。租戶數據由租戶向portlet管理者提交,portlet管理者負責審查租戶數據的完整性和正確性。認證過程中對數據庫的訪問不需要為區分租戶做特殊處理。租戶數據源數據庫可由租戶提供連接方式,缺省條件下使用portlet應用默認的后臺數據庫。

5 基于MVC的多租戶portlet設計與實現

將MVC的設計模式引入portlet開發的目的,不能只局限在簡化portlet開發過程、提高portlet擴展性與復用性的層面上。采用MVC模式旨在降低層與層之間的依賴和耦合,分割底層數據庫設計和上層業務邏輯,將portlet組件改造成能通過個性化配置滿足不同租戶需求的多租戶portlet。個性化配置不涉及portlet源代碼的修改,個性化配置點在MVC設計中體現。

目前支持portlet開發的MVC框架主要有Spring Portlet MVC、JSF Portlet MVC、Struts portlet MVC等。本文首次引入JessMA框架進行多租戶portlet開發,JessMA是功能完備的高性能 Full-Stack Web 應用開發框架,內置可擴展的 MVC Web 基礎架構和 DAO 數據庫訪問組件,JessMA通過plug-in機制可以靈活擴展,整合常用框架和應用組件[8]。本文在JessMA MVC框架的基礎上,利用其基礎應用框架、公共組件、擴展插件,構建支持多租戶的JessMAportlet MVC框架。

本文依據MVC的分層設計模式,充分考慮租戶的個體差異性和portlet應用的高復用性,結合租戶身份驗證、授權,進行portlet和portal開發的整體設計,增強portlet應用的可配置性,屬性可配置,數據可配置,控制邏輯可配置。

View層的個性化配置點主要有用戶界面和portlet顯示屬性值兩部分。Vew視圖層重用JessMA web MVC中的視圖技術,JessMAPortlet MVC框架利用Servlet ViewRenderServlet來使用Servlet框架里的視圖顯示功能,Portlet視圖以Servlet底層代碼來顯示。當有需要顯示內容的時候, portal容器會向portlet發render request. render request到達portlet的時候,render(RenderRequest request, RenderResponse response)方法被調用,根據render的mode不同,調用doView,doEdit或者doHelp方法。租戶可通過portlet page頁面屬性值設置,來改變portlet的視圖顯示內容。

主題與皮膚是portlet視圖層的外觀配置點,其中主題提供portlet內容區域外的門戶外觀和布局,而皮膚指portlet組件的標題欄、背景圖像和邊框等租戶個性化設置。Baseportletskin基類定義portlet顯示屬性,portletskin接口實現portlet外觀格式。在Portlet中仍能使用JSP、Velocity等顯示方法。portlet-skin.jsp描述render portlet的視圖。portlet布局組件繼承于PortletContainer類,有width,height,CSS, Frame等屬性。這樣,Portlet應用產生的標記片段和主題皮膚、控制按鈕以及其他裝飾所形成的新片段共同構成了portlet窗口,即portlet視圖層。

2) Control控制層

Control控制層的個性化配置點主要包括portlet業務流程定制,以及相應的event和Action等。Portletactiondispatcher為portlet應用的前端控制器,它繼承自Portlet標準中的基類GenericPortlet并進行了相應擴展,增加tenantvalidate()方法進行租戶合法性驗證,增加gettenantparameters()方法獲取不同租戶的portlet業務邏輯部分的屬性值,setportletparameters()方法對portlet應用賦值,數據來源于租戶認證數據庫.控制器主要負責處理Portlet Request,將租戶參數屬性值綁定到命令對象,并交由業務對象處理。過濾器由Portletfilter類實現。Portletfilter是能夠轉換portlet請求與響應動態呈現內容的可復用代碼段,能截獲并修改request請求和response響應。Portletfilter通過實現Javax.portlet.filter.XYZFilter接口來創建一個Portlet過濾器,包括init(),dofilter(),destory()三個方法。其中init()用于初始化Portlet過濾器,dofilter()用于實現具體的邏輯處理,destory()用于銷毀過濾器實例并釋放資源。JSR 286規范提供了Action filter,Renderfilter,Resourcefilter,Event filter四種類型的portlet過濾器。 Portlet過濾器的聲明包括過濾器的定義聲明以及過濾器的映射聲明。

3) Mode數據層

多個租戶基于不同數據源,對應于相同portlet應用實體。租戶在調用porlet應用時,必須預先配置正確的數據源來對數據進行操作。portlet應用本身有缺省的defaultTargetDataSource,通過調用Tenant Manager接口數據配置targetDataSources設置滿足租戶個性化要求的數據源。

JessMA內置的DAO框架封裝了所有的數據庫訪問操作,內置JDBC、Hibernate和MyBaits數據庫訪問組件以及Druid、Proxool、JNDI等連接池,兼容多種數據庫連接技術。DAO框架是可擴展的,通過擴展org.jessma.dao.AbstractFacade和org.jessma.dao.AbstractSessionMgr實現自己的數據庫訪問組件。根據不同租戶請求為portlet應用的各個租戶建立正確的數據連接,利用connectionprovider取得JDBC連接. Hibernate的org.hibernate.cfg.NamingStrategy接口中重寫ClassToTableName()和propertyToColumnName()方法中定義類名到表名,屬性名到字段名的轉換,實現portlet業務邏輯對數據的調用。SQL操作則通過hibernate的過濾器,重寫EmptyInterceptor中的public String onPrepareStatement(String sql) 方法來實現。

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;

}

}//獲取特定租戶源數據連接

6 結語

多租戶技術普及的難點在于軟件的個性化定制。本文通過對多租戶數據隔離技術和portlet應用MVC架構的擴展性研究[9~10],為portlet應用更好地適應多租戶的個性化需求以及多租戶條件下的portlet應用管理方面提供了較好的解決辦法,對云架構下的軟件多租戶開發也有一定參考價值。未來將研究Portlet的各租戶數據源對虛擬化云數據中心的支持,并通過云應用的多租戶portlet轉化,為大數據分析、實時查詢及大數據分析提供良好的門戶展現和租戶體驗。

[1] Portlet1.0技術規范.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技術規范[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技術規范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] 馬將,聶瑞華.聯邦門戶中基于WSRP和ALSB的portlet協作研究[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的多租戶信息門戶平臺研究與實現[D].成都:電子科技大學,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] 韓順.基于虛擬化技術的多租戶應用系統性能隔離算法研究[D].濟南:山東大學,2010. HAN Shun. Study of the performance isolation algorithms of Multi-tenant applications based on virtualization technology[D]. Jinan: Shandong university,2010.

[10] 高蕾,楊燕.面向多租戶的門戶資源管理框架[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日

唐山市應用基礎研究計劃項目(編號:14130284a)資助。

馬將,男,碩士,工程師,研究方向:分布式系統與數據集成。

TP393

10.3969/j.issn.1672-9722.2016.11.028

猜你喜歡
門戶租戶數據源
關隘:要道門戶
西域門戶——兩關遺址
多租戶網站實現方法的研究和設計
多租戶數據隔離及加密研究
基于多租戶隔離的云安全建設
利用屬性集相關性與源誤差的多真值發現方法研究
基于內外網門戶系統的研究
Web 大數據系統數據源選擇*
一種新型高效的多租戶共享數據模型
數據有增加 圖表自適應
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合