支持JSR286规范的Portlet协作框架的设计与实现.doc_第1页
支持JSR286规范的Portlet协作框架的设计与实现.doc_第2页
支持JSR286规范的Portlet协作框架的设计与实现.doc_第3页
支持JSR286规范的Portlet协作框架的设计与实现.doc_第4页
支持JSR286规范的Portlet协作框架的设计与实现.doc_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

分类号 密级 UDC 编号 研研究究生生院院 硕硕士士学学位位论论文文 支持 JSR286 规范 的 Portlet 协作框架 的设计与实现 何丽 指导教师指导教师 许舒人 副研究员 软件研究所 申请学位级别申请学位级别 硕士 学科专业名称学科专业名称 计算机软件与理论 论文提交日期论文提交日期 2009-04-29 论文答辩日期论文答辩日期 2009-06-07 培养单位培养单位 软件研究所 学位授予单位学位授予单位 研究生院 答辩委员会主席答辩委员会主席 金芝 研究员 支持 JSR286 规范 的 Portlet 协作框架 的设计与实现 摘摘 要要 Portlet 是具有用户界面的可与用户多次交互的 Web 组件。随着 Portal 和 Portlet 在企业中的广泛应用,仅仅将各种应用和数据通过 Portlet 集成到 Portal 中已经不能满足用户的需求。用户希望这些应用之间能够相互协作,以利用现 有应用组建新的业务流程。Portlet 协作是指两个或多个 Portlet 进行信息交换并 使用这些信息的能力。目前协作功能的实现方式可以分为两种:基于后端(back- end)的实现方式与基于前端(front-end)的实现方式。在这两种协作实现方式的基 础上,本文提出了两种 Portlet 协作框架。 本文提出一种基于事件的 Portlet 前端协作模型,通过引入此模型,解决了 Portlet 前端协作中客户端与服务器端无法交互的困难,使协作动作由客户端和 服务器端共同完成。基于此模型提供给开发者一种可扩展的协作框架,利用 JavaScript 技术使得协作的 Portlet 在客户端“相知” ,协作的行为在客户端触发, Portlet 获得协作数据后使用 Ajax 技术请求服务器端的资源,服务器端使用 JSR286 规范定义的资源服务接口响应用户的请求,进而动态更新界面。 当前的 Portlet 后端协作方式依赖于特定的 Portal 产品,针对这点不足,本 文在 JSR286 规范定义的事件及共享渲染参数协作机制基础上,实现了一个 Portlet 后端协作框架。在该框架中协作服务使用消息队列保存待处理的消息, Portlet 容器作为中介实现发布事件的 Portlet 和订阅事件的 Portlet 之间松散耦合。 Portlet 监听协作事件,事件触发后调用事件协作服务发布事件,为了提高协作 的并发性,事件协作服务使用多线程处理协作事件。该协作框架与 JSR286 规范 兼容,具有良好的可移植性。 本文对这两种 Portlet 协作框架进行了实现,并将其应用于中科院软件所自 主开发的门户产品 OncePortal 中。本文重构了 OncePortal 系统,给出了框架的 体系结构与系统接口,描述了框架的各功能模块,并详细讨论了 Portlet 协作框 架中的关键技术,包括事件协作流程的描述、事件处理过程、多级事件流等。 关键词关键词 Portal,Portlet,事件,异步通信,协作框架 Design and implementation of portlet coordination framework supporting JSR286 specification Pan Cong (Computer Software and Theory) Directed by: Xu Shuren Abstract Portlet is a user facing web components with many interactive. With widespread using of Portal in enterprises, simply aggregating applications into Portal cannot meet demand. To build new business processes from the existing applications, Portlet interoperability is required. Portlet coordination refers to that two or more Portlet can have the ability to exchange and use information. Current way to achieve coordination features can be divided into two types: Based on the back-end and based on the front- end. On the basis of these two coordination ways, this paper proposed corresponding portlet coordination framework. A front-end Portlet coordination model based on event is proposed. Through introducing this model, the difficulty to interact between the client-side and server- side is solved; the collaborative action is done at both the client-side and server-side. The model makes use of JavaScript to make the portlet of coordination know each other in client side where the coordination action is triggered. Once portlet collaboration data is acquired ,The targeted portlet using Ajax request to access server-side resources through resources serving interface which is defined in JSR286 specification, and then to update the corresponding elements in the client interface. Considering the current back-end coordination framework depends on the specific Portal products, we propose the corresponding back-end coordination framework base on the event-based and public render parameters portlet coordination Mechanism defined in JSR286 specification. Coordination service maintains the published event in message queue, portlet container realize loosely coupled between publish portlet and subscription portlet as mediator. Portlet monitor the event then call coordination service to publish event, in order to enhance Performance, the coordination service use multi-threading technology to handle event. The framework is in accordance with the Portlet Specification 2.0, which ensures its good portability. We realize the frameworks and applied them to OncePortal which is a Portal product developed by Institute of Software, Chinese Academy of Sciences. In this paper, portlet container structure is refractor and Function components and the system interfaces of the framework are described in detail. The key techniques used in the framework including description of coordination Portlet, description of the coordination process base on event model, event handling process, multi-level event flow are discussed. Keywords portal, portlet, event, Ajax, coordination framework 目目录录 第一章第一章 绪论绪论1 1.1 研究背景.1 1.2 论文的主要工作.1 1.3 论文内容的组织.2 第二章第二章 Portal 与与 Portlet 协作协作 5 2.1 Portal 简介5 2.1.1 Portal 的概念5 2.1.2 Portal 的功能和特点5 2.1.3 Portal 的应用和系统结构6 2.2 Portlet 简介.8 2.2.1 Portlet 的概念8 2.2.2 Portlet 规范8 2.3 协作方式.10 2.3.1 事件通信方式.10 2.3.2 共享渲染参数方式.15 2.4 Portal 与 Ajax.16 2.5 小结.16 第三章第三章 Portlet 协作框架分析与设计协作框架分析与设计.17 3.1 协作需求分析.17 3.2 协作方式分析.18 3.3 协作框架设计.19 3.3.1 前端协作框架.19 3.3.2 后端协作框架.20 3.4 OncePortal 系统重构.21 3.4.1 OncePortal 介绍21 3.4.2 OncePortal 重构22 3.4.3 事件协作流程.26 3.5 小结.26 第四章第四章 Portlet 前端协作框架前端协作框架.27 4.1 前端协作框架客户端.27 4.1.1 Coordination Service.27 4.1.2 Ajax Lib.28 4.1.3 Dom Lib.29 4.2 前端协作框架服务器端.29 4.2.1 基于 JSR168 方案.29 4.2.2 基于 JSR286 方案.30 4.3 Portlet 间协作类型.31 4.4 前端协作框架实现.31 4.4.1 Coordination Service.31 4.4.2 Ajax Lib.32 4.4.3 Dom Lib.33 4.4.4 Portlet 间协作方式34 4.5 小结.36 第五章第五章 Portlet 后端协作框架后端协作框架.37 5.1 后端协作框架设计.37 5.2 后端协作框架关键技术分析.38 5.2.1 事件循环处理.38 5.2.2 事件名称匹配.38 5.2.3 事件域范围.39 5.3 后端协作框架实现.40 5.3.1 协作框架结构.40 5.3.2 协作框架模块.41 5.3.3 协作服务.44 5.3.4 协作流程.45 5.4 后端协作框架在 OncePortal 的应用.47 5.4.1 协作 Portlet 部署.47 5.4.2 协作 Portlet 演示.48 5.5 小结.51 第六章第六章 结束语结束语53 6.1 工作总结.53 6.2 进一步的工作.53 参考文献参考文献55 发表文章目录发表文章目录57 致谢致谢59 第一章第一章 绪论绪论 1.1 研究背景研究背景 在计算机领域,Portal 有几种不同含义。从应用系统的角度看,一种含义 指网络门户(Internet Portal),如新浪,雅虎等门户网站,它们向网络用户提供了 通向 Internet 的大门。另一种含义指企业信息门户(Enterprise Information Portal), 它是一个统一工作平台,可集成企业的数据资源和应用系统,使得企业员工可 以一站式地访问各种信息和各业务系统,参与企业业务流程。从软件开发的角 度看,Portal 是一种门户中间件。它是一个构建、运行和维护企业信息门户的 支撑系统,它提供了面向表示层的开放集成框架。通过其提供的系统服务和相 关工具,Portal 可集成应用系统、数据资源和互联网资源;根据每个用户使用 特点和角色的不同,Portal 提供个性化的访问页面,从而实现灵活、有效、集 成的交互工作环境。 Portal 的核心能力是企业信息集成能力。企业信息集成能力的定义为:利 用企业信息集成系统,将不同语义,以不同格式存储,访问方法各异的异源异 构信息,通过对这些信息的统一管理,实时抽取,提供集成、转化、应用接口 和辅助快速开发能力,为企业的内外部信息提供良好的访问方式,将信息的需 求者屏蔽于所有的信息复杂性之外,提高企业生产率,促进更好更快的企业决 策。Portal 的信息集成能力由 Portlet 实现。Portlet 可以包装各种异源异构数据 与应用系统。 随着 Portal 在企业中的广泛使用,仅将各种应用进行简单集成已经不能满 足用户需求。企业希望各种应用能共享数据。如果依靠人工将这些数据从一个 应用拷贝到另一个应用,不可避免的会带来错误进而导致生产率的降低,也影 响了 Portal 的集成能力。这种情况下,Portlet 之间的协作能力成为必然的需求。 美国电气及电子工程师学会(IEEE)将“协作”定义为“两个或者多个系统互相 交换信息并且使用这些信息的能力” 。Portlet 协作可定义为“两个或多个 Portlet 进行信息交换并使用这些信息的能力” 。 目前很多 Portal 都在某种程度上实现了 Portlet 的协作功能。这些协作功能 的实现方式可以分为两种:基于后端(back-end)的方式与基于前端(front-end)的 方式。基于后端是指 Portlet 协作数据在 Portlet 运行时获得,Portlet 通过直接或 间接的接口调用完成协作。后端协作需要统一的 API 或者共享数据区。基于前 端的方式是指 Portlet 协作的数据从 Portlet 产生的 HTML 片段中获得,前端方 式不需要统一的 API。 在现有的实现方式中,Portlet 协作模块与 Portal 产品紧密绑定,没有一种 通用的 Portlet 协作框架。同时现有实现方式不支持复杂数据类型与类型转换。 为解决上述问题,本文对 Portlet 协作框架及其关键技术进行了研究。 1.2 论文的主要工作论文的主要工作 本文在研究 Portlet 规范和 Portlet 协作一般实现机制基础上,提出了一种基 于事件的 Portlet 前端协作框架。基于 JSR286 规范的事件和共享渲染参数机制 提出了 Portlet 后端协作框架,并在中科院软件研究所自主研发的 OncePortal 上 实现了 Portlet 协作框架,该框架完全符合 JSR286 规范。论文的主要工作包括 以下几个部分: 1.Portlet 前端协作框架:我们提出了一种基于事件的 Portlet 前端协作框架, 该框架包括浏览器端和服务器端两部分。在浏览器端通过事件订阅方式 使订阅事件的 Portlet 与发布事件的 Portlet 相耦合。事件处理过程中可 以通过异步通信方式与服务器端通信,将返回的结果动态更新当前页面。 服务器端提供 Servlet 和资源服务方式分别支持 JSR168 和 JSR286 规范, 使该框架可适应不同的 Portal 产品。 2.Portlet 后端协作框架:在 JSR286 规范定义的事件及共享渲染参数协作 机制基础上,实现了一个 Portlet 后端协作框架。在该框架中协作服务 使用消息队列保存待处理的消息,Portlet 容器作为中介实现发布事件的 Portlet 和订阅事件的 Portlet 之间松散耦合。Portlet 容器监听协作事件, 事件触发后调用事件协作服务发布事件,为了提高协作的并发性,事件 协作服务使用多线程处理协作事件。 3.OncePortal 系统重构:将 Portlet 的创建,初始化,执行,销毁等生命周 期管理及请求响应的创建服务从 Portal 服务器中剥离出来,合并成 Portlet 应用管理器。Portlet 应用管理器针对每一个 Portlet 应用生成一个 Portlet App Servlet,负责转发相应的请求。使用生命周期管理器对容器 中的 Portlet 进行管理,简化 Portlet 部署,实现 Portlet 应用的热部署。 4.OncePortal 的 Portlet 协作框架:OncePortal 增加了两个协作相关服务: 协作信息服务及协作服务。协作信息服务提供与协作相关的信息,包括 参与处理事件的 Portlet 列表,参与处理共享渲染参数的 Portlet 列表, 当前备选 Portlet 列表等。协作服务直接与 Portlet 容器交互,给容器提 供处理事件及共享渲染参数的服务。论文在第五章详细介绍了协作框架 的总体结构和各功能模块。 1.3 论文内容的组织论文内容的组织 本文的章节按如下方式组织: 第二章首先给出了 Portal 的定义,回顾了 Portal 的发展历史,介绍了 Portal 的功能与体系结构。接着介绍了 Portlet 与两个重要的 Portlet 规范,并详细分析 了 JSR286 规范定义的两种协作方式的特点。最后探讨了 Portal 与 Ajax 结合的 可能性。 第三章首先分析了 Portlet 协作需求,归纳了 Portlet 协作需求的特点,指出 了目前协作实现方式的不足。深入分析 Portlet 协作方式,根据两种 Portlet 协作 方式分别提出了前端协作框架和后端协作框架。接着根据 Portlet 协作的特点和 其对 Portal 系统的要求,提出了 OncePortal 系统的重构方案。 第四章首先提出了一个基于事件的 Portlet 前端协作框架,该框架由客户端 和服务器端两部分构成,服务器端提供两种不同的方案分别支持 JSR168 和 JSR286 规范,接着分析了前端协作中 Portlet 间协作类型,最后给出了前端协作 框架的实现。 第五章首先提出了一个基于 JSR286 规范 Portlet 后端协作框架,分析了后 端协作框架的事件循环处理,事件名称匹配,事件域范围等关键技术。最后介 绍了后端协作框架的具体实现,并将此框架应用于 OncePortal 中。 第六章对全文工作进行了总结,并对进一步研究提出了展望。 第二章第二章 Portal 与与 Portlet 协作协作 2.1 Portal 简介简介 .1 PortalPortal 的概念的概念 Portal 涵盖了很多软件方面的概念和定义。需要从不同的角度来分析,以 比较全面的理解 Portal。 Portal 是一个应用框架,企业所有的应用和数据都基于 Portal 框架开发 和运行。Portal 负责对这些数据和应用进行管理。 Portal 是一个基于 Web 的应用系统,是一个 B/S 结构的软件,所有的 数据和信息都由 Portal 服务器来管理。用户可以通过浏览器获取这些 信息。 Portal 是一个集成系统,企业利用它的集成功能可以将现有的应用系统 整合为有机整体,使这些应用协同工作。 概括的说,Portal 是为用户提供单一入口,使用户能够按照个性化需求, 提取存储在企业内部和外部的信息,从而便于进行商业决策的应用程序;它是 融合了商业智能、内容管理、数据仓库/集市、数据管理等一系列用于管理、分 析、发布信息的软件程序1 。 .2 PortalPortal 的功能和特点的功能和特点 门户作为企业的信息和应用接入点,其在企业的业务和信息流程中起到了 如下的作用2:首先,门户对企业内部来说是管理和查询日常业务的公用平台, 员工可以访问企业的客户、销售、生产、库存、财务等信息,以最低的成本共 享和利用企业的所有信息。 其次,门户对外是企业网站,通过门户及时向客户 和合作伙伴提供产品、服务的信息。 开拓新的网上业务,推动企业走进电子商 务。 通过门户,企业能够释放存储在内部和外部的各种信息,同时使企业员工、 客户和合作伙伴能够从单一的渠道访问其所需的个性化信息。 门户可以认为包含如下几部分功能:用户接口、内容发布,服务发布和信 息门户管理。 用户接口是用来管理门户的输出功能的,通常它管理图形化接口,合并内 容并在特定的设备上输出。它包括表示管理功能、应用容器支撑和用户个性化 功能。表示管理管理内容在指定设备上的输出形式,门户用访问不同信息来源 的实体,它是门户的主要组成部分,应用容器是容纳应用程序运行的环境,使 其能运行访问信息资源,并返回网页表示结果。个性化功能则是针对不同的用 户输出不同网页内容。 内容发布是指访问各种不同来源的信息的功能,它包括对内容的管理功能 以及内容的导航功能。因为门户可以访问不同来源的内容,因此用户可能需要 通过链接和查询,其以相似的方式来访问内容,其中也需要一些内容分类机制 来管理这些分布的内容。 服务发布使门户能访问一些复杂的应用,例如会议室,邮件,订单处理这 样的功能力。这使得信息门户需要提供服务平台、协作框架、应用连接、服务 平台网关,Web Services 网关,工作流引擎等,同时其能集成已有的企业应用。 服务平台是指提供服务的基础。协作框架提供了访问门户用户之间的协作,消 息模型和事件处理的框架,其为会议室,邮件等一类应用提供基础框架。应用 连接是特殊的连接器,用来包装和客户化企业应用。工作流引擎用于在信息门 户中提供为访问门户的用户提供业务流程支持。 信息门户管理主要涉及对访问本门户的用户的管理,对门户系统注册和管 理等信息的管理。 门户一般具有如下特点3: 1、单一的访问方式。所有的用户都可以通过单一的入口访问他们所需要的 信息。单一访问方式需要单点登录功能的支持。单点登录(Single Sign On,简 称 SSO)是应用集成领域的一个重要概念,它提供一个统一的机制用于管理用 户的认证,可以在用户的授权下在应用系统间按照某种规则共享认证信息,并 代替用户来完成一些具体的登录工作,其目的是允许用户仅仅通过一次登录就 可以访问到多个应用。对于一个实现了单点登录功能的门户系统,当用户成功 登录到门户之后,如果要访问门户后台的某个集成应用,门户可以代替用户自 动完成在该应用上的登录验证过程,不需要用户输入任何信息,从而实现了单 一的访问方式。 2、信息集成和应用集成。门户系统可以集成企业现有的、各种不同来源的 信息资源和企业应用,用户通过门户可以方便地访问到这些信息和应用。 3、个性化。每个企业用户都可以定制自己的个性化访问页面,这一页面只 包含用户希望访问到的信息和应用,而滤除用户不需要访问的信息和应用。 4、内容管理能力。基于对企业内外各种类型信息的处理能力,门户支持几 乎各种结构化和非结构化的数据。 5、多种信息发布方式。门户可以有多种不同的发布信息的方式,用户可以 通过浏览器来访问企业信息,也可以通过手机、PDA 等其他无线的接入方式来 访问这些信息。 6、可扩展性。能适应企业新的人员和部门调整的变化,满足企业业务调整 和扩展的要求,解决企业与 IT 部门短时间内无法解决的技术需求问题。 7、安全可靠的保障。门户可以提供的安全机制包括认证、角色分配、用户 和组的授权、用户操作监督等,通过这些机制控制用户对信息和应用的访问, 保证数据的机密性及完整性,使企业业务流程正常运转。 从上面所描述的特点可以看出,门户能够通过超越现有分散的应用环境实 现企业信息和业务集成的目标。它把原来不同的内部部门的分割、不同的企业 内外的分割,通过系统的集成使其相互关系连接到一起,形成统一的、广泛的 和相互关联的企业应用环境。 .3 PortalPortal 的应用和系统结构的应用和系统结构 典型的 Portal 系统的体系结构4由三部分组成:Portal Server,Portlet Container,和 Portlet。参见图 2-1 所示。 HTTP HTML, WML, VoiceXML Portal Server Portlet Container Portlet (App) Container Invoker APIContainer Provider SPI Portlet API Portlet (App) Portlet (App) 图 2-1 Portal 系统的总体结构框架 Portal 服务器 Portal 服务器作为一个 Web 应用运行于 Servlet 引擎之上,它首先接收客 户端的请求,解析请求以获知当前用户页面所需激活的 Portlet,然后调用 Portlet 容器相应接口去处理请求,获得 Portlet 容器的返回结果后进行 Portal 页 面组装并返回给用户。 Portlet 容器 由于 Portlet 规范定义时沿用了很多 Servlet5的概念,Portlet 容器的实现也 类似于 Servlet 容器,它提供了基于 Portlet 规范的 Portlet 的运行时环境。在该 环境中,一个 Portlet 可被初始化、使用和销毁。Portlet 容器并非独立工作,它 基于 Servlet 容器之上,复用 Servlet 容器提供的各种功能。Portlet 容器通过 Portlet API 去调用底层符合规范的 Portlet,获得 Portlet 的内容,返回给上层的 Portal 服务器。同时容器还可通过 Container Provider SPI(Service Provider Interface) 获取 Portal 的基本信息或用户信息供 Portlet 使用。Portlet 容器是 Portal 服务器与 Portlet 之间进行交互的管理模块。 Portlet 组件 Portlet 是一个基于 Java 技术的、类似于 Servlet 的、可插拔(pluggable) 的 Web 组件,是专为将合成页面里的内容聚集在一起而设计的。通常请求一个 Portal 页面会引发多个 Portlet 被调用。每个 Portlet 都会生成代码片段,并与其 他 Portlet 生成的标记段组合在一起嵌入到 Portal 页面内。Portlet 由 Portlet Container 管理,专门处理客户的请求以及产生各种动态的信息内容。有关 Portlet 以及 Portlet 规范将在下一小节详细介绍。 用户对 Portal 的访问实际上是对其后台数据和应用的访问,而这一过程是 通过与 Portlet 的交互实现的,所以整个 Portal 框架基本上是以用户请求处理和 Portlet 执行为中心来设计的。Portlet 容器运行 Portlet,给它们提供所需的运行 时环境,并且管理它们的生命周期。它为 Portlet 偏好提供持久性存储,这使得 能够为不同的用户生成自定义输出。 2.2 Portlet 简介简介 .1 PortletPortlet 的概念的概念 Portlet 在表现形式上为页面上的小窗口,但它不仅限于将网页以模块化的 方式显示出来。实际上,每一个 Portlet 就是一个完整的 Web 应用。Portlet 的开 发、部署、管理和显示都是完全独立的,不受其他 Portlet 的影响。一个 Portlet 可看作一个处理特定业务逻辑的组件。由于 Portlet 的这种独立性与功能性,使 得 Portal 用户能够方便地配置符合自己要求的页面,提高信息采集与概括的效 率。 Portlet 类继承自 HttpServlet。Portlet 与 Servlet 都是处理 HttpRequest 并返回 HttpResponse。与 Servlet 不同的是,Portlet 的请求处理分为两个阶段: processAction 和 render,称之为 Portlet 的“两阶段处理过程” 。 Portlet 还有一项属性是 Portlet Mode。一个 Portlet 通常会包含几种 Mode, 最常见的是 Minimize Mode、Maximize Mode、Help Mode 和 Edit Mode。Minimize Mode 为用户提供将 Portlet 最小化的功能,Maximized Mode 为 用户提供将 Portlet 最大化的功能,Help Mode 为用户提供关于该 Portlet 的帮助 信息,Edit Mode 为用户提供了设置 Portlet 属性的功能。用户可以通过点击 Portlet 的标题栏上的图标(图中椭圆框住的部分)来切换不同的 Mode,如图 2-2 所示。 图 2-2 Portlet Mode .2 PortletPortlet 规范规范 Portlet 有四个相关规范,它们是由 Java 标准制定组织(JCP)在 2003 年 10 月 制定的 Java Portlet Specification 1.0 (JSR168)6和 2009 年 3 月制定的 Java Portlet Specification 2.0 (JSR 286) 7,下边分别进行介绍。 JSR168JSR168 Portlet 规范出台之前,不同的供应商都根据自己的标准开发了各自的 Portlet 接口,这些互不兼容的接口给应用提供商、Portal 客户和 Portal 提供商带 来了各种问题。为此, JCP 发布了 Portlet1.0 规范 JSR168。 JSR168 规范定义了整合不同信息数据来源和底层应用的 Portlet API,描述 了 Portlet 与 Portal 之间的相互作用,Portlet 的生命周期及安全性,用户定制, Portlet 显示管理等方面的内容,提供了统一的 Portlet 接口定义。基于规范的 Portal 将成为一个通用性好,适用性强的系统,可兼容任何符合规范的 Portlet。 Portlet 规范的主要目标如下: 定义 Portlet 的运行环境,即 Portlet 容器(Portlet container); 定义 Portlet 容器与 Portlet 组件之间进行交互的 API; 为 Portlet 组件的临时数据和持久数据提供一种存储机制; 为 Portlet 组件提供访问并包含 Servlet 和 JSP 的机制; 为 Portlet 组件提供打包机制,以方便进行部署; 允许 Portlet 组件在所有满足 JSR168 规范的 Portal 间移植; Portal 是一个 web 应用程序,它负责将不同资源进行整合并展现给用户, 通常其具有三个特点:个性化、单点登录和内容聚合。其中内容聚合指的是将 不同来源的信息整合到一个页面的过程。Portal 的主要任务是将不同的应用程 序集成到一个页面,这个页面的外观是 Portal 用户共有的;Portal 也可以有复杂 的个性化特征,这些特征能够为用户提供自定义内容。同时,Portal 页可以有 不同的 Portlet 集,以便为不同的用户创建不同的内容。 Portlet 容器用于运行 Portlet,为其提供必需的运行环境,管理 Portlet 的生 存周期,并为其提供持久性存储机制。在运行过程中,Portlet 容器从 Portal 接 收请求,并调用 Portlet 执行该请求,最后将执行的结果返回给 Portal。容器不 负责对 Portlet 产生的内容进行组装,内容组装由 Portal 完成。 Portal 与 Portlet 容器既可以捆绑在一起实现为单个的应用组件,也可以作 为两个相互独立的应用组件来进行实现,Portlet 规范对此并未进行限定。 基本的 Portlet 生命周期可以分成三个阶段: 初始化:使用初始化类初始化 Portlet,并将其放入服务中以供后续访问; 处理请求:处理各种不同种类的 action 请求或 render 请求; 销毁:销毁 Portlet,并回收 Portlet 所占有的资源。 JSR168 规范定义了针对 Java 平台实现的 Portlet 的标准接口,使得符合标 准的 Portlet 与 Portlet 容器之间可以兼容,但是没有提供 Portlet 之间的协作标准。 随着对 Portlet 协作的需求提出,Portlet 协作标准将在下一个规范 JSR286 中定 义。 JSR286JSR286 Java Portlet Specification 的第一个版本称为 JSR168,于 2003 年完成,目前 在业界受到广泛支持,且由开放源码支持。此版本存在一定的缺陷,仅支持最 基本的用例,在功能上有一些限制。因此,经过三年之后,大多数支持 JSR168 规范的门户产品都提供一些附加扩展,以支持更高级的用例。于是,在 2005 年 11 月开始了 Java Portlet Specification V2.0(称为 JSR286)的开发,以适应业 界发展,并提供适应于最高级别用例的标准解决方案,从而为这些高级功能提 供协作功能。 JSR286 最终草案包含 JSR168 中没有的功能8,例如 Portlet 之间的协作、 资源服务、Portlet 窗口和 Portlet 过滤器。下面是该新规范的一些主要功能。 协作 JSR286 引入了两种不同的协作概念,为从不同的 Portlet 应用程序使用 Portlet 创建组合应用程序提供了便利。 第一种协作方式是松耦合的代理事件模型。该模型的实现分为两步,首先 由 Portlet 应用定义可以支持的所有事件,然后每个 Portlet 在自己的部署描述符 中声明可接收和发布的事件。在运行时,根据 Portlet 的事件声明,Portlet 容器 可以将不同的 Portlet 连接在一起以达到协作的目的。 第二种协作方式是共享渲染参数。该方式主要是为了在不同的 Portlet 之间 共享显示状态。在 portlet.xml 中声明共享呈现参数后,如果参数不是空值, Portlet 将自动接收它们。Portal 可以将该参数及其值编码到 Portal URL 中,这 样,在同一个上下文中的所有 Portlet 都可以使用并修改共享参数的值。当某个 Portlet 发生变化并修改了某个共享参数的值,Portal 页面刷新的时候其它使用该 参数的 Portlet 的显示也会发生相应变化,这样也就达到了 Portlet 协作的目的。 资源服务 JSR286 规范之前,Portlet 一般都是通过“直接链接到资源”的方式提供资 源服务。由于直接链接到资源,这种方式的请求很有可能不通过 Portal 服务器 进行转发,这样也就无法获取到 portlet 的上下文信息,也无法通过 portal 的统 一权限管理对资源的访问进行约束,但是它的优点却在于中间环节少,对 portal 服务器的负载压力小,访问效率高。因此,在对权限以及 portlet 上下文信息无 要求的时候,使用此方法比较有效。 由于上述方法在使用上的缺陷,JSR286 规范定义了另外一种资源服务方式 “ResourceURL 链接”方式。该方式在 JSR168 规范定义的 RenderURL 和 ActionURL 两种 URL 之外添加了一种新的 ResourceURL,同时在 PortletRequest 接口中引入了一个新的 serveResource 方法专门相应新类型的 URL。这就将资源 的访问也纳入到 portlet 的访问范畴中。这样做的好处在于 serveResource 的实现 可以根据 portlet 模式、窗口状态、当前呈现参数或 Portlet 首选项的不同呈现不 同的资源;portal 可以使用对 portlet 的统一权限管理对资源的访问进行约束; 另外,serveResource 还支持异步呈现标记片段,这使得 Portlet 可以实现 AJAX 调用。 相对于“直接链接到资源”方式,该方式的缺点就是它带来了额外的门户 请求开销,加重了门户服务器的负载。虽然有这些不足,但 ResourceURL 却为 用户在资源服务方式上提供了更多的选择,弥补了某些缺陷。 Portlet 窗口 Portlet 窗口在 JSR168 中仅间接地得到反映,并作为容器为 Portlet 范围的 会话条目生成的前缀的一部分。JSR286 规范现在使该 Portlet 窗口 ID 可通过请 求供 Portlet 使用,因此 Portlet 可以将此 ID 用于它要存储的关键数据。 它支持的一个常见用例是在 Portlet 中缓存数据;例如,从慢速后端系统检 索的数据,而且与各种 Portlet 窗口不同。使用 Portlet 窗口 ID,Portlet 现在可以 在缓存系统中缓存由应用程序服务器或其他缓存系统提供的此类数据。 Portlet 过滤器 Portlet 过滤器可以放置在 JSR286 规范提供的任何生命周期方法调用的前面 (processAction、processEvent、processRender、serveResource) ,对 Portlet 请求 进行预处理。与 Servlet 过滤器类似,Portlet 过滤器需要在 portlet.xml 部署描述 符中进行定义。 2.3 协作协作方式方式 JSR286 规范定义了两种不同的协作方式,分别是基于事件和共享渲染参数 方式,可以为不同的 Portlet 应用程序使用 Portlet 创建组合应用程序提供了便 利。 .1 事件通信事件通信方式方式 事件机制的目的是使得 Portlet 不仅对用户的操作做出响应,而且可响应相 关的动作和状态的改变。事件可由 Portal 或 Portlet 容器触发,也可由用户与 Portlet 的交互触发。事件通信模型是一种 Portlet 之间通信的基于中介的松散耦 合方式,它使得不同的 Portlet 可以在运行时串联起来。Portlet 开发人员只需考 虑触发事件和处理事件的 Portlet 的逻辑,不需要考虑 Portlet 运行环境。Portlet 之间的联系由容器实现。 Portlet 事件不是对可靠消息如 J2EE API 的 JMS9的替代。Portlet 事件并不 保证完全可靠的消息传输,因此 Portlet 开发者需要考虑到 Portlet 如何在事件传 输失败后能正常工作。 Portlet 在其动作处理函数中通过 SetEvent 方法发布一个事件,当动作处理 函数完成时,该事件将被 Portlet 容器处理。一个非用户事件接收者的 Portlet 可 选择性的接受容器事件,如用户登录和注销事件。 事件声明事件声明 Portlet 必须在 portlet.xml 部署文件中声明与其相关的事件。在 Portlet 应用 层使用 event-definition 元素定义事件。事件定义必须包括事件名称,事件名称 是 Portlet 容器辨别事件的唯一标识。Portlet 也可以定义额外的事件别名作为事 件名称的补充。Portlet 可以通过 supported-publishing-event 和 supported- processing-event 元素定义其可发布和接收的事件,事件名称参照 event- definition 中的定义。 图 2-3 事件定义 如图 2-3 所示,在当前 Portlet 应用下定义了一个事件,此事件的 QName 为 x:Address。value-type 标签定义了事件负载对应的 Java 类,如图 2-4 所示, 该类必须实现 Serializable 接口。 public class Address implements Serializable private String street; private String city; public void setStreet(String s) street = s; public String getStreet() return street; public void setCity(String c) city = c; public String getCity() return city; x:Address com.test.Address 图 2-4 事件负载类 Portlet 容器和 Portal 定义的事件不需要在 Portlet 应用层使用 event-definition 元素定义就可以直接在 Portlet 层使用 supported-processing-event 元素引用。 事件名称必须使用 XML 规范10中定义的 QName 作为唯一标识。Portlet 可 以使用以“.”作为分隔符来组织事件名称的局部名称(local part) 。Portlet 不允 许定义相同名称但类型不同的事件。事件参数名称以“.”结束表示该 Portlet 支 持任何名称以“.”之前的字符串开始的事件。 Portlet 事件定义的局部名称可以在 Portlet 应用层使用 javax.portlet.app.event-definitiondisplay-name 元素定义在资源文件中的 条目。 事件发布事件发布 Portlet 可通过 StateAwareReponse 接口的 setEvent 方法发布事件。 ActionResonpse 和 EventRespons

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论