阅读更多
作者: Flyingis
以前一直做WebGIS方面的工作,对桌面关心甚少。桌面开发让人第一个想到的是VB6的快速开发,以及VC++平台中对效率的追求,VB.NET似乎找不到一个合适的定位。自己以后想逐步转向桌面,毕竟桌面才是GIS的天下,在效率、可扩展性、开发速度以及平台可持续发展中权衡,让我选择了Eclipse RCP。
说向桌面转型而选择Eclipse RCP有些片面,因为桌面开发仅仅是Eclipse RCP开发的一个子集,用Eclipse RCP进行Web开发同样可以。Eclipse RCP是一个基础应用平台,在这个平台上,我们可以方便的扩展自己的应用、快速开发自己的程序、统一应用程序的界面等等,按照官方的话来说,Eclipse RCP开发的特点在于:
1.组件式的架构:所有的业务功能都可以设计为可以重用的插件,插件之间的相互访问与重组,就构成了系统的业务模块。其中最典型的应用,就是通过插件来增强Eclipse Java IDE的功能。
2.将程序关注的重点集中在业务领域:Eclipse RCP本身就基于Eclipse插件体系结构,基于这个统一的架构,程序员可以很方便的开发出自己的客户端应用,将主要精力放在业务逻辑的实现。
3.适应需求的变化:Eclipse就是由插件搭建而成的,通过增减插件,我们可以很容易的实现业务功能的变更。为Eclipse加入中文包就是最好的例子,通过.link文件对中文包文件的引用,可以实现Eclipse的中文本地化,当我们需要将语言恢复为英文时,只需删除对应的.link文家即可。
Eclipse体系的核心是插件,3.0版本以后Eclipse开始采用OSGI作为其插件体系结构实现的基础,OSGI是一套开放的标准,这样可以增强网络范围内的互操作性,每个Eclipse插件就是一个OSGI的模块。OSGI模块中最重要的是Bundle和Service,Bundle是插件管理器,Service是这个模块可以暴露对外的服务对象。每个Bundle拥有自己的ClassLoader以及context,通过context可进行服务的注册、卸载等。启动时Eclipse核心会检查所有的插件并注册,但是直到被调用,该插件才会被实例化,这个过程就是懒加载。
在OSGI之上的是Runtime,它提供了Application模型和扩展机制。
和OSGI框架和JVMs一样,Eclipse Runtime需要知道做什么。运行Eclipse,首先需要构建一个Application,它和Java程序中的main方法类似,Runtime启动后,程序需要找到指定的Application,Application通过扩展来定义,该扩展指定一个类(扩展点)作为主程序的入口。Application必须实现IplatformRunable接口,由此接口提供的run方法接管Eclipse平台的控制权,当Application结束时,Eclipse平台也会退出。
Products运行于Application之上,它主要提供典型应用程序的基本界面的实现,例如闪屏、windows图标等。一个Eclipse安装中可能存在多个Application和Product,但是在同一时刻只能运行一个Application和一个Product。
各种插件添加到Eclipse RCP是通过扩展来实现的,扩展的创建必须遵循扩展点(Extension Point)定义的规范进行明确的声明,我们可以使用Eclipse提供的现成的扩展点,还可以定义新的扩展点,并在此基础上进行扩展。Eclipse平台上常见的扩展点有:actionSets、editor、popUpMenu、views、perspectives、propertyPages等等。
关于Eclipse中的插件类型:
Eclipse是各种插件的集合,但总体而言,插件开发有两种提供方式,一种是插件集构建的应用,拥有自己的程序入口,如Eclipse平台在Windows下通过点击eclipse.exe可以进入。另一种是以扩展的方式提供的插件集,它们通常不是完整的,也没有自己的程序入口,仅用以加入到已存在的平台中进行辅助性的开发,如GEF、EMF、CDT等。
参考资料:
《Eclipse Rich Client Platform:Designing,Coding,and Packaging Java
TM Applications》
《程序员》2006年5月刊
http://www.eclipseworld.org/