适于 IBM Lotus Domino 开发人员的 IBM WebSphere portlet 开发

本文将以构建自己的 portlet 为例,从设计技术和开发步骤两个方面在 IBM Lotus Domino 和 IBM WebSphere Portal 之间进行比较。本文还将介绍如何使用 IBM Rational Application Developer for WebSphere Software 以获得更大的自由和灵活性。

IBM WebSphere Portal 附带了大量有用的 portlet,用于外部连接、集成和 Internet/intranet 工具。但是有时这些附带的 portlet 并不能提供您所需要的功能,此时就必须构建自己的 portlet。通过对 IBM Lotus Domino 和 IBM WebSphere Portal 的设计技术进行比较,本文将帮助有经验的 Lotus Domino 开发人员着手开发 portlet,用于 WebSphere Portal 或任何其他的 Java Specification Request (JSR) 168 兼容的 Java 2 Platform, Enterprise Edition (J2EE) 门户。

本文的目标读者是精通 Lotus Domino 且希望使用 IBM Rational Application Developer for WebSphere Software 创建 portlet 的经验丰富的 IBM Lotus Domino 开发人员。因为由于涉及关系数据库的 Java 项目较为复杂,所以建议您在开始开发客户机之前阅读一下关于数据库、JavaServer Faces (JSF) 和 portlet 的一些资料。我们期望您拥有使用 Lotus Domino 技术的经验和知识并熟悉 Java 语言。还期望您了解 Rational Application Developer 中的用户界面。假设您在 Rational Application Developer 中创建了一个 JSR 168 JSF-enabled portlet 项目并且已转换到 Web 透视图。您的屏幕显示应类似于图 1 所示。


图 1. 新创建的 JSR 168 JSF-enabled portlet
新创建的 JSR 168 JSF-enabled portlet

 

比较 IBM Lotus Domino 和 IBM WebSphere 软件中的性能

在 Rational Application Developer 中进行面向 WebSphere Portal 的开发不如在 Lotus Domino 环境中快。例如,在生产中,您无法更正一些拼写小错误、更改颜色或其他任何在 Lotus Domino 中本可以实现的快速修复。并且一些操作确实很费时间。例如,Domino 视图列中广泛使用的 “Display values as icons” 功能是一种快捷的方法,可在用户使用应用程序时为其提供良好体验,但是在 portlet 中开发一个类似的功能则很费时间。

另一方面,IBM WebSphere Portal 支持 JSF,后者具有一些很好的特性。例如,JSF 的数据表组件允许您直接从数据源或任意 Java 对象列表创建类似于 Lotus Domino 的嵌入式视图的程序。在 Lotus Domino 中开发应用程序来连接到第三方数据源并从中检索数据很费时间,因为它涉及了代理、表单和视图。另外,虽然 Lotus Domino 嵌入式视图难于将内容和显示分开,但 JSF 组件的本质却使其很难将显示和内容混淆,从而得到一个好得多的架构。

在 Java 环境的代理中执行排序和过滤代价高昂,而 Lotus Domino 开发人员常常更愿意创建另一个视图或文件夹,因此服务器可在后台对数据进行排序。但是,这可能导致沉重的服务器负载以及在索引器任务不能持续的时候导致不可预知的突发事件。另一方面,使用 Java Database Connectivity (JDBC) 可很快地连接到 WebSphere Portal 中的关系数据库,并且 SQL 的本质让您可编写带有不同排序和过滤的 SQL 查询,没有任何可见的耗费。更不用说完全内置的 Web 服务支持使 WebSphere Portal 可以很好地适应 Service-Oriented Architecture (SOA) 应用程序。





回页首


从文档到关系数据库的转换

当有经验的 Lotus Domino 开发人员开始使用另一个平台时,他们最大的挑战是理解关系数据库与 Lotus Notes 数据库相比有什么异同。尽管本文的目的不是要详细地解释关系数据库如何运作,但做一个简短的概述还是适宜的。

理解关系数据库结构

一个结构良好的关系数据库拥有很多表,您可在关系中使用这些表来查找所需的数据。例如,我们来观察一个帐号经理注册表(参见表 1 和表 2)。CONTACTS 表保存了所有的个人信息,而 COMPANIES 表包含关于公司的信息。这两个表被关联(连接)了起来,因为 CONTACTS 表中的 COMPANY 列指向了 COMPANIES 表中的 IDX 列。


表 1. CONTACTS 表
IDXFIRSTNAMELASTNAMECOMPANY
0AdamAdamson2
1JoeSmith1
2WilliamJones2
3AndersAnderson1


表 2. COMPANIES 表
IDXCOMPANYNAMEPHONE NUMBER
0Acme Inc(555)123 456 7
1Dagerot AB(345) 875 578
2Citrus ltd(677) 6876 6876

可通过使用以下 SQL 查询检索一列包含 first name、last name 和 company name 的数据:

select firstname, lastname, company from contacts, companies
where contacts.company = companies.idx

在 Lotus Domino 应用程序中,更新两个表中的任意一个时,通常是通过将公司数据复制到用户文档中来达到实现这一目的,以便公司数据可列出在用户数据所在的同一视图中。或者,如果视图清单不重要,则在用户文档打开时执行一组 @DbLookup 命令,使一个视图不可能同时列出公司的详细信息和用户的详细信息。

为使此示例更加复杂,我们假设每个经理或用户可负责不止一个帐号。在这种情况下,可使用另一个表(Link Table)(参见表 3、4 和 5)。表 5 所示的 COMPANYMANAGER 表指定了经理和公司之间的关系。


表 3. MANAGER 表
IDXFIRSTNAMELASTNAME
0AdamAdamson
1JoeSmith
2WilliamJones
3AndersAnderson


表 4. COMPANY 表
IDXCOMPANYNAMEPHONENUMBER
0Acme Inc(555) 123 456 7
1Dagerot AB(345) 875 578
2Citrus ltd(677) 6876 6876


表 5. COMPANYMANAGER 表
MANAGERCOMPANY
00
01
12
22

假设您想要查明 Adam Adamson 运行的是哪一个帐号。可使用如清单 1 所示的 SQL 查询。


清单 1. 用于识别帐号的 SQL 查询
select c.companyname, m.firstname, m.lastname
from manager m
inner join companymanager cm on m.idx = cm.manager
inner join company c on c.idx = cm.company
where m.idx = 0

在 Lotus Domino 应用程序中查明此信息更加困难,因为其中不包含关系。您可能必须(依据预定的基础或由一个更改触发)使数据在经理文档和公司文档之间移动,而这迟早可能导致数据的不一致。





回页首


比较 Lotus Domino 和 WebSphere 应用程序中的设计元素

乍看之下,Domino Web 应用程序和 WebSphere 应用程序似乎很相似,因为它们都交付 HTML;但是,如果选择不与 JSF 结合使用,则相似之处就不存在了。另一方面,如果决定在应用程序中使用 JSF,则会发现在如何创建、配置和填充设计元素方面有一些相似之处。特别地,我们来考察一下 IBM WebSphere Combo Box 元素,该元素与 Lotus Domino 的 Dialog 列表类似。

驾驭动态数据

在 Lotus Domino 中,下拉字段被称作 Dialog 列表,而在 WebSphere 中,它被称作 Combo Box。在两个平台上,都可向列表中硬编码值。图 2 展示了 Lotus Domino 中 Dialog 列表的硬编码值和动态值的属性设置。


图 2. 在 Lotus Domino 中显示硬编码值和动态值
在 Lotus Domino 中显示硬编码值和动态值

 

当使用 JSR 168 portlet 时,JSF 提供了一个类似的解决方案,被称作 Combo Box。图 3 展示了如何配置 Combo Box 使值成为动态值。


图 3. 在 Rational Application Developer 中配置 Combo Box
在 Rational Application Developer 中配置 Combo Box

 

JSF 组件位于客户机右侧的 Palette 下面。Combo Box 组件位于 Faces Components 类别下面,如图4 所示。


图 4. 找到 Palette 面板上的 Combo Box
找到 Palette 面板上的 Combo Box

 

当涉及为 JSF 组件提供动态数据时,可使用大量不同的解决方案。可将组件直接连接到 Java Naming and Directory Interface (JNDI) 数据源,或者也可以从一个已管理的 bean 向它提供数据。bean 是一个 Java 类,用于帮助 JavaServer Pages (JSP) 文件与后端进行通信。清单 2 是一个简单 bean 的示例,用于保存一列值:


清单 2. 一个 bean 示例
package pagecode;
import java.util.ArrayList;
import java.util.List;
public class Items {

 private List items = new ArrayList();
 
 public Items() {
  this.getItems().add("My first value");
  this.getItems().add("My second value");
 }

 public List getItems() {
 
  return items;
 }

 public void setItems(List items) {
  this.items = items;
 }
}

上面的代码指明了在初始化 bean 时添加 items。在现实世界中,该信息是从数据库、Web 服务或类似位置加载的。

为了让 Combo Box 使用此 bean,需要对 bean 进行管理。在底部左侧区域的 Page Data 面板中执行该操作;在 Scripting Variable 列表中,右击 sessionScope 选项,然后选择 new - JavaBean。

配置已管理的 bean 后,必须将其添加到正在使用的 JSP 文件中。将 bean 从 Page Data 面板拖动到编辑器中的 JSP 页面。现在就可以半自动地将 bean 数据绑定到 Combo Box 上,方法是选择 Combo Box 并右击 Page Data 中的 items bean,如图 5 所示。


图 5. 将已管理的 bean 添加到 JSP 文件中
将已管理的 bean 添加到 JSP 文件中

 

如图 5 所示,还可以直接从已管理的 bean 填充表。为此,只需将已管理的 bean 拖动到 JSP 页面,即可出现如图 6 所示的向导。


图 6. 使用向导添加数据到 JSP 页面
使用向导添加数据到 JSP 页面

 

如果 bean 属于更复杂的类型 —— 比如,如果使用具有很多属性的复杂类型类填充列表 —— 则此向导将让您选择希望显示的列。这与在 Lotus Domino 中将视图嵌入到表单中类似,但是它提供了更高的灵活性。





回页首


预览和测试运行

使用 IBM Lotus Domino Designer 的优点之一是:只使用一个安装的客户机即可完成几乎所有的开发工作。许多应用程序在交付生产之前无需托管在登台服务器上。Lotus Domino Designer 及其预览功能将所有的测试和调试需求处理得很好。Rational Application Developer 在初次安装时并不完整。必须在它上面安装测试服务器。执行该操作时,整个门户框架在本地运行,并且可在近似生产状态的环境中测试应用程序。(请参阅参考资料部分中引用的一篇介绍如何安装测试环境的文章。)

在 Lotus Domino Designer 中开发页面或其他设计元素时,可在 Web 浏览器或 Notes 客户机中打开指定的设计元素。

Rational Application Developer 为您提供了更多的方法以查看 JSP 文件的外观。您可在 WYSIWYG Design 模式下使用它,该模式产生与实际结果相近的效果,或者选择在 Source 模式下使用它,该模式显示所有的标记并向您提供 100% 的控制权。但是,最佳选择是 Preview 模式,该模式构建在编辑器内,可显示与生产中的 JSP 一样的外观。图 7 展示了 Rational Application Developer 提供的三种设计模式的一个大致的、并稍微做了一点处理的概括。


图 7. Rational Application Developer for WebSphere Software 的三种设计模式
Rational Application Developer for WebSphere Software 的三种设计模式





回页首


运行逻辑

在 Lotus Domino Designer 中,在默认的浏览器中选择 Preview 时,将启动整个应用程序,您可在整个应用程序中随意单击。所有的代理(如任何 WebQueryOpen 和 WebQuerySave 代理)都将被执行。惟一没有装配好的是 access control list (ACL)。

在 Rational Application Developer 中要完成与 Lotus Domino Designer 中同样完整的测试和调试功能,必须将整个 portlet 部署到计算机上安装的测试服务器上。要完成此操作,请在 Project Explorer 面板中右击项目并选择 Run - Run on Server。

接着会弹出一个对话框,可在该对话框中选择要将 portlet 部署到哪一个服务器上。在大多数情况下,总是选择本地安装的测试服务器。细节如图 8 所示。


图 8. 选择服务器
选择服务器

 

只需选择正确的服务器实例并单击 Finish 启动 portlet 测试环境即可。





回页首


调试

一个像 Rational Application Developer for WebSphere Software 这样的成熟的、纯 Java 开发的客户机在调试方面表现优异。只需通过选择 Window - Open Perspective - Other 并选择 Debug 来打开 Debug 透视图即可。Rational Application Developer 环境的外观类似于图 9 所示的内容。


图 9. 导航到 Debug 透视图
导航到 Debug 透视图





回页首


结束语

IBM Lotus Domino 仍然是一种快速的应用程序开发环境,但是 Rational Application Developer 则提供了更多的自由和灵活性,使您可以集中精力解决用户和业务问题,而不必再去尝试使用 Notes 数据库来创建关系数据库。我们希望本文能从 Lotus Domino 开发人员的角度出发,为您在 portlet 开发和在 WebSphere Portal 中创建 portlet 方面提供一些指导。

 
Portlet开发指南............................................................................................................................... 1 第一章节 入门介绍 ......................................................................................................................... 7 一、 Portlet简介 ............................................................................................................... 8 什么是Portal .................................................................................................................... 9 什么是Portlet ................................................................................................................... 9 什么是Portlet容器 .......................................................................................................... 9 三者关系 ......................................................................................................................... 10 版本兼容性 ..................................................................................................................... 10 JSR286的主要新特性 .................................................................................................... 10 与J2EE的版本对应 ....................................................................................................... 10 二、 Portlet与servlet的关系 ........................................................................................ 11 Portlet与servlet/jsp中的桥梁 ...................................................................................... 12 用servlet生命周期事件 ................................................................................................ 12 Servlet容器与Portlet容器之间的关系........................................................................ 12 三、 开发环境搭建 ......................................................................................................... 13 IBM WebSphere Portal环境搭建 ................................................................................... 13 Apache Pluto Portal环境搭建 ........................................................................................ 42 快速入门 ......................................................................................................................... 47 第二章节 独有概念 ....................................................................................................................... 54 四、 Portlet概念 ............................................................................................................. 55 Portlet定义 ..................................................................................................................... 55 PortletPortal页面中的一个区域 ............................................................................. 55 Portlet和Web框架 ....................................................................................................... 56 五、 Portlet URLs ............................................................................................................. 57 BaseURL 接口 ................................................................................................................. 57 包含Portlet Mode和 Window State信息 ................................................................... 58 Portlet URL安全性 ......................................................................................................... 58 总结 ................................................................................................................................. 58 六、 Portlet Modes .......................................................................................................... 60 查看 Portlet Mode ......................................................................................................... 60 编辑 Portlet Mode ......................................................................................................... 60 帮助 Portlet Mode ......................................................................................................... 60 自定义 Portlet Modes ................................................................................................... 60 受支持的 Portlet Modes................................................................................................ 61 七、 Window States ........................................................................................................ 62 正常 Window State ........................................................................................................ 62 最大化 Window State .................................................................................................... 62 最小化 Window State .................................................................................................... 62 自定义 Window States .................................................................................................. 62 支持的 Window State .................................................................................................... 62 八、 Portlet Preferences .................................................................................................. 63 PortletPreferences 接口 ................................................................................................ 63 Preference Attributes 范围 ............................................................................................ 63 Preference Attributes 定义 ............................................................................................ 64 第三章节 基础概念 ....................................................................................................................... 65 九、 Portlet生命周期接口 ............................................................................................. 66 Portlet 实例的数量 ........................................................................................................ 66 Portlet生命周期............................................................................................................. 66 Portlet 的个性化 ............................................................................................................ 67 Request请求处理 ........................................................................................................... 68 总结 ................................................................................................................................. 72 十、 Portlet Config .......................................................................................................... 73 初始化参数 ..................................................................................................................... 73 Portlet Resource Bundle .................................................................................................. 73 默认事件命名空间 ......................................................................................................... 74 公告展现参数 ................................................................................................................. 74 发布事件 ......................................................................................................................... 74 处理事件 ......................................................................................................................... 74 支持的国际化 ................................................................................................................. 74 支持的运行时选项 ......................................................................................................... 74 总结 ................................................................................................................................. 75 十一、 Portlet Context ................................................................................................ 76 Portlet Context范围 ....................................................................................................... 76 Portlet Context 功能 ...................................................................................................... 76 与 Servlet Context关系 ................................................................................................. 76 总结 ................................................................................................................................. 77 十二、 Portlet Requests .............................................................................................. 78 PortletRequest 接口 ...................................................................................................... 78 ClientDataRequest 接口 ................................................................................................. 82 ActionRequest 接口 ....................................................................................................... 82 ResourceRequest 接口 .................................................................................................. 82 EventRequest 接口 ........................................................................................................ 83 RenderRequest 接口 ...................................................................................................... 83 Request对象的时间范围 .............................................................................................. 83 总结 ................................................................................................................................. 83 十三、 Portlet Response ............................................................................................. 84 PortletResponse 接口 .................................................................................................... 84 StateAwareResponse 接口 ............................................................................................ 86 ActionResponse 接口 ..................................................................................................... 86 EventResponse 接口 ...................................................................................................... 86 MimeResponse 接口 ...................................................................................................... 87 RenderResponse 接口 ................................................................................................... 87 ResourceResponse 接口 ................................................................................................ 88 Response 对象的时间范围 ........................................................................................... 88 十四、 Sessions ........................................................................................................... 89 创建Session .................................................................................................................... 89 Session 范围 ................................................................................................................... 89 Session中设置属性 ........................................................................................................ 89 与Web Application HttpSession关系 ............................................................................ 89 写入Portlet Session ........................................................................................................ 90 Session Timeouts............................................................................................................. 91 最后访问时间 ................................................................................................................. 91 重要的 Session 语义 ..................................................................................................... 91 总结 ................................................................................................................................. 91 十五、 请求分发给 Servlets 和 JSPs ....................................................................... 92 获取 PortletRequestDispatcher ..................................................................................... 92 使用Dispatcher .............................................................................................................. 92 Include 方法 ................................................................................................................... 92 forward 方法 .................................................................................................................. 93 Servlet filters ................................................................................................................... 94 改变默认的Included Forwarded Session 范围 ............................................................ 94 总结 ................................................................................................................................. 94 十六、 Portlet 标签库 ................................................................................................ 95 defineObjects 标签 ........................................................................................................ 95 actionURL 标签 .............................................................................................................. 97 renderURL 标签 ............................................................................................................. 97 resourceURL标签 ........................................................................................................... 98 namespace标签 ............................................................................................................. 99 param标签 ..................................................................................................................... 99 总结 ................................................................................................................................. 99 十七、 Portlet 应用 .................................................................................................. 100 与Web Applications的关系 ........................................................................................ 100 与PortletContext的关系 ............................................................................................. 100 Portlet Application中的元素 ....................................................................................... 100 目录结构 ....................................................................................................................... 100 Portlet Application Classloader ..................................................................................... 100 Portlet Application 存档文件 ...................................................................................... 100 Portlet application 部署描述符 ................................................................................... 101 更新Portlet Application ............................................................................................... 101 十八、 打包和部署描述符 ....................................................................................... 102 Portlet和部署描述符 ................................................................................................... 102 打包 ............................................................................................................................... 102 Portlet部署描述符元素 ............................................................................................... 102 处理Portlet 部署描述符规则 ..................................................................................... 103 Portlet.xml中唯一的值 ................................................................................................ 103 第四章节 高级特性 ..................................................................................................................... 104 十九、 资源服务 ....................................................................................................... 105 ResourceServingPortlet 接口 ....................................................................................... 105 访问 Render 参数、 Portlet Mode、 Window State ............................................... 106 访问Request 和 Response Headers ........................................................................... 106 获取 HTTP 方法 .......................................................................................................... 107 访问Resource ID .......................................................................................................... 107 Resource URLs ............................................................................................................... 107 Generic Portlet 支持 .................................................................................................... 107 Ajax请求 ....................................................................................................................... 107 二十、 Portlet协作 ................................................................................................... 109 Public Render Parameters ............................................................................................. 109 Portlet Events ................................................................................................................ 110 Events传送复杂对象 ................................................................................................... 114 总结 ............................................................................................................................... 114 二十一、 Portlet Filter .................................................................................................. 116 什么是 Portlet filter ..................................................................................................... 116 主要概念 ....................................................................................................................... 117 总结 ............................................................................................................................... 119 第五章节 可选概念 ..................................................................................................................... 120 二十二、 缓存 ............................................................................................................... 121 缓存过期 ....................................................................................................................... 121 验证缓存 ....................................................................................................................... 121 总结 ............................................................................................................................... 122 二十三、 用户信息 ....................................................................................................... 123 定义用户属性 ............................................................................................................... 123 访问用户属性 ............................................................................................................... 123 重要注意事项 ............................................................................................................... 124 总结 ............................................................................................................................... 124 二十四、 安全性 ........................................................................................................... 125 介绍 ............................................................................................................................... 125 角色 ............................................................................................................................... 125 安全性代码开发 ........................................................................................................... 125 总结 ............................................................................................................................... 125 二十五、 Portal Context ................................................................................................ 126 二十六、 Portlet 容器运行时 ...................................................................................... 127 动态修改Portlet标题 .................................................................................................. 127 二十七、 使用注释的方法 ........................................................................................... 129 GenericPortlet Render Handling ................................................................................... 129 二十八、 Setting next possible Portlet Modes ............................................................. 130 二十九、 Struts2开发Portlet实例 ............................................................................. 131 三十、 Spring mvc开发Portlet实例 ....................................................................... 132 三十一、 附录 ............................................................................................................... 133 修改记录 ....................................................................................................................... 133 名词解释 ....................................................................................................................... 133 疑问 ............................................................................................................................... 134
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值