本文将以构建自己的 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
比较 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 表
IDX | FIRSTNAME | LASTNAME | COMPANY |
---|---|---|---|
0 | Adam | Adamson | 2 |
1 | Joe | Smith | 1 |
2 | William | Jones | 2 |
3 | Anders | Anderson | 1 |
表 2. COMPANIES 表
IDX | COMPANYNAME | PHONE NUMBER |
---|---|---|
0 | Acme Inc | (555)123 456 7 |
1 | Dagerot AB | (345) 875 578 |
2 | Citrus 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 表
IDX | FIRSTNAMELASTNAME |
---|---|
0 | AdamAdamson |
1 | JoeSmith |
2 | WilliamJones |
3 | AndersAnderson |
表 4. COMPANY 表
IDX | COMPANYNAMEPHONENUMBER |
---|---|
0 | Acme Inc(555) 123 456 7 |
1 | Dagerot AB(345) 875 578 |
2 | Citrus ltd(677) 6876 6876 |
表 5. COMPANYMANAGER 表
MANAGER | COMPANY |
---|---|
0 | 0 |
0 | 1 |
1 | 2 |
2 | 2 |
假设您想要查明 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 中显示硬编码值和动态值
当使用 JSR 168 portlet 时,JSF 提供了一个类似的解决方案,被称作 Combo Box。图 3 展示了如何配置 Combo Box 使值成为动态值。
图 3. 在 Rational Application Developer 中配置 Combo Box
JSF 组件位于客户机右侧的 Palette 下面。Combo Box 组件位于 Faces Components 类别下面,如图4 所示。
图 4. 找到 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 文件中
如图 5 所示,还可以直接从已管理的 bean 填充表。为此,只需将已管理的 bean 拖动到 JSP 页面,即可出现如图 6 所示的向导。
图 6. 使用向导添加数据到 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 的三种设计模式
|
在 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 透视图
|
IBM Lotus Domino 仍然是一种快速的应用程序开发环境,但是 Rational Application Developer 则提供了更多的自由和灵活性,使您可以集中精力解决用户和业务问题,而不必再去尝试使用 Notes 数据库来创建关系数据库。我们希望本文能从 Lotus Domino 开发人员的角度出发,为您在 portlet 开发和在 WebSphere Portal 中创建 portlet 方面提供一些指导。