Eclipse 体系结构综述(二)

 

二、基于Eclipse RCP的应用开发

Eclipse Rich Client Platform (RCP)是基于Eclipse项目的一个开发富客户端应用程序的框架,旨在提供一种快速开发的,功能强大的,可扩展的应用平台。在需求变化异常频繁的今天,企业级的客户端应用程序必须具有组件化,跨平台,本地观感,可伸缩性强,方便更新等特性。如果开发团队从头开始开发一个企业级的客户端应用,那么他们需要具有优秀的开发技术和丰富的开发经验来设计并实现所有这些特性,但是并不是所有的开发团队都具有这样的能力。幸运的是Eclipse RCP 提供了一个满足所有这些特性的基础平台,Eclipse RCP 基于Eclipse 的插件体系构架使开发团队可以很快的基于这个平台开发自己的客户端应用,在开发过程中,开发团队只需要集中考虑如何用Eclipse 插件机制实现业务逻辑。

Eclipse RCP Eclipse Platform 的一个子集(如图),

https://p-blog.csdn.net/images/p_blog_csdn_net/songliwei2005/EntryImages/20080717/blog2.jpg

Eclipse3.0版本开始,Eclipse 项目组对代码进行了重构,将IDEWorkbench(工作台)彻底分离,实现了一个Generic Workbench,使得RCP 应用中不再有IDE的影子。而其它的可选部件及丰富的插件集更是让RCP 应用在各个领域都可以大展拳脚。

 

Eclipse RCP 主要有以下几个优点:

1. 组件化(UIUpdateHelp

Eclipse RCP 基于Eclipse特有的插件体系构架,每一个业务模块都设计为一个可方便重用的插件,把业务模块之间的访问转化为插件之间的相互访问,这样就实现了模块之间的解耦,以达到软件PnP(插件的即插即用)的目的。

2. 跨平台

跨平台是RCP的基础要求之一。只要不在客户端应用中包含OS特有的功能,基于RCP 开发的所有客户端应用都是能够跨平台的。

3. 本地观感

Eclipse中的图形包SWT而不是JDK中自带的AWT/Swing包, SWT在显示用户界面时使用的是本地OS本地用户界面代码,所以呈现出来的用户界面样式就是本地OS特有的界面样式。

4. 可扩展性强

基于OSGi及插件体系结构的内核为应用程序提供了一个安全,稳定的运行时环境,扩展点的思想更是使得用户可以方便地搭建各种类型、用途的应用程序以及该应用程序特有的扩展点。可以说,Eclispe RCP 就是设计用来被扩展的。

5. 强大的开发工具支持和完善的本地帮助文档

随着Eclipse 的插件开发环境(PDE)的日趋成熟,使得基于RCP的插件开发越来越方便,加速了产品的研发进程。在Eclipse 的帮助系统可以找到与Eclipse RCP以及插件开发的所有文档,而且这些帮助文档基本上都有汉化的版本。

6. 广泛的Java开发社群支持

Eclipse 本身的开发社区非常庞大,我们可以找到丰富的开发资源和熟悉Eclipse 插件开发的程序员。

7. 强大的企业级背景

Eclipse本身是由IBM捐献并成立了Eclipse 基金会,这个基金会的成员包括:BEABorlandCAIBMIntelNokiaSybase等等国际企业。这些国际企业或多或少都有基于Eclipse 的产品,特别是IBM自身,它的很多重要软件产品线都转向Eclipse 平台。

虽然RCP出现的时间很短,但目前已经有很多大型的应用程序构建在这个强大的平台之上,比较成熟的有IBM LotusWorkplaceMaestroNASA Space MissionManagement )项目,GumTreeScientific InstrumentControl)等。Macromedia 最近也宣布他们将用Eclipse RCP 开发下一代富互联网应用(Rich Internet ApplicationRIA) 环境。另外,运行于嵌入式设备的eRCP 也正在如火如荼的开发(目前已经实现了)中。再加上Eclipse 的很多子项目(如BIRTDTPEMFGEF 等),可以说使得基于RCP 的企业级的应用如虎添翼。

RCP构建企业级应用一般基于以下的几个流程:

l        构建RCP Application

Eclipse是一个插件体系结构的完整的应用平台,可以将RCP看作是一个插件,或一些插件的集合。在EclipseIDE 中,我们新建一个插件项目(Plug-in Project ),并选择这个插件项目是一个RCP 应用程序。一个RCP 应用程序的入口一般需要实现4个类:

1. org.eclipse.core.runtime.IPlatformRunnable的实现类

2. org.eclipse.ui.application.WorkbenchAdvisor的子类

3. org.eclipse.ui.application.WorkbenchWindowAdvisor的子类

4. org.eclipse.ui.application.ActionBarAdvisor的子类

应用程序的入口必须实现org.eclipse.core .runtime.applications 扩展点,RCP 也不例外。在Eclipse启动时,只能指定一个被运行的application,这个application的主类必须实现IplatformRunnable接口, 由此接口所提供的r u n 方法接管Eclipse平台的控制权,当此application结束时,Eclipse平台也会退出。

l        构建显示功能

RCP的功能主体是由特定透视图所包含的一组视图来呈现。里面所要显示的界面主体主要由透视图所包含的一组视图来呈现,透视图的开发是标准的插件开发,我们可以在已经创建的RCP应用程序项目下开发,也可以新建一个插件项目来开发。对RCP 应用进行包装(Brandingproducts 是从3.0版本以后Eclipse运行时新提供的一个扩展点,它是基于上节中的applications 扩展点的,除了指定所要运行的应用外,还对一个典型的企业级应用程序的一些重要特性如关于文本,关于Icon,窗口Icon及欢迎使用页面等进行了配置,即Branding 功能。RCP 提供了两种不同类型的product 扩展:静态的和动态的。静态的即我们所使用的类型,在plugin.xml中直接声明org.eclipse.core.runtime.products 扩展点并设置其所包含的主要配置,比如指定此产品要运行的application(见上节),设置主窗口的图标和标题,关于窗口的图标和文本,闪屏以及所包含的插件等。动态类型的product 扩展需要实现o r g .eclipse.core.runtime.IProductProvider接口来对提供的一系列产品进行定义。在Eclipse 平台中,features 是一些类似功能或某个产品的一系列plugins 的集合。Features是可选的功能部件,但是如果你想要使用PDE来开发的话,这可以提供很大的方便,而且,如果你需要使用Eclipse 提供的自动更新(Update Plugin)功能或使用Java Web Start 来发布你的应用的话,则需要创建一个或多个Feature。开发业务应用插件前面我们已经介绍了Eclipse RCP 应用的入口程序的开发,入口序完成了两个最重要工作:启动Eclipse Runtime(插件运行时容器)并加载定义好的工作台和默认透视图,而工作台和透视图都是由插件和在入口程序启动E c l i p s eRuntime 之后,所有的业务逻辑和用户交互都由各个插件完成,所以RCP应用程序的开发实质还是插件的开发。

视图(Views)是RCP 应用程序的重要组成部分,作为一个GUI应用,界面主要由Views 来呈现。视图的典型角色有下面几种:

1. 为整个应用程序提供一个结构性的概览;

2. 为在Editor(编辑器)中显示的内容提供一个大纲视图(如Outline);

3. 提供上下文相关的信息(如大型应用程序中的Properties 视图)。

Eclipse中,可以为Views定制各种不同的显示方式:1. standalone,2. 不可移动的,3. 不可关闭的,4. 多视图,5.Perspective切换时保持显示的,6. 放置在TabFolder 中的。

l        构建应用交互

ActionBarAdvisor的子类提供了创建RCP 应用的菜单、工具栏及状态栏的入口。在Eclipse的世界中,所有的东西都是ContributionItemAction也不例外。可以由两种方式创建R C P Action,菜单项及工具栏等,一种方法是通过ActionBarAdvisor来定义, 另外一种是在plugin.xml 中扩展workbench 提供的相应扩展点(org.eclipse.ui.actionSets)并实现IworkbenchWindowActionDelegate接口来定义。

l        应用程序配置

添加Preferences,在Eclipse 中,个人喜好页面是由JFace Framework 来提供的,在workbench中又对其进行了加强,通过在plugin.xml中扩展相应扩展点org.eclipse.ui.preferencePages)并实现org.eclipse.ui.IworkbenchPreferencePage接口来定义。在RCP 中,可以使用workbench中的org.eclipse.ui.actions.ActionFactory提供的标准Preferences Action来呼叫出Preference配置窗口,当此配置窗口显示时,会在Eclipse运行时的扩展点中查找对应的扩展并将各个配置页面显示出来。

l        添加Help

Eclipse平台一个优美的地方就是将很多功能部件都设计成为一个Framework,用户只需做很少量的工作就能实现很复杂的功能,Eclipse Help 功能就是一个很好的例子。RCP 的在线帮助采用的是WEB-APP的方式,Help Framework的主要工作就是将帮助文档集成进RCP 应用产品的在线帮助中,为了实现这个功能,只需在feature.xml 中添加下面几个插件:org.apache.luceneorg.eclipse.help.appserverorg.eclipse.help.baseorg.eclipse.help.uiorg.eclipse.ui.forms

通过在plugin.xml中扩展help 提供的相应扩展点(org.eclipse.help.toc),指定所要使用的主题文件,即完成了RCP 应用程序Help系统的创建工作。

l        发布产品:打包应用

经过上面的开发步骤,我们的产品已经初具雏形,为了将其提供给用户直接使用,还需要最后一个步骤:打包发布。Eclipse 专门提供了产品配置功能,用于RCP 应用的发布。首先新建一个产品配置文件( 比如:MyRCPApp.product),在这个产品配置文件中,定义该RCP 应用发布所需要的内容,如:产品的信息和该RCP产品所包含的插件列表等等, 然后利用Eclipse的导出功能导出产品。如果想使产品更加专业化,还可以创建安装程序,比如使用Install Anywhere或其它工具将已生成的二进制代码再进行包装,这样也更加贴近用户的使用感觉。

l        扩展功能

Eclipse 平台的新版本在引入OSGi特性之后,插件的plugin.xml文件结构更加清晰,仅仅包含两部分的内容:所提供的扩展(extension-point)和对已有插件的扩展(extension point)。在前面部分的文章中,我们使用的都是后者,现在我们要自己提供扩展点。首先,需要定义所提供扩展点的Schema,即其它插件需要扩展时要如何编写扩展;其次,plugin.xml中声明此扩展点(”⋯”name=”⋯”/>;最后,也是最重要的部分,对所定义的Schema编程,当读入相应的元素时要如何进行处理。为此,Eclipse提供了丰富的API对扩展点进行操作。

l        系统更新

使用Update Manger更新应用程序为了使我们的产品更专业,提供软件更新功能是很必要的。EclipseUpdate部件主要的功能有:

1. 对已有的feature 进行更新;

2. 寻找新的feature 并进行更新;

3.对已安装的f e a t u r e 进行配置(Enable/Disable)。

RCP 已经成为Java 桌面应用新的生力军,为Rich C/S模式的回归做好了充分的准备。随着越来越多的国际大厂商(IBMBEAOracleHPCABorland 等)加入到Eclipse 基金会,在Eclipse 的各子项目中分别扮演着越来越重要的角色,相信RCP会具有一个广泛应用的明天。

你可能感兴趣的:(Eclipse 体系结构综述(二))