评论专栏: Stefan Hepper:为什么应提前了解 Java Portlet Specification V2.0

由于标准或产品的第一个版本通常注重于基本用例,在功能上存在一些限制,支持该规范的产品最终要添加一些扩展才能支持更高级别的用例。目前正在开发 Java™ Portlet Specification (JSR 286) 第二版,该版本将提供标准的解决方案和互操作性,以适应最高级别的用例。本文评论正在制订的规范并提供相应的反馈,以确保能够考虑到您的特定需求。

Stefan Hepper, WebSphere Portal 编程模型架构师, EMC

Stefan Hepper 是负责 WebSphere Portal、Workplace Client 和服务器编程模型以及公共 API 的架构师。他是 Java Portlet Specification V 1.0 (JSR 168) 的负责人之一,目前负责 V 2.0 (JSR 286) 的工作。Stefan 发起了 Apache Pluto 项目,该项目为 JSR 168 提供了参考实现。他曾在各种国际会议(如 JavaOne)发表演讲,曾发表了多篇论文,并且是《Pervasive Computing》(Addison-Wesley,2001 年)和《Portlets and Apache Portals》(下载手稿,Manning,2005 年)的合著者。Stefan 毕业于德国卡尔斯鲁厄大学计算机科学专业。他于 1998 年加入 IBM Boeblingen Development Laboratory。



2006 年 11 月 06 日

摘自 IBM WebSphere 开发者技术期刊

Java Portlet Specification 的第一个版本称为 JSR 168,于 2003 年完成,目前在业界受到广泛支持,而且它由开放源码支持。标准和产品的第一个版本存在一定的缺陷,仅支持最基本的用例,在功能上有一些限制。而且 Java Portlet Specification V1.0 也存在这种情况,因此,经过三年之后,大多数支持 Java Portlet Specification V1.0 的门户产品都提供一些附加扩展,以支持更高级的用例。于是,在 2005 年 11 月开始了 Java Portlet Specification V2.0(称为 JSR 286)的开发,以适应业界发展,并提供适应于最高级别用例的标准解决方案,从而为这些高级功能提供互操作性。尽管这一新的规范并未定案,但现在也值得对它熟悉一下。

为什么要了解一个规范的前期草案?

JSR 286 的第一个前期草案于今年八月份由 JSR 286 专家团队发布,涵盖最常见的功能。包含所有功能的第二个前期公共草案即将在年底发布。如果这不是该规范的最终版本,那么为什么要了解该 JSR 286 的前期草案?

为了提供反馈。

对前期草案提供反馈意见,可以使专家团队有机会真正地评估该规范并更改规范中的相应内容。因为在前期草案中,大多数功能通常没有完全实现和测试,所以,与后期审查阶段相比,更改起来也比较容易,如果在审查阶段再做出决定,则结果常常会延迟规范的交付计划,或者从该版本中完全删除相应的功能。因此,前期公共草案可让更广泛的团体来影响 JSR,而不是仅由专家团队作出决定。这相当重要,因为由 30 多位成员组成的专家团队对完善该规范毕竟非常有限。

与把每个对 JSR 感兴趣的人都接受为专家团队的成员相比,我认为人数相对较少的专家团队(由 20 至 30 位来自各领域的专家组成)加上若干个前期公共草案(介绍一些新功能,即使它们没有完全定案)可以提供更快更好的标准。

于是在这里为您提供机会,对 Java Portlet Specification 的第一个前期草案提出反馈意见。


前期草案的内容是什么?

Java Portlet Specification V2.0 的第一个前期草案包含 V1.0 中所有没有的最常见功能,例如 Portlet 之间的协作、服务资源、Portlet 过滤器或 AJAX 支持。与 V1.0 类似,V2.0 也将基于 J2EE 1.4,因此可让 Portlet 使用 J2EE 1.4 增强(如 JSP 2.0)。下面是该新规范的一些主要功能。

WSRP 2.0

该规范的这一版本的主要目标与 WSRP 2.0 一致,后者目前也处于开发阶段。与 Java Portlet Specification 1.0 和 WSRP 1.0 相同,其目标也是能够发布远程 Java Portlet 和创建代理 Java Portlet,以便将 WSRP 远程 Portlet 代理到 J2EE 门户;例如,即使您的 Portlet 在远程运行,也能够向本地运行的 Portlet 发送事件,还可以从中接收事件。

协作

JSR 286 引入了三种不同的协作概念,为从不同的 Portlet 应用程序使用 Portlet 创建组合应用程序提供了便利。

  • 事件——用于发送和接收事件。

    JSR 286 定义的事件模型是一种松耦合的代理事件模型。在此模型中,Portlet 定义它可以接收以及可以在 Portlet 部署描述符中公布的事件。在运行时,门户管理员(或业务用户)可以将不同的 Portlet 连接在一起。

  • 共享呈现参数——用于在 Portlet 之间共享呈现参数,从而创建一个页面上下文。

    共享呈现参数在 portlet.xml 文件中声明。如果这些参数不是空值,Portlet 将自动接收它们。与非共享呈现参数相比,如果应该更改值,Portlet 仅需要设置共享呈现参数。从 API 角度看,可以将共享呈现参数视为常规呈现参数,因此可以使用呈现参数方法访问。

  • 共享会话属性——用于共享当前 Web 应用程序之外的会话数据。

    JSR 286 提供了可以在 Web 应用程序之间共享的共享会话属性。在 portlet.xml 文件中,您可以定义可声明共享的属性,然后使用现有的 Portlet 会话 API 和应用程序会话范围在 Web 应用程序之间共享此属性。

资源服务

在 JSR 168 中,Portlet 服务于资源的方法只有两种:或者直接链接到资源,或者通过 Servlet 服务于资源。尽管直接链接对于所有 Portlet 状态都相同的静态资源非常有效,但对于其他用例效果却不太好,因为需要考虑来自 Portlet 上下文的信息。这样的示例包括基于 Portlet 模式、窗口状态、当前呈现参数或 Portlet 首选项呈现不同资源。

直接通过 Portlet 呈现资源的另一优势是,在这种情况下可以通过门户访问资源,因此可以通过门户访问控制对这些资源提供保护。当然,这也带来了额外门户请求的开销,加重了门户服务器的负载。

为了通过 Portlet 支持资源呈现用例,JSR 286 引入了一个新的具有 serveResource 方法的可选生命周期接口(称为 ResourceServingPortlet),该接口可以由 ResourceURL 触发,Portlet 可以通过 PortletResponse.createResourceURL 方法创建它。资源 URL 包含当前 Portlet 的瞬时状态(Portlet 模式、窗口状态和呈现参数),但不能为此状态设置新值。资源 URL 可以有在资源 URL 上设置的其他资源参数。

资源服务生命周期接口还支持异步呈现标记片段,无需使用标准 XMLHttpRequest 与门户协作,因此支持 Portlet 的某些基本 AJAX 用例。Portlet 可以利用 Portlet 上下文中的所有信息,例如 Portlet 模式、窗口状态、呈现参数或 Portlet 首选项。它的局限性是,在这样的调用中,您无法更改前面提到的任何状态。

Portlet 窗口

Portlet 窗口在 Java Portlet Specification 的第一个版本中仅间接地得到反映,并作为容器为 Portlet 范围的会话条目生成的前缀的一部分。2.0 版规范现在使该 Portlet 窗口 ID 可通过请求供 Portlet 使用,因此 Portlet 可以将此 ID 用于它要存储的关键数据。

它支持的一个常见用例是在 Portlet 中缓存数据;例如,从慢速后端系统检索的数据,而且与各种 Portlet 窗口不同。使用 Portlet 窗口 ID,Portlet 现在可以在缓存系统中缓存由应用程序服务器或其他缓存系统提供的此类数据。

Portlet 过滤器

Portlet 过滤器可以放置在 V2.0 规范提供的任何生命周期方法调用的前面(processAction、processEvent、呈现、serveResource),而且还支持这些生命周期方法使用包装的请求和响应。与 Servlet 过滤器类似,Portlet 过滤器需要在 portlet.xml 部署描述符中进行定义。


下一步是什么?

即使您无法在审查期限结束之前查看第一个前期草案和提供反馈意见,仍可以关注第二个前期草案的发布。对于第二个前期草案的审查,需要考虑的其他功能包括:进一步的 AJAX 支持、基于验证的缓存,请求调度程序包括来自所有生命周期的调用等。

对希望在 V2.0 中看到的功能以及对当前功能提供的反馈意见可以帮助专家团队将对您最有用的功能添加到规范中。我们期待您的反馈!

参考资料

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere
ArticleID=172648
ArticleTitle=评论专栏: Stefan Hepper:为什么应提前了解 Java Portlet Specification V2.0
publish-date=11062006