基于Portal的多业务状态展示面板的设计与实现
2010-08-07揭金良
涂 飞,揭金良
(成都理工大学信息工程学院,成都610059)
随着网络技术的不断发展以及对网站访问频率的快速提高,用户一直在追求一种快速响应、内容整合且又能极大地满足用户的个性设置的页面,尤其在企业级应用中,这种需求更为突出。而传统的展示方式显然已经不能满足这个需求。在众多的技术专家和科技人员的共同努力下,Portal的提出极大地满足了这个需求。
在Portal Server的支持下, Portal是一种Web应用,通常用来提供个性化、单点登录和聚集各个信息源的内容,并作为信息系统表现层的宿主。聚集是指将来自各个信息源的内容集成到一个Web页面里的活动[1]。并且随着Portal技术的不断发展,开发人员也能够将其与Struts和JSF等其他作用于表示层的技术整合到一起。
1 Portal与Portlet的关系
Portlet 是采用 Java 技术的 Web 组件,由 Portlet Container 管理,专门处理客户的请求,产生各种动态信息。Portlet 为可插式 ( pluggable ) 的客户界面组件,这些由 Portlet 产生的内容也被称为片段 (fragment),而片段是具有一些规则的Markup(HTML、XHTML、WML),而且可以和其他的片段组合成一个复杂的文件[2]。Portlet 中的内容与其他 Portlet 的内容聚合,成为一个 Portal 网页,Portlet 的生命周期由 Portlet Container 管理控制。客户端和 Portlet 的互动由 Portal 通过典型的请求/响应方式实现。
如图1,Portal页面由1个或多个Portlet窗口组成,每个Portlet窗口又分为两部分:(1)外观,它决定了Portlet窗口的标题条、控制和边界的样式。(2)Portlet段,它由Portlet应用填充。Portal服务器决定了Portal页面的整体观感,像标识、标题条颜色和控制图标等。通过修改几个JSP和CSS模板文件就可以改变Portal的整个观感。同时,Portlet本身也可被设定成多种模式,包括查看(View)、编辑(Edit)和帮助(Help),通过对这些模式的设定和选取,使得用户能有更好的体验。同时Portlet还允许每个窗口在被最大化、最小化和正常情况下,显示不同的内容,这就极大地丰富了每个Portlet的现实方式。
图1 Portal页面效果示意图
Portal Server可以生成多种标记语言格式的页面,并支持移动设备,这些标记语言有:适用于台式计算机和个人数字助理的HTML、适用于WAP 设备的 WML,以及适用于 NTT DoCoMo iMode 网络中的移动设备的 cHTML。有了这3种标记语言,您可以利用转码(Transcoding)技术使Portal在3种标记语言间随意转换。这意味着,即便Portal开发者并未明确支持移动设备,Portal也可以轻易地、自动地支持各种移动设备。门户网站页面聚集的子系统支持若干种设备标记语言,能够以“取出即可用”的方式识别某些浏览器和移动设备的用户代理签名。用以支持设备标记语言的框架是开放的和可扩展的,所以要支持其它标记语言或新设备也很容易[2]。这就赋予了Portal强大的生命力和可扩展性,如图2。
图2 Portal架构图
Portal的目的是在有效的网络环境下,把各种应用系统资源、数据资源、信息资源统一集成到一个平台之下,根据每个用户使用特点和角色的不同,形成个性化的应用界面,并通过对事件和消息的处理,把用户有机地联系在一起。
2 Portlet的MVC框架结构
Portlet会生成标记片段,这些片段配上主题、控制按钮以及其他装饰所形成的新的片段就叫做Portlet窗口。而一个Portal页面就是由Portal整合了这些Portlet,形成一个完整的文件。由于每一个窗口都有一个唯一的Portlet生成并处理相关的请求,因此在设计实现Portlet时,我们需要知道Portlet是如何处理用户的请求以及最终的响应的[4]。
Portlet同Servlet相比,有许多相同的地方,如都是基于Web组件的Java技术,都有专门的容器管理,能够动态地生成内容,都是采用请求/响应模式实现服务器端和客户端的交互,因此Portlet能够实现MVC模式,如图3。
图3 Portlet的MVC框架示意图
从图3中,我们能够看到当用户的请求抵达Portal时,Portal首先将Servlet请求转化成Portlet请求,然后通过调用Portlet的API,将请求交与Portlet处理,待请求处理完毕之后, Portal再将Portlet转化为Servlet返回给用户。而Portlet在处理和响应请求时也是使用MVC模式对各组件进行分工,各组件功能如下:
(1)模型:在Portlet框架中,对模型并没有太多的规定,可以是具体的内容、本地应用或者Web Service等。与其他的MVC框架一样,在Portlet中,模型最主要的功能就是提供并处理数据,实现业务逻辑。
(2)视图:Portlet中也是将JSP作为主要视图工具,用于接受模型发出的数据,更新显示用户界面。由于Portlet的特殊作用,因此除了基本的JSTL标签外,Portlet还为用户设计提供了专门针对Portlet的标签库。
(3)控制器:GenericPortlet是Portlet中的核心组件,在MVC的模式中充当控制器角色。在Portlet中,GenericPortlet会接受来自视图层的请求,通过对请求的识别和判断进行相应的页面处理和转发。前文已经提到,为每一个Portlet设定了3种模式:查看(View),编辑(Edit)和帮助(Help),在GenericPortlet中,也有相对应的3个接口:doView(),doEdit()和doHelp()。在编程时,通过对相关方法的重写就能实现所希望的功能。同时GenericPortlet还能根据每个Portlet的窗口大小变化而展示不同的内容[3~4]。
(4)配置文件:Portlet的配置文件分为两部分:a. JSR-168所要求的Portlet部署描述符Portlet.xml,用于指定Portlet的相关信息,包括所指定的该Portlet的类,所设定的模式(查看、编辑或者帮助),所显示的名称等消息[1]。b. 服务于所使用的Portal Server,主要是向Server指定相关Portlet实例引用关系,对Portlet的主题进行设定,在Portal上显示的位置等布局设置[4]。
3 基于Portal的多业务状态信息展示面板的实现实例
3.1 业务需求描述
该系统是某著名电气公司为监控其部署在各地的产品线上的众多产品应用状态而设计实现的。这些产品从属于不同的业务模块,因此在实现时应根据业务模块来分别显示。而所需要监控的状态包括产品的总体可靠性、产出性能、以及每个产品应用内部的各个事务的执行情况。用户在使用该系统时,既能够总体地了解当前各个业务的应用运行情况,如某业务的所有应用中,有多少个应用是处于休眠状态,有多少个是激活状态,有多少个是处于建造状态等, 同时也能够针对业务进行更加详细的了解,查看部署在各地的应用状态的详细视图。因此,所需要实现的系统能够提供3种查看视图:各业务的全局状态图,业务内部各个应用状态的详细信息展示图以及每个应用的事物信息展示图。
3.2 系统实现
3.2.1 Portal Server的选取
要实现基于Portlet 框架的开发和应用的部署,需要有相关容器来支持。在当前流行的Server中,应用范围广泛的有Liferay Portal、JBoss Portal以及Websphere Portal等。由于各个Portal Server都必须基于JSR-168 Portlet Specification,因此在编码上相互间的区别不大,只是使用时可能采取的配置方式不尽相同。考虑到版权以及后期服务支持的原因,本系统所使用的服务器版本是JBoss-Portal-2.6.6。
3.2.2 模型层的实现
模型层是应用程序的主体,它用于表示业务数据和业务逻辑,负责完成访问和操纵数据库。根据控制层的要求,查找相关的数据,完成某种业务需求,然后通过模型接口,把数据上传到视图中。在本系统中,针对每一个业务,都定义了3种值对象:BusinessGlobalInfo,用来记录该业务的全局状态信息;Application-DetailInfo,用来记录每个业务内各个应用状态的信息;Transaction-DetailInfo,用来记录每个应用的事务状态。针对每一种值对象,都有一个相应的DAO对象,用来从数据源获取数据。
3.2.3 控制器的实现
控制器主要负责接收客户端请求,据此作出相应的处理,生成相应的页面并呈现在客户端Web 浏览器上,其位于视图组件和模型组件之间,将二者有机地联系在一起,发挥着强大的协调作用,也使Web 应用的业务逻辑和表现逻辑分离,提高了Web 系统的可维护性、可扩展性、可移植性和组件的可复用性。在本例中,针对每一个业务都设计了若干个Portlet类,它们都扩展了Generic-Portlet,并根据用户请求的不同,做出相应的跳转和显示。例如我们定义了一个BusinessGlobalPortlet,用来处理有关显示全局业务状态的Portlet窗口的所有时间。若用户需要对某一个业务进行更详细的了解,只需最大化该Portlet窗口,此时BusinessGlobalPortlet将会调用processAction()方法,通过从参数ActionRequest对象中获取的窗口变化状态来确定当前显示的表示层的页面效果。
事实上,执行所有的与Portlet相关的动作时,Portlet容器都会先调用该方法,并在该方法向PortletRequest注入从表示层传递来的参数或者动作信号。然后再通过从Portlet.xml配置文件中读取出来的对BusinessGlobalPortlet所设定的模式来确定接下来的是执行doView()、doHelp()或者doEdit(),而在本例中,所采用的模式是View,在doView()方法中我们再进行具体的业务逻辑运算,并且通过PortletRequestDispatcher来完成页面的跳转[3~4]。
3.2.4 表示层的实现
由于Portal本身是基于Java的一种技术,因此Portlet也将JSP作为主要的视图表示方式,因此该系统的表示层就是一堆JSP文件,而这些JSP文件都使用到了Portlet所提供的标签库,并将被Portlet Server调用。
3.2.5 配置文件
前文已经说到,在Portlet中,配置文件分为两个部分:(1)对Portlet本身进行定义。(2)为Portal Server提供索引,从而让Server能够找到所需要运行、维护的Portlet对象,以及对Portlet窗口布局、显示效果的设定。在本例中,我们选取Jboss-portal作为服务器,因此需根据Jboss-portal的配置文件的定义方式,为Portal Server指定相应的Portlet。具体如下:在portlet.xml中指定Portlet的相关属性,包括Portlet名字、对象和模式等,然后再在一个**-Object.xml(在Jbossportal中,是由一个以-Object.xml结尾的文件来设置与Server相关的配置信息)文件中为Server设定Portlet实例、部署、窗口显示信息以及其他的一些信息[4]。
4 结束语
基于Portal框架开发的Web应用系统,能够极大地聚集并展示各个应用系统的信息,通过统一的Portal入口,用户省去了登陆各个系统的重复性操作,从而提高了用户的工作效率,方便了管理人员作出决策并简化了工作环节、降低了可能的系统安全隐患,因此能快速适应新业务的需求[2]。正因为这些,现在Portal技术已经被越来越多地采用,为用户提供了丰富的展示内容和新颖的展示方式,并能允许用户高度化地定制,而且也能够与其它框架一起结合使用,从而使得编码和维护的成本进一步降低。
依据某公司多业务状态信息展示需求,本例利用MVC 设计模式开发基于Portal 框架的显示面板,加快了用户查看各个业务状态的速度并以此作出相应的决策,提高了工作效率,且提供了一种更加友好的展示方式。
[1] Java Community Process. JSR 168: Portlet Specification [EB/OL] .[2009-10-4] . http://www.jcp.org/en/jsr/detail?id=168.
[2] 高加旺. Portal技术简介[EB/OL] . [2009-10-7] . http://www.doc88.com/p-566038020.html.
[3] Oracle.JSR-168 javax.portlet API[EB/OL] .[2009-10-4] . http://www.oracle.com/techno. logy/products/webcenter/files/pdk_downloads/wsrp/api/index.html.
[4] JBoss Portal. JBoss Portal 2.6.6 Reference Guide[EB/OL] .[2009-10-10] .http://docs. jbos.s.org/jbportal/v2.6.6/reference.