马 将
(唐山学院现代教育技术中心 唐山 063000)
基于MVC模式的多租户portlet应用研究*
马 将
(唐山学院现代教育技术中心 唐山 063000)
在深入研究 Portal和多租户技术的基础上,将MVC设计模式与多租户技术相结合,提出了基于MVC模式的多租户portlet开发模型。在信息门户的构建中应用portlet多租户技术,考虑了portlet可复用性和租户的差异性,支持租户应用的个性化配置和不同数据源连接,降低了租户的Portal构建成本,并具有很强的扩展性。
多租户; MVC模式; portlet; JSR286规范
Class Number TP393
Portal是基于Web的应用综合体,通常提供个性化应用,是整合不同资源的信息统一平台[1]。Portal使用Portlet作为可插拔用户接口组件,每个Portal页面由若干Portlet构成。Portlet是基于java技术的web组件,Portlet生成的内容被portal聚集并通过个性化配置展现给用户。portlet容器为portlet提供必需的运行环境,管理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应用,租户的数据既有隔离又有共享。
多租户技术(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并把它们加到自己的页面中去,最终在联邦门户中展现。
多租户的实现方式有多个应用实例和单个应用实例两种模式。单应用实例的多租户模式则可以支持大数量级的租户,且资源占用率小,更符合多租户portlet的实际。当多个租户使用同一个Portlet应用时,通过租户数据的隔离和复用Portlet代码,多租户共享此Portlet的唯一实例。在portlet实例运行时,根据当前调用它的租户,从租户信息数据库中选取调用租户所属数据并结合后台的源数据进行处理,返回租户相关的Portlet片段,结果用户看到的是所属租户的视图,而不是其他租户的视图。
Portlet数据架构包含两部分,即租户信息数据库和租户数据源数据库。租户信息数据库里记录租户信息、个性化属性和租户信息到租户数据的映射。租户数据源数据库则提供了portlet应用所访问的后台租户数据。面向多租户portlet的数据架构着力解决租户身份认证与授权、租户数据共享与隔离两大问题。
4.1 身份认证和权限管理
根据portal平台和portlet应用的特性,采用覆盖从租户到用户的完整身份认证权限管理模式。租户的身份认证通过租户注册完成,权限设置由portlet管理者管理、调整,用户的的身份认证和权限设置由其归属的租户管理,portlet管理者负责审查租户数据的完整性和正确性。。同一个portlet应用对应多个租户,各个租户相互独立,同一个租户对应多个用户,各个用户相对独立。身份认证要适应联邦门户下的分布式环境,满足一平台多应用,一应用多租户,一租户多用户的。租户管理包括租户的注册、ID关联、权限控制、注销、租户上下文管理等。以下给出了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应用默认的后台数据库。
将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;
}
}//获取特定租户源数据连接
多租户技术普及的难点在于软件的个性化定制。本文通过对多租户数据隔离技术和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