`
nnl
  • 浏览: 892 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

探索 WebSphere Portal V5.1.0.1 编程模型: 第 1 部分:模型介绍

阅读更多
转载:探索 WebSphere Portal V5.1.0.1 编程模型: 第 1 部分:模型介绍
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0512_hepper/0512_hepper.html

级别: 初级

Stefan Hepper (sthepper@de.ibm.com), WebSphere Portal 编程模型架构师, IBM
Stefan Liesche (liesche@de.ibm.com), WebSphere Portal 和 Workplace Foundation 首席架构师, IBM

2006 年 3 月 13 日

    这是一个由 5 篇文章组成的系列,它可以帮助门户开发人员和管理员将 IBM® WebSphere® Portal V5.1.0.1 编程模型应用到您的公司门户中,本文是其中的第一篇。本文介绍该模型的各个部分,简要概述门户技术,并描述门户如何与面向服务的体系结构 (SOA) 相关联。您将了解模型构件(例如 Portlet、主题、皮肤和 Portlet 服务)以及如何修改一个称为聚合 的程序,其中,各个部分共同创建门户页面。然后,您将看到两个一般性概念(安全性和虚拟门户)如何与编程模型相关联。最后,您可以下载和试验一个 Portlet 应用程序,它阐释了在第一部分引入的概念,在本系列后面的部分中也将使用这个应用程序。

引言

WebSphere Portal 编程模型是 J2EE 编程模型的扩展。通过 WebSphere Portal 编程模型,可以实现 Web 应用程序来利用 WebSphere Portal 平台丰富的功能集。这些功能包括将组件聚合和集成到页面层次结构、灵活的导航、内容和应用程序聚合、署名、自定义、个性化、内容管理、文档管理以及搜索等等。图 1 显示了门户的工作原理。

图 1. 门户工作原理:应用程序“Integration at the glass”
图 1. 门户工作原理:应用程序“Integration at the glass”

用户与门户交互,而门户与各种后台应用程序交互,可以将它们都聚合到一个浏览器窗口(门户页面)中以呈现给用户。WebSphere Portal 也可以帮助您将这些组件集成到一个上下文中,该功能通常称为 Integration on the glass。此外,该门户将所有的用户应用程序都集成在一起并显示在单个窗口中,以便最终用户获得对与其相关的上下文中的许多异构系统的一致视图。这种强大功能使得公司能够为用户提供集成的、一致的方式来处理分布广泛的 IT 基础设施中的复杂应用程序网络。与使用不同用户界面处理不同 IT 系统相反,用户只需要使用单一的用户界面来处理一个 IT 系统,这就是门户。

WebSphere Portal 编程模型包含各种 API、SPI、JSP Taglib 和描述符,它们可以让您在不同级别自定义聚合步骤。本文旨在让您对使用此模型可以自定义和扩展门户的哪些部分有初步的了解。




回页首


模型的各个部分介绍

门户页面是由 Portlet 生成的不同标记片段组成的。收集所有 Portlet 片段并创建可以发送回客户端的单个页面的过程称为聚合,图 2 描述了这个过程。

图 2. 门户页面的聚合
图 2. 门户页面的聚合

聚合流如下所示:

   1. 客户端将请求发送到门户。门户 Servlet 检查请求标头并确定哪个设备和用户正在请求页面。
   2. 门户确定此页面上的 Portlet,并检查该用户对这些 Portlet 的访问权限。这里是您可以自定义的第一个插接点 (plug point)。您可以定制登录和注销行为。在本系列后面的文章中,我们将更加详细地介绍如何实现这一自定义。
   3. 调用布局系统,它是由呈现外观的主题和皮肤组成的。主题和皮肤是门户系统中的主要插接点,您可以在其中修改整个门户页面的外观。我们将在本文后面的部分构件:主题和皮肤中更加详细地讨论主题和皮肤。
   4. 用户操作将从门户转发到相应 Portlet 的 Portlet 容器中。此容器为 Portlet 提供运行时环境,并且通过 Portlet API 与 Portlet 交互。该 Portlet 容器向 Portlet 发出处理操作调用,Portlet 处理该操作并相应地更改其状态。
   5. 最后,由布局系统启动呈现,并且门户调用页面中每个 Portlet 的 Portlet 容器。Portlet 容器调用所请求的 Portlet 的呈现方法,然后 Portlet 将其标记片段呈现到输出流中。在所有 Portlet 都处理完后,再将整个页面返回给客户端。





回页首


门户和 SOA

面向服务的体系结构 (SOA) 是一种构建分布式系统的方法,它将应用程序功能作为服务传递给最终用户应用程序或者其他服务。SOA 提供集成和管理这些不同设备的机制。

门户如何融入 SOA?门户为 SOA 提供了一流的用户界面 (UI) 支持。Portlet(门户的构建块)使得开发人员可以专注于其应用程序的独特方面,而由中间件处理生命周期的常见功能,例如每用户自定义、聚合和与其他组件集成。

门户提供了聚合和集成 UI 的功能,其方式与 SOA 运行时组合和集成服务的方式类似。组件 UI 被聚合到更大的、价值更高的 UI 中,从而为用户提供单一的 IT 服务视图,用户也只需掌握单个 UI 的操作。最初独立设计的应用程序可以集成到一起以启用新的功能。您可以使用 Portlet 间通信来集成组件。例如,电子邮件 Portlet 可以与协作 Portlet 相互通信来过滤收件箱,并且只有在发送者联机且可以进行聊天时才显示接收到的电子邮件;这一功能在最初的应用程序中都不具备。

门户模型带来了一个惊人的结果,也就是提高了随需应变业务的灵活性。管理员可以成为应用程序集成人员,他们能够在不进行任何编程的情况下创建新的应用程序,其方法是定义新的页面、向其中添加 Portlet、将 Portlet 连接在一起以及设置权限。通过自服务门户,用户可以让其工作环境适应他们的独特需要。所以,门户体系结构使应用程序开发人员能够脱身出来专注于构建新的业务价值。

本地 Portlet 的服务接口和协议是通过 Java Portlet 规范定义的。Web Services Remote Portlet (WSRP) 是 Portlet 远程呈现标准,它使门户能够聚合来自多个远程源的内容。WSRP 将 Web 服务的集成功能扩展到面向表示的组件,并公开视图层以跨平台、实现语言和供应商共享。不需要进行任何额外的编程,就可以发现内容和应用程序提供商服务并将其插入到符合标准的应用程序中。




回页首


构件:Portlet

Portlet 是 Portlet 应用程序的基本构建块。本文没有描述 Java Portlet API 和编程模型,而是着重介绍 WebSphere Portal 的特定扩展。有关 Portlet API 的更多信息,请参阅“参考资料”。

标记库

JSR 168 为大多数特定于 Portlet 的常见功能(例如创建操作或呈现 URL)定义了标记库。JSP 标准模板库 (JSTL) 为 JSP 提供了其他常见功能,例如迭代、格式化和国际化。WebSphere Portal 为 Portlet 提供了附加标记库,这使得 Portlet 能够使用其他国际化扩展。

您只有在标准标记库不够用时,才需要在 Portlet 应用程序中包含特定于应用程序的标记库。

代理的 Portlet 交互

目前的 Java Portlet 规范为 Portlet 与其他 Portlet 相互共享数据提供的支持是有限的。在健全的 Web 应用程序中,Portlet 只能使用 Portlet 会话来与其他 Portlet 共享数据。

WebSphere Portal 引入了代理的 Portlet 交互机制这一概念。所有的 Portlet 都在一个代理处注册其交互功能,然后由该代理促进 Portlet 之间的交互。代理的操作原则是将 Portlet 作为类型化属性的生产者和使用者;因此,它也称为 属性代理 (Property Broker)。Portlet 既可以直接注册感兴趣的生产和使用属性,也可以通过注册生产和使用属性的操作来间接注册。通过使用与属性相关联的类型化信息,Property Broker 可以确定属于不同 Portlet 的属性之间的功能。从而支持松耦合的、高度交互的应用程序。门户管理员可以定义 Portlet 之间的连接,以使它们能够在运行时集成。

用于 Portlet 间通信的编程模型使用现有的 JSR Portlet API 方法 processAction 来向 Portlet 通知属性更改。因此,这些 Portlet 也可以在不支持 IBM 扩展的环境中运行。在非 IBM 环境中始终不触发具体的 Property Broker 操作。

Portlet 应用程序开发人员通常不需要进行额外的编程(除正常的 Portlet 开发以外)就可以利用基本的代理合作机制。相反,他们只需要在 WSDL 文件中向代理声明属性和操作。在 WebSphere Portal V5.1.0.1 中,属性代理机制仅限于相同页面上的 Portlet 或者两个不同页面上的 Portlet。




回页首


Portlet 框架

对于创建更复杂的 Portlet 应用程序,使用框架可以节省大量开发工作,并且可以确保这些 Portlet 应用程序设计良好且可维护。WebSphere Portal 支持三种不同的框架:Struts、Java Server Faces 和 JSF Widget Library。

Struts

Struts 是最早的 Web 开发框架之一,它有一个非常大的开发人员社区和非常好的工具支持。Struts 是 Apache [Struts] 上的一个开放源代码项目,创建此项目的目的在于为 Servlet 和 JSP 编程人员提供一个多页面的模型-视图-控制器(Model-View-Controller,MVC)框架。因为 Struts 是为 Servlet 开发的,所以它无法直接用于 Portlet;Portlet 将 MVC 模型严格地内置在接口中以及操作和呈现阶段。另外,Portlet 和 Servlet 的请求/响应是不同的,必须进行适配。WebSphere Portal 提供了一个特殊版本的 Struts V1.1 库,它经过了修改,可以在 WebSphere Portal 上支持 JSR 168 Portlets。

Java Server Faces (JSF)

Java Server Faces 是 Java Web 应用程序的 UI 框架,它是通过 Java Community Process 标准化的。因为它很新,所以考虑了 Portlet,并且可以直接用于 Portlet 和 Servlet。除了 UI 组件之外,JSF 还为这些组件提供了状态处理、验证和事件处理的基础设施支持。它是一个非常强大和灵活的框架,可以很好地使用 Portlet。

WebSphere Portal 通过包含 JSF 库来支持 JSF,所以主题和皮肤可以利用此 UI 框架。Rational Application Developer 提供了工具支持。您可以使用向导来创建基于 JSF 的 Portlet,也可以使用 Portlet 可能使用的附加 JSF UI 小部件。

JSF Widget 库 (JWL)

JWL 是由 Rational Application Developer 提供的,它使门户和 Portlet 编程人员可以使用基于 JSF 的附加小部件。此库的一个显著特征是这些小部件都有客户端功能。这些小部件可以在客户端上执行处理以更新其视图,免去了与服务器之间的数据往来,从而显著改善了用户体验,因为响应时间得以极大缩短。您可以部署 WebSphere Portal Portlet,它们使用这些小部件的方式与使用任何其他 Portlet 一样。




回页首


构件:主题和皮肤

在构建 Web 应用程序时,J2EE JSP 模型为将编程角色和设计角色分开提供了基础。WebSphere Portal 更进一步提供框架来将这二者分得更清楚,同时具有更好的灵活性。WebSphere Portal 主题和皮肤用一组定义良好的构件(包括 JSP 和 CSS 类)来将用户体验的署名和外观分开。您只需要替换 Topology 模型中引用的主题和皮肤的实现,就可以轻松地更改用户体验的署名和总体外观。WebSphere Portal 5.1.x 定义了一个目录结构,主题和皮肤必须存放在其中才能够部署到 WebSphere Portal。

主题控制页面的外观(包括署名)。皮肤公开了 Portlet 控件。为了使主题和外观顺利地工作,Portlet 编程人员在其实现中使用了全局定义的标准化 CSS 样式类,例如在 JSR 168 和 WSRP 中定义的 CSS 样式类。然后,将独立开发的 Portlet 放在相同的页面中,这样它们看起来就像由一个团队开发的。

图 3 描述了一些缺省的 WebSphere Portal 5.1 主题。所有这些都可以选作页面的主题,或者将这些主题作为模板创建自定义主题。


图 3:WebSphere Portal 5.1 的缺省主题子集
图 3:WebSphere Portal 5.1 的缺省主题子集。

图 4 显示了呈现 Portlet 窗口的一些 WebSphere Portal 5.1 缺省皮肤。与主题的情况相似,您可以自定义皮肤,以及使用缺省皮肤作为示例来构建自己的皮肤。

图 4:WebSphere Portal 5.1 的缺省皮肤子集
图 4:WebSphere Portal 5.1 的缺省皮肤子集

您可以通过 Theme List 模型和 Skin List 模型以编程方式检查关于主题和皮肤的信息。这些模型分别公开了主题和皮肤对象。它们可用于获取特定主题或皮肤上的信息。




回页首


构件:Portlet 服务

顾名思义,Portlet 服务是可供 Portlet 使用的服务。有两种类型的服务:随 WP 5.1 提供的缺省 Portlet 服务和自定义 Portlet 服务。

Portlet 服务编程模型定义了一个框架,用于为没有在 Portlet API 中指定的 Portlet 提供功能。Portlet 可以通过标准 JNDI 查找来检索这样的服务。Portlet 服务并不仅限于接口的定义。通常,Portlet 服务以输入参数的形式从 Portlet API 获取对象(例如 Portlet 请求)。一些(特定于 IBM)的 Portlet 服务是作为 WebSphere-Portal 的一部分提供的,但是也允许您向门户添加自定义服务。

Portlet 有两个基本独立的方面:

    * 服务访问(客户端视图)描述了 Portlet 服务的接口定义方式,以及 Portlet 如何获取服务的实现。
    * 服务提供商(服务器视图)描述了服务的实现和注册方式。

Portlet 服务编程模型是基于单一实例的,这意味着 Portlet 服务没有特定于 Portlet 实体的实例。因此,建议的编程实践是在 Portlet 的 init 方法中查找服务,并将其存储在一个实例变量中。

WebSphere Portal V5.1.0.1 提供了以下 Portlet 服务。这些服务是通用的 API。

    * 内容访问服务。
      com.ibm.portal.portlet.service.contentaccess.ContentAccessService

      使 Portlet 能够访问 Internet,也使门户管理员能够集中管理此访问(例如,设置代理服务器和排除特定 Web 站点)。
    * Credential Vault。
      com.ibm.portal.portlet.service.credentialvault.CredentialVaultService

      为后端系统存储用户 ID 和密码,使其能够方便地为门户用户提供单点登录体验。本系列的“安全性和用户管理”部分将对此服务进行详细介绍。
    * 动态 UI 管理器。
      com.ibm.portal.portlet.service.dynamicui.DynamicUIManagementFactoryService

      启动动态 Portlet 和页面。更详细的内容请参考下一部分 (LINK)。
    * 任务管理器服务。
      com.ibm.portal.portlet.service.taskmanager.TaskManagerDelegateFactoryService 和
      com.ibm.portal.portlet.service.taskui.TaskUIManager

      使 Portlet 能够加入与 BPEL 相关的工作流。

下面的服务是 System Programming Interface (SPI),它们更为复杂,用于高级用例。

    * Puma 用户管理。
      com.ibm.portal.um.portletservice.PumaHome

      提供访问门户用户或用户组的概要。您可以查找、创建、修改和删除用户和用户组。本系列的“安全性和用户管理”部分将对此服务进行详细介绍。
    * Credential Vault 加密退出。
      com.ibm.portal.portlet.service.credentialvault.spi.EncryptionExit

      使您能够对存储的用户 ID 和密码进行加密。
    * 门户模型 SPI。
      com.ibm.portal.model

      授予门户当前导航和内容模型的读取权限。您可以编写为其他 Portlet 和页面提供导航链接的 Portlet。此编程接口将在关于动态的和上下文敏感的 Portlet 的文章中详细介绍。





回页首


组装各个部分:门户聚合

聚合是将页面上的 Portlet 生成的所有不同标记片段(包括主题和皮肤生成的全部附加标记)组装到一个页面中并发送回客户端的过程。

您可以通过主题和皮肤自定义聚合页面的外观(请参阅“构件:主题和皮肤”),并通过为新标记提供相应的主题和皮肤来增加对这些标记的支持。

自定义的另一方面是确定哪些 Portlet 为当前页面贡献了标记。这可以由门户管理员或可以创建页面并将 Portlet 放在这些页面上的门户最终用户来静态确定。另外,它也可以通过下一部分将要介绍的动态 UI 管理器来动态确定。门户管理员可以向其他门户管理员或门户最终用户委托自定义页面的访问权限。

为了向用户呈现页面,聚合需要确定该用户的当前页面,以及该页面上驻留着哪些资源。所有这些信息都存储在门户的拓扑模型中。该拓扑模型包含多种门户资源。这些资源可用于不同类型的模型中,包括内容模型、布局模型、导航模型和导航选择模型。除了导航选择模型外,所有这些模型都是树状模型。它们在树状层次结构中对信息进行排序,并且可以使用一般的树状模型方法来利用模型。

内容模型的元素可以是页面、标签或 URL。对于表示页面的每个内容节点,都有一个模型来表示该页面的布局(布局模型)。该模型保存描述页面布局和内容的布局节点(容器和 Portlet 窗口,有时也称为控件)。

导航模型表示一些元素,这些元素用于构建可能呈现给门户用户的导航。导航模型的元素是导航节点。每个这样的节点都可以引用一个内容节点。

当用户通过门户导航时,需要当前选择的导航节点来呈现当前页面。导航选择节点反映当前的选择。它通过导航模型表示一个路径定义列表,如图 5 所示。

图 5:门户聚合中涉及的不同模型
图 5:门户聚合中涉及的不同模型




回页首


动态 UI 管理

动态 UI 管理处理的是一种特殊用例:根据用户交互动态添加和删除动态页面和 Portlet(称为动态用户接口或动态 UI)。动态页面的布局是通过页面定义来定义的,页面定义是一个充当主副本的静态门户页面。由于它的动态特性,页面和 Portlet 并没有保留在门户数据库中,并且门户中的用户会话有一个最大生命周期。它们也可以在会话结束之前以编程方式关闭或由用户关闭。

您可以使用动态 UI 管理来:

    * 保持门户中的页面数和页面中的 Portlet 数最少以提高可用性。

      根据用户交互,可以只在需要时才显示页面和 Portlet,并在它们过时后将其删除。
    * 促进组件的重用。

      可以用当前的应用程序上下文来参数化单一的页面和 Portlet,以便它们与调用应用程序无缝集成。
    * 支持多页面应用程序。

      应用程序可以使用多个页面;例如使用多个页面来实现向导对话框。

页面和 Portlet 上下文传递的概念与动态 UI 管理紧密相关。您可以使用此机制来动态启动由当前应用程序上下文参数化的页面或 Portlet;因此,可以实现与创建动态 UI 的 Portlet 无缝集成。当动态页面启动时,动态 Portlet 将通过属性代理事件接收此动态 UI 上下文。动态 UI 编程模型与属性代理模型密切相关。

在后面的文章中将详细解释动态 UI 管理。




回页首


安全性

在大的范围内,WebSphere Portal 安全性是基于 WebSphere Application Server 提供的安全性功能的。在某些方面,WebSphere Portal 提供了一些附加服务来启用特定于门户的安全性扩展。

WebSphere Portal 安全性包括以下几个方面:

    * J2EE 授权

      WebSphere Portal Portlet 容器支持以编程方式实现的、遵循 J2EE 规范的 J2EE 授权。
    * Portal Access Control

      门户域中的访问控制没有基于 J2EE 授权模型,因为它不够强大,不足以成为可行的门户授权域解决方案。相反,它基于 Portal Access Control。有关 Portal Access Control 的更多信息以及如何使用它来优化您的门户性能,请参阅参考资料。
    * Credential Vault

      Credential Vault 是 WebSphere Portal 中的一个组件,Portlet 使用它来安全存储凭证信息,例如用户名/密码对。Credential Vault 公开了一个相应的 Portlet 服务(Portlet 使用它来读写凭证信息)和一个相应的服务提供程序接口(可以将其实现为与现有的凭证管理系统集成)。
    * 支持 Java 2 Security

      Java 2 Platform Security 是 WebSphere Application Server V5 最新引入的一个安全功能。此功能可以保护个人敏感操作(例如文件 I/O 或网络访问),这样代码需要被授予某种权限才允许实际执行这些操作。

关于安全性的进一步细节以及如何自定义缺省门户行为将在本系列的后续文章中介绍。




回页首


虚拟门户

WebSphere Portal 用于集成用户和管理、公共外观和标准化的应用程序编程模型。您可以将各种后端系统集成到公共用户体验中。然而,在有些情况下会有一些互不相关的用户群,并且您想为每个用户群提供与众不同的外观。每个社区都想利用自己的 WebSphere Portal 逻辑部分,而与其他社区相互独立。您希望有效地支持这些社区,而不用重复安装复杂的硬件和软件系统。

通过共享硬件和/或软件,以及启用多个称为虚拟门户 的逻辑门户,您可以避免在安装上占用太多的时间。如果最终用户的请求通过常规的完全安装的 WebSphere Portal 提供,或者通过在共享环境中定义的逻辑门户提供,则无法区分最终用户。通过减少并行安装数可以简化管理。在托管环境中这样共享硬件和/或软件是非常重要的;例如,在服务提供商向多个承租者提供门户服务时。虚拟门户有几个特征对编程模型有影响,下面将对此加以解释。

当在单个 WebSphere Portal 安装中公开多个虚拟门户时,有必要让每个逻辑门户公开自己的外观。这可以通过为每个逻辑门户创建并行根内容节点来实现。每个内容根及其子页面可以应用各自的主题和皮肤,而不会对并行树中的其他内容造成影响。最终用户不会注意到两个不同的内容节点实际上驻留在相同的 WebSphere Portal 物理安装中。

图 6 描述了三个虚拟门户的该内容层次结构。每个虚拟门户的内容根可以通过各自的 URL 访问。您也可以提供特定于虚拟门户的逻辑、错误、注销和自注册“页面”。为了实现此目的,需要允许使用自定义 Portlet 来代替当前“屏幕”。

图 6:虚拟门户内容层次结构
图 6:虚拟门户内容层次结构

在向门户发送请求时,URL 需要包含应该访问的虚拟门户。为此,需要应用友好的 URL 映射。每个虚拟门户都有引用其内容根的特定 URL 映射。该映射是在虚拟门户初始化过程中定义和创建的。虚拟门户的友好 URL 如下所示:

http://www.ibm.com:9081/wps/portal/aVirtualPortal


您可以随时在虚拟门户中创建到页面的其他 URL 映射,创建方法与在“常规” 5.0 Portal 安装中采用的方法完全一样。如果没有指定 URL 映射,则会将用户定向到“缺省”虚拟门户。该缺省门户是在安装 WebSphere Portal 的过程中创建的。对于使用无效 URL 映射的情况,也会将用户定向到该“缺省”虚拟门户。

基于使用的 URL 映射,WebSphere Portal 设置了一个内部虚拟门户上下文。用户的所有活动都是在该虚拟门户的上下文中执行的。根据当前的上下文,会对用户显示不同的内容。

我们需要隔离各个虚拟门户的内容但仍然允许共享应用程序,这一点在 WebSphere Portal 5.1 中已经通过一个新的概念解决了。根据 WebSphere Portal 资源的类型,可以通过下面的方式之一来限定范围。

    * 将范围限定在特定的虚拟主机上

      要使用这样的受限资源,就必须访问相关联的虚拟门户。这些资源对其他任何虚拟门户都是不可见的,也是不可访问的,因此不能够在虚拟门户之间共享。页面、Portlet 实体和搜索索引都是受限资源类型。这些资源类型的范围限定是由 WebSphere Portal 执行的。
    * 在一个安装的所有虚拟门户之间共享

      共享资源在整个 WebSphere Portal 安装中可用,因此可以被所有虚拟门户使用。Portlet 定义、Portlet 应用程序、Web 模块、URL 映射、WSRP 生产者、主题和皮肤都是共享资源类型。不过,您可以应用门户访问控制来限制某些虚拟门户使用这些共享资源。您可以只对选择的虚拟门户用户授予访问共享资源的权限。





回页首


对模型的影响

在开发应用程序时,请记住在虚拟门户之间并没有真正的应用程序隔离,因为整个安装共享一个公共门户。基本的 J2EE 概念(例如会话或 Web 应用程序)并没有虚拟门户这一概念。

Portlet 应用程序在多个虚拟门户之间共享相同的会话。从 Portlet 编程模型的角度来看,这与将相同的 Portlet 多次放在一个页面或不同页面上并无二致。在本文档的 Portlet 部分,我们解释了 Portlet 定义、Portlet 实体和 Portlet 窗口等不同自定义级别。当在应用程序范围的会话中存储数据时,可能存在这样的 Portlet:需要在 Portlet 定义和 Portlet 实体级别考虑此 Portlet 的几个实例;如果没有预防措施,这些不同的实例将会改写数据。

在 Portlet 定义级别,Portlet 可以向门户管理员提供一个首选项设置,可以使用该设置来区分这些不同的定义。然后,Portlet 可以使用此首选项属性来对每个 Portlet 定义的会话数据设置名称空间。例如,新闻 Portlet 可以提供名为 newsPortletInstance 的会话范围限定项,而管理员可以将第一个 Portlet 定义的该值设置为“EuropeanNews”(它指向欧洲新闻提供商),将第二个 Portlet 定义的该值设置为“USNews”(它指向美国新闻提供商)。

Portlet 窗口可以用于分离共享应用程序会话中的数据。这就允许 Portlet 在每次出现时都将自己的数据存储在应用程序会话作用域内,而不是与其他 J2EE 构件共享。

您可以将一个 Portlet 作为不同的 Web 应用程序多次部署。虽然每次部署的应用程序都在所有虚拟门户之间共享,但是门户管理员可以应用访问控制来将每个部署实例限制在特定的虚拟门户上。然后,虚拟门户可以使用自己的 Web 应用程序副本,并且具有更高程度的隔离(例如将会话数据分开)。




回页首


Portlet 应用程序示例

既然我们已经介绍了 WebSphere Portal 编程模型的各个方面,现在我们就该动手实践一下。在本系列的这一部分,我们将从一个严格基于标准的日历 Portlet 应用程序入手。在后续文章中,我们将用 WebSphere Portal 扩展(例如 Portlet 间通信)来对此示例进行扩展。

该日历 Portlet 应用程序由两个 Portlet 组成:一个日历 Portlet(它显示特定月份,用户可以从中选择一个日期)和一个显示 Portlet(它呈现日历 Portlet 中选定日期的日程安排)。日历 Portlet 和显示 Portlet 通过 Portlet 应用程序会话共享数据。图 7 描述了该示例的运行情况。

图 7. 用选定日期 (12/12) 和日程安排 Portlet 中的日程安排列表来运行日历示例
图 7:运行日历示例

在 Portlets and Apache Portals 的第 3.2 部分中用完整代码对该示例(您可以下载)进行了详细解释。请参阅参考资料以获得该参考资料和其他资料,它们可以指导您使用 Rational Application Developer 创建 Portlet 以及将其部署到 WebSphere Portal 中。




回页首


结束语

WebSphere Portal 编程模型由提供不同功能的几个编程构件组成,例如 Portlet、主题和皮肤,以及 Portlet 服务。WebSphere Portal 提供了许多自定义点,您可以使用这些自定义点来定制和扩展门户以满足您的特定需要。本系列的后续文章将带您更深入地了解新 V5.1.0.1 API 的使用。

在下一部分中,您将了解门户 URL 生成以及如何在您的主题中利用此功能。在另一部分,我们将向您介绍如何使 Portlet 更加动态,以及如何对当前用户上下文作出反应。另一篇文章将深入探讨安全性以及如何才能自定义 Credential Vault、登录/注销行为,以及在您的基础设施中实现单点登录。最后,我们将告诉您如何创建自己的 Portlet 服务。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics