使用EclipseGanymede进行桌面、Web和移动设备开发,第2部分(一

第2部分: 采用Ganymede进行富客户机平台开发

Eclipse IDE 的 Ganymede 发行版包括 24 个独立项目,涵盖各种各样的技术。这些 项目大部分都十分成熟,而此发行版将提供对这些项目的增量改进。但是 Ganymede 还包 括把新技术引入到 Eclipse 平台中的许多新项目。在这个 “使用 Eclipse Ganymede 进 行桌面、Web 和移动设备开发” 三部分系列教程中,我们将介绍以下新 Ganymede 特性 :RCP、RAP 和 eRCP,这些特性将允许用一个通用代码库分别为桌面平台、Web 平台和移 动平台开发软件;使用 Subversion 进行版本控制;以及使用 p2 进行更新和安装。

开始之前

本教程适用于想要了解如何获得使用成熟的 Rich Client Platform(RCP)编写的代 码,并将其修改为使用新的 Rich Ajax Platform(RAP)在 Web 上实现富客户机体验的 所有 Eclipse 开发人员。您应当了解 Eclipse 平台并且熟悉一些 Rich Internet Application(RIA)理念。另外,您应当了解如何配置 servlet 容器并在其中部署应用 程序。

关于本系列

第 1 部分 将介绍 RCP 的新特性、新 Subversion Eclipse 集成以及 p2 打包和分发 系统。第 2 部分将引入 Rich Ajax Platform(RAP)来编写 Web 应用程序。第 3 部分 将讨论如何使用内置的 Rich Client Platform(eRCP)为移动设备开发应用程序。

关于本教程

Eclipse IDE 的 Ganymede 发行版将捆绑 Eclipse 旗下的 20 多个新项目和现有项目 。在这个共分三部分的系列教程的第 1 部分中,您了解了一些可以简化开发的新添特性 ,包括 Subversion 支持和名为 p2 的新插件分发模型。通过开发一个简单的备忘记事本 插件应用程序,然后将它存储在 Subversion 中并通过 p2 进行部署,您还看到了成熟的 Rich Client Platform(RCP)中的一些增量改进。

Ganymede 中添加的另一项令人兴奋的内容是 Rich Application Platform(RAP)。 RAP 用于构建富客户机应用程序 — 类似于为桌面应用程序开发的有状态 GUI 应用 程序 — 并将其部署以供在 Web 中使用。RAP 把 Eclipse 编程模型引入到 Web 中 ,允许在构建基于 RAP 的应用程序时重用大部分现有的 RCP 代码。这是使用 Ajax 完成 的,但是 Eclipse 可以让您轻松地利用使用 RCP 开发桌面应用程序的知识。为了演示, 您将把在 第 1 部分 中开发的备忘记事本修改为使用 RAP。

主题包括:

如何下载并把 RAP 环境安装到 Eclipse 中

如何把现有 RCP 代码迁移到 RAP 中

如何为 Web 构造代码

如何打包并把代码部署到 Web 服务器中

系统要求

Eclipse GanymedeEclipse Ganymede 位于 Eclipse Foundation。 Java 2 Standard Edition从 Sun Microsystems 可以获得 Java™ 2 Standard Edition V5 或更高版本。Eclipse RAP在 Eclipse.org 的 Eclipse Foundation RAP 部 分 可以获得 Eclipse RAP 插件。Apache Tomcat为了把已完成的 RAP 应用程序部署到独 立的 servlet 容器中,本教程将使用 Apache Tomcat。请下载最新稳定版本。

开始使用 RAP

在开始用 RAP 进行开发前,必须先从 Eclipse Web 站点下载并 设置目标平台才能使用它。

用 RAP 进行开发

RAP 允许使用 Eclipse 开发 模型构建启用 Ajax 的 Web 应用程序。如果您已经熟悉如何用 Eclipse RCP 开发桌面应 用程序,则已经具备了 RAP 开发技术。实际上,为 RCP 应用程序编写的大部分代码可以 在 RAP 应用程序中重用。这意味着您可以充分利用 Java 技术和 Eclipse API 的功能来 开发基于 Web 的应用程序。然后,您的用户将体验到一个无需刷新页面的完整的 GUI 应 用程序,就像一个典型的 Web 应用程序一样,但是用户不必在他们的台式机中下载并安 装您的应用程序。RAP 通过提供一个特殊的标准部件工具包(Standard Widget Toolkit ,SWT)、JFace 和 Workbench 等的实现(实际上是 RCP 的子集)做到了这一点。

由于 RCP 和 RAP 的基本架构类似(参见图 1),因此在源代码中进行极少的更 改就可以实现插件重用。同在桌面环境中执行 RCP 应用程序的方法一样,通过标准浏览 器可以访问 RAP 应用程序。这是由 RAP Widget Toolkit(RWT)实现的,这是 RCP 中使 用的 SWT 的替代品。

浏览器端部件呈现是用 qooxdoo Ajax 库完成的。qooxdoo 一个功能完善的 Ajax 框架,它利用了面向对象的 JavaScript,使用户可以构建跨浏览 器应用程序。RAP 抽象出了关于 JavaScript. 的详细信息,允许您使用 Java API 构建 Rich Internet Application(RIA)。自定义部件开发人员需要具备 JavaScript、 qooxdoo 和 RAP 知识。客户端开发允许嵌入诸如其他 JavaScript. 框架、Flash 和 applet 之类的客户端技术。

图 1. 比较 RAP 和 RCP 的架构

下载 RAP

由于 RAP 是 RCP 子集,因此它不能与 RCP 在同一个 Eclipse 实例中共存; 必须单独下载并安装 Eclipse 的 RAP 环境。

将浏览器指向 www.eclipse.org/rap/downloads(参见图 2)。

注:如果想要把 RCP 源代码迁 移到 RAP 中,则建议为 RAP 下载目标平台。这样可以针对目标 RAP 代码编译和运行现 有 RCP 代码。如果倾向于使用 RAP 开发新 Web 应用程序并且需要拥有开发平台,则建 议通过 p2 更新机制获得 RAP SDK,这种方法已经在 第 1 部分 中介绍过。

图 2. Eclipse RAP 主页

选择 文件名中带有 “target platform” 的 V1.1rRelease,然后选择适当的镜像 。

图 3. Eclipse RAP 下载页面

将 ZIP 文件下载到本地硬盘驱动器的一个临时目录中,即 Eclipse 安装可以访问的位置。 传输完成后,把它解压缩到临时目录中。打开 Eclipse Ganymede 实例,并确保工作空间 指向保存第 1 部分的备忘记事本项目所在的位置,然后把 Eclipse 桌面打开到插件开发 透视图。打开 Eclipse 的 Preferences 面板。如何完成此操作取决于您的操作系统 — 例如,对于 Windows®,操作为 Window > Preferences(参见图 4); 对于 Mac OS X,操作为 Eclipse > Preferences。浏览到 Plug-in Development > Target Platform。

图 4. 指定目标平台

将 location 框的值改为解压缩下载文件使用的目录,然后单击 Reload。

图 5. 把目标平台设为 RAP

此操作将载入与 RAP 有关的插件并把目标平台从 RCP 切换为 RAP。您现在可以开始 修改备忘记事本,从而使用 RAP,详见下一节。

从 RCP 迁移到 RAP

让我们继续看一看如何将备忘记事本示例从 RCP 迁移到 RAP。在此过程中,感觉一下 两个环境之间的一些差异。

通过错误发现差异

您可能会注意到虽然已经切换了目标平台,但是 Eclipse 指出备忘记事本代码中存在 错误。

图 6. 切换到 RAP 后备忘记事本出现编译器错误

导致这种情况的一个原因是由于现有项目照道理应该使用 RCP,但是通过切换目标, 您的构建路径中现在缺少可以解析备忘记事本使用的一些元素的插件。其中一些插件在 RAP 中有对应的等效插件,而另一些没有。因此您还必须完成一些小修改才能通过编译。 此过程可以让您洞察 RCP 与 RAP 之间的一些差异。

在 Dependencies 窗口中,高亮显示 org.eclipse.ui 并单击 Remove 将其从必备插 件列表中删除。

图 7. 删除不需要的插件

在同样的位置中,添加 RAP 中的等效插件。单击 Add 并选择 org.eclipse.rap.ui。

图 8. 把 RAP 插件添加到项目中

您将看到仅此一项操作就可以解决许多编译错误。让我们逐个查看其余的错误。首先 ,编辑 PersonalTaskViewer.java。

图 9. 编辑 PersonalTaskViewer.java 产生的错误

在 RCP 中,用默认的 no-args 构造函数可以创建 shell,但是 RAP 需要您在创建时 显式指定不需要向 shell 中添加任何样式或显示。将代码行 Shell shell = new Shell (); 改为 Shell shell = new Shell(SWT.NONE);。然后转到 PersonalTaskViewer.java 中的下一个错误。

图 10. 删除 SWT.HIDE_SELECTION 属性

SWT.HIDE_SELECTION 不存在于 RAP 的 SWT 实现中,因此只需删除该引用。RAP 的 JFace 实现不支持 CellEdiTors,因此必须删除对 CellEdiTor 的所有引用。只需在代码 中搜索并删除这些引用,例如在 createTableViewer 类中。

清单 1. 修改后没有 CellEdiTor 引用的 createTableViewer 类

/**  * Create the TableViewer  */private void createTableViewer() {   tableViewer = new TableViewer(table);   tableViewer.setUseHashlookup(true);   tableViewer.setColumnProperties(columnNames);   tableViewer.setSorter(new PersonalTaskSorter (PersonalTaskSorter.TASK_DESC));   }

由于不再有 CellEdiTor,因此可以删除 TaskCellModifer 类。转到 Package Explorer,然后删除 TaskCellModifier.java。

图 11. 删除 TaskCellModifier 类

在实现清单 1 和图 11 中的更改后,应当可以解决编译错误。下面总结了将 RCP 代 码迁移到 RAP 这一过程中所作的更改:

组织 RAP 应用程序插件依赖关系。

查找编译错误并用兼容的 API、常量等更正这些编译错误。

修改或删除 RAP 中目前不支持的功能(例如,CellEdiTors)。

定义入口点

RAP 启用应用程序的方式不同于 RCP。RCP 将使用 IApplication 接口的实现;RAP 中的等效接口称为 IEntryPoint。如名称所示,RAP 将识别可以启动应用程序的点,并且 一个应用程序可以有多个入口点(每个入口点都是通过惟一标识符来辨别的,这些标识符 都是作为用于启动应用程序的 URL 中的参数传递的 — 例如, :/rap?startup=)。

EntryPoint 表示 RAP 应用程序的主入口点。它可以与 SWT 应用程序中的 main() 方 法相比。EntryPoint 将在 WorkbenchAdvisor、Initial Perspective 和 ApplicationActionBarAdvisor 的辅助下创建 UI。

通过打开 plugin.xml 并选择 Extensions 选项卡(参见图 12),定义备忘记事本的 EntryPoint。入口点是作为扩展点添加到应用程序中的。Extensions 选项卡将显示此插 件通过工作空间或目标平台中的其他插件增加的扩展列表。因此,可以把此扩展视为其他 插件所提供的接口的实现。

图 12. 为 RAP 应用程序添加 EntryPoint

单击 Add 以查看扩展点列表并查找 org.eclipse.rap.ui.entrypoint。

图 13. 选择 EntryPoint 扩展

单击 Finish,然后您将看到 plugin.xml 中列出了 Extension Point Details。

图 14. 设置 EntryPoint 属性

该类属性要求项目中实现 IEntryPoint 接口的 Java 类。您可以在 plugin.xml 编辑 器屏幕中创建一个这样的 Java 类。把字段中的默认类名重命名为 POEntryPoint 并单击 class 的超级链接。Eclipse 将打开 New Java Class 向导。

图 15. 通过 New Java Class 向导创建 IEntryPoint 实现

该类向导将创建实现 IEntryPoint 的 POEntryPoint 类。该类将定义 RAP 应用程序 的基本生命周期。单击 Finish 并编辑文件以查看其中包含的内容。

清单 2. IEntryPoint 实现

package com.devworks.tuTorial.po;import org.eclipse.rwt.lifecycle.IEntryPoint;import org.eclipse.swt.widgets.Display;import org.eclipse.ui.PlatformUI;import org.eclipse.ui.application.WorkbenchAdvisor;public class POEntryPoint implements IEntryPoint {   public POEntryPoint() {   }   public int createUI() {     Display display = PlatformUI.createDisplay();     WorkbenchAdvisor advisor = new ApplicationWorkbenchAdvisor ();     return PlatformUI.createAndRunWorkbench(display,  advisor);   }}

如名称所示,createUI() 方法负责创建显示和 WorkbenchAdvisor,并将这些内容传 递给 Workbench 来运行。

创建启动配置

要从 Eclipse 内启动应用程序,需要定义启动配置以告诉 Eclipse 要在哪种环境中 运行。您可以在每次想要运行它时手动完成此操作,但是更方便的方法是创建启动配置并 将其随项目一起保存以供以后重用。

使用 Package Explorer,在 com.devworks.tuTorial.po 下直接创建名为 launch 的 目录。

图 16. 创建 launch 目录

在菜单栏中,选择 Run > Run Configuration 并选择 OSGi 框架。命名为 PO_RAP_OSGI(参见图 17)。Equinox 的 OSGi 框架组件是符合 OSGi 核心框架 R4 规范 的完整实现。此外,OSGi 框架将生成启动程序、引导结构和帮助在最终用户生产场景中 使用 Equinox OSGi 的应用程序模型。由于 RAP 使用 OSGi 作为服务器端框架,因此需 要用 OSGi 框架启动应用程序以确保该应用程序运行正常。

注:既可以用 OSGi Launcher 也可以用 RAP Launcher 启动和测试该应用程序。RAP Launcher 基于 OSGI Launcher,并且添加了 Main 选项卡。通过 OSGi Launcher 在 Equinox 上运行应用程序将确保它也将通过 Equinox 在 servlet 容器中运行,这是我们 在本教程中这样做的原因。

图 17. 创建启动配置

心有多大,舞台就有多大

使用EclipseGanymede进行桌面、Web和移动设备开发,第2部分(一

相关文章:

你感兴趣的文章:

标签云: