如果无法找到 IBM Workplace Collaboration Services 应用程序中的故障,别担心,我们将展示如何使用 IBM Rational Application Developer for WebSphere Software v6.0 来调试这些故障。为了便于演示,我们将导入一个包含两个故障的示例应用程序,在 Workplace Collaboration Services 服务器上运行该应用程序,并使用 Rational Application Developer 查找和纠正这些故障。
本文的示例应用程序不是一个完全成熟的 Workplace Collaboration Services 组件。它只是一个简单的度量衡转换应用程序,但用它足以演示如何调试在 Workplace Collaboration Services 应用程序中运行的应用程序。Workplace Collaboration Services 组件的实际开发超出了本文的范围。
本文假设您熟悉 Workplace Collaboration Services 及其应用程序、Rational Application Developer 和 Java 编程。
设置
我们的示例应用程序是用 Collaborative Component Wizard for IBM Workplace Collaboration Services 应用程序开发的,现在可以从 IBM Workplace Software Development Kit (SDK) 中获得该应用程序。因此,需要正确地设置 Workplace Collaboration Services 服务器和 Rational Application Developer workspace,以便使用此示例应用程序。请参阅 developerWorks 中的文章 “为 IBM Workplace Collaboration Services 创建协作组件” 来设置您的工作空间。
将组件安装到 Workplace Collaboration Services 服务器之前,首先要在服务器上安装和配置 Workplace SDK 运行时文件,如果还没有完成这项工作,请参阅 Workplace SDK User's Guide 来获得安装和配置信息。该指南解释了如何在服务器上设置 Workplace SDK 运行时文件,这项工作只需要做一次即可。
为了调试运行在 Workplace Collaboration Service 中的应用程序,该服务器需要运行在调试模式下。要设置该模式,首先需要登录到 Workplace Collaboration Services 服务器的 Administrative Console。在导航树中展开 Servers 节点,单击 Application Servers,然后在主窗格中单击 WebSphere_Portal 服务器来修改其属性(参见图 1 )。
向下滚动该页面,直到您找到 Debugging Service 项,单击该项来设置用于调试服务的属性。在 Debugging Service 页面上,选择 Startup 选项来启动服务,并输入想要使用的端口(参见图 2)。如果要修改默认端口,请务必牢记它们,因为以后还需要使用它们。
如果对配置感到满意,则单击 OK 保存对主配置所做的更改,然后在继续前进之前重启服务器。
在 Rational Application Developer 中,利用项目交换 (project interchange) 功能导入本文附带的示例应用程序。操作过程如下:选择 File - Import - Project Interchange,然后选择 measureconverter.zip 文件,单击 Select All,最后单击 Finish 导入示例。如果操作正确,而且正确地配置了工作空间,那么在 Project Explorer 视图中应该能够看到这些项目,Project Explorer 视图类似于如图 3 (您可能需要展开相关组节点)。这里应该没有构建错误。
运行该应用程序
刚才导入的应用程序由一个单独的 portlet 项目和一些辅助的 J2EE 资源组成。它实现了一个简单的度量衡转换器,将英里转换成千米,将摄氏度转换成华氏度,等等。
要运行该应用程序,首先需要部署 portlet 使用的 J2EE 资源。要做到这一点,则需要从 MeasureConverterEAR 的上下文菜单中选择 Deploy 来准备部署 MeasureConverterEAR。
接下来,通过从 EAR 的上下文菜单中选择 Export - EAR 文件,将 Enterprise Archive (EAR) 文件传输到服务器。然后为这个 EAR 文件选择一个临时位置,并单击 Finish。
要部署该 EAR 文件,则需要登录到服务器的 Administrative Console,展开 Applications,并单击 New Application(参见图 4)。
单击 Browse 按钮,选择刚才导出的 EAR 文件并单击 Next。继续执行向导的指示,接受默认值,直到前进到 “步骤 3:将模块映射到应用服务器”。
在这个列表框中,选择包含 server=WebSphere_Portal 的项(参见图 5)。然后选择所有选项并单击 Apply。现在可以继续执行向导的指示,接受所有默认值。
在您安装了该应用程序之后,保存对 Master Configuration 的更改,然后在 Enterprise Application 列表中搜索 EAR 文件,选中它,并单击 Start 按钮。
现在 MeasureConverterEAR 已经成功部署到服务器上,您可以运行该 portlet 项目了。从 MeasureConverterPortlet 项目的上下文菜单中选择 Run - Run on Server。IBM Workplace Collaboration Services 运行在 WebSphere Portal 之上,因此请在第一个 Server Selection 向导中 输入主机名称,选择 “WebSphere Portal v5.0 Server Attach” 服务器类型,然后单击 Next(参见图 6)。
提示:选择 “Set server as project default” 选项,避免每次运行该项目时都看到这个对话框。
在下一个向导面板中输入 Workplace Collaboration Services 服务器和调试服务(前面已配置)使用的相关端口,并单击 Next。
提示:如果不修改用于调试服务的默认设置,那么此向导页面中的默认设置就是正确的。
在标题为 WebSphere Portal Setting 的向导面板中,修改在 Workplace Collaboration Services(参见图 7)中运行应用程序的默认值。首先,将基本 Uniform Resource Identifier (URI) 修改为 Workplace Collaboration Services 服务器的 URI(通常为 /lwp)。然后对 Default 页面和 Personalized 主页设置进行同样的修改(通常分别修改为 /workplace 和 /myworkplace)。最后,确保 Enable WebSphere 安全性选项已被选中。
接下来,在 WebSphere Portal Administrator 区域中输入管理员帐户的用户 ID 和口令。此信息将复制到 WebSphere Portal login 区域。如果想以用户身份而不是以管理员身份来运行 portlet,则请输入想要在这里使用的用户 ID 和口令。如果认为设置是正确的,则单击 Finish。
在单击 Finish 之后,portlet 就被部署到 Workplace Collaboration Services 服务器中,并且浏览器也被调用。可以导航到 PortletPreview 页面来查看 portlet。(因为 Workplace Collaboration Service 运行在调试模式下,所以它显然比平常慢很多)。
提示:如果编辑在 Portal 选项卡下创建的服务器配置,并将 Label Ordinal 字段设置为零,那么 PortletPreview 页面将是您打开的第一个页面。
如果一切顺利,那么您应该看到错误消息:“This portlet is unavailable. If the problem persists, please contact the portal administrator”。参见图 8。
|
调试应用程序
显然,我们所讨论的 portlet 中有一个错误,我们必须调试该错误。打开 MeasureConverterPortlet 项目中的 MeasureConverterPortletView.jsp 文件,切换到 Source 选项卡,并在第 8 行中插入一个断点:
PortletSession pSession = portletRequest.getPortletSession();
为了调试问题,首先必须连接到服务器。在 Servers 视图中,右击服务器并从菜单中选择 Debug。Rational Application Developer 将连接到远程 Workplace Collaboration Services 服务器,并切换到 Debug 视图。在浏览器中导航到 PortletPreview 页面。当服务器正在呈现该页面时,它应该能够找到您所设置的断点,并且控制权将传递给 Rational Application Developer 的 Java 调试器。使用这个调试器可以执行普通的单步执行,并进入到代码行 —— Java 和 JavaServer Pages (JSP) —— 检查和修改变量。
如果使用 F6 键来单步调试 JSP 的 Java 代码的每一行,那么应当看到是什么导致 portlet 不可用:
|
在这个代码片段中,getFormText() 方法返回 null,这意味着 formText.length() 将抛出一个 Null Pointer 异常。现在我们完成了对此错误的调试,然后可以通过再次右击 Servers 视图中的服务器并选择 Disconnect 来断开与远程服务器的连接。
为了解决导致异常的问题,请打开 MeasureConverterPortletSessionBean.java(可能需要切换回 J2EE 或 Web 视图来打开此文件)并将下列代码行:
private String formText = null ;
更改为:
private String formText = "" ;
保存更改,并通过右击 portletand 并选择 Run - Run On Server 来再次运行 portletand。在这里,portlet 应当能正确显示,但还有一个故障需要修复。如果输入 10 km 作为输入,它会被错误地标志为无效输入。
再次通过在 Servers 视图中的服务器的上下文菜单中选择 Debug 连接到服务器。如果仍然保留着先前的断点设置,那么会在同样的位置中断。如果没有中断,需要像先前一样再次设置断点。
再次分步调试 JSP 的 Java 代码,我们将看到输入被正确的检索为 10 km。进一步观察还可以发现, MeasureConverterDelegate 类正确地执行了转换,将 10 km 转换为 6.2 英里。
问题在下面这些 if-else 块中:
|
应该将其更改为:
|
此外,要断开与服务器的连接,修改并重新运行 portlet。这次代码应该能正确运行,不会发生故障(参见图 9)。
|
结束语
我们已经使用 IBM Rational Application Developer 的调试工具部署了 IBM Workplace Collaboration Services 应用程序并进行了调试。本文只是简要介绍了 Rational Application Developer 的调试功能,这些功能同时适用于 WebSphere Portal 和 Workplace Collaboration Services。虽然我们使用的是 Rational Application Developer,但您也可以以完全相同的方式使用 IBM Rational Software Architect。此外,本文中我们只在 JSP 中设置了断点,但同样也可以在 portlet 或 Enterprise Java Bean (EJB) 的 Java 代码中设置断点。
|
描述 | 名字 | 大小 | 下载方法 |
---|---|---|---|
Sample EAR file for this article | measureconverter.zip | 42KB | HTTP |