Eclipse插件开发・玄乎(一)?

最近比较闲,所以突然摆弄上了Eclipse的插件。之所以会摆弄上这个东西,该从上个月说起:
  上个月,在向老大申请加薪未果的情况下,心情比较郁闷,冒出了跳槽的念头。于是乎,就在几家招聘网上家登记了自己的简历。按照写简历的“没有的写有,有的尽量夸大”的原则,我把我以前实习的时候做Eclipse的rcp的经历写上去了,当然难免写的内容比实际夸张了点。

  出乎我的意料,居然有两家公司主动找上门来,而且看中的竟然是我做过rcp的开发,还都说自己公司都想开发一个基于Eclipse的开发平台,现在需要大量的开发人员,而且现在的eclipse插件开发人员奇缺。

  难道这年头Eclipse真的有这么热?每家公司都想有做自己的eclispe插件产品卖钱?殊不知,哪有那么容易啊!我见过的这类产品就有两个,一个是上海普元的Eos,另一个就是我们公司的,名字就不说了。

  先说说我们公司的,我们公司的产品的主要亮点就在于它对web2.0的应用了,整个框架完全同过ajax来传输数据,将页面元素控件化,屏蔽了数据传输和控制的细节,使得页面开发的速度大为提高。但是问题也随之而来,过度地使用javaScript使得浏览器的性能受到了影响,同时大量的数据提交的页面处理,使得数据传输量并未明显的减少,大量地消耗了ie的内存。然而这还不是最重要的,一个产品就5,6个人开发了几个月,在控件库不足,控件功能不完善,没有考虑到客户化的情况下,居然要我们拿到项目里用。那段时间真的是天天都要碰到问题,每天都能找到几个产品的bug,根本就没有什么产品支持,居然在不给源代码的情况下让我们重写控件。好像只是为了推出产品而已,根本就不考虑用户的感受。难道产品就是这样做的?怪不得人家说当今中国社会浮躁呢!

  Eos我用的不熟,我就简单说说了。不过感觉还可以,最起码不会太不稳定。毕竟人家做这个产品已经四五年了,产品线成熟,构件包丰富,有大量的产品支持人员。不过听说一直都不挣钱,要不是上海政府支持着,早就垮了。不过就是受不了他们对SOA概念的猛炒。到处鼓吹自己用的是SOA架构,其实也没什么东西的,SOA的标准都没有最终确立,而且它用的标准跟IBM的是不一样的。这年头,在java领域,没有IBM的支持,前景真的不看好。还有一点就是它对自身平台的依赖太高了,离开了他的平台就不能用了,移植性和扩展性可见一般啊!

  看,在中国做产品真的不是那么容易的,核心技术掌握不了,要遵循别人标准,自己制定的标准没人理,难啊!

  扯远了,回到主题。既然Eclipse被这么多人追捧,而且人才缺乏。那么,为了更好地跳槽,那我就学习学习了,技不压身嘛!于是乎,我从上周开始学习Eclipse的插件开发,花了一周的时间将Eric Clayberg, Dan Rubel的Building Commercial-Quality Plug-ins, Second Edition这本书给看完了(苦涩,难懂的英语啊!),再通过google和Eclpse中文社区,再加上先前Eclipse的知识。终于对Eclipse有了一定的了解,现在正在做一些这方面的例子。

  我们现在就将Eclipse插件开发可能遇到的一些概念进行简单的认识:

  1。OSGi

  OSGi 是由 1999 年成立的 OSGi 联盟提出的一个开放的服务规范,最初的目的是为嵌入式设 备,确切地说是为可以通过网络访问的设备提供一个通用的软件运行平台,屏蔽不同设备之间的硬件和操作系统差异,使软件可以动态地部署和更新。后来 Eclipse 组织注意到了 OSGi 的优点,决定将 Eclipse3.0 及后续版本的插件体系结构基于 OSGi 来实现,并专门成立了一个子项目 Equinox 来实现 OSGi R4 规范,把 Equinox 作为 Eclipse 的底层运行平台。Eclipse 组织的这一决定带来了双赢的局面,今天的 Eclipse 由于其出色的可扩展的体系结构,已经不再是一个单纯的 Java IDE,而是一个开放的开发平台,一个通用的可扩展的软件框架,OSGi 也不再局限于嵌入式领域,而是成为了一个通用的动态组件开发环境,在桌面,服务器端等领域得到了大量应用。(摘自IBM开发者论坛)

  OSGi 跟SOA有些像,都是面向服务的规范。只不过两者的着重点不懂,OSGi 着重于技术上的应用;而SOA更见注重业务逻辑上的整合和概念上的统一,不关心具体的实现细节。

  在Eclipse 中每个插件的一个Bundle,具体的实现类是Activator。在MANIFEST.MF中通过Bundle-Activator属性映射。每个Bundle的作用就是,获得并执行Eclipse platform提供并注册的Service。如:ActionBarsSevice,selectService,pageService等等。

  2。IWorkbenchWindow, IWorkbenchSite,IWorkbenchPage和IWorkbenchPart的关系

  这部分的内容在Building Commercial-Quality Plug-ins, Second Edition这本书中没有介绍到,我通过阅读Eclipse的源代码,对这四者的关系总结了一些认识,可能不准确,请给与指正。

  这四者是构成Eclipse操作界面的重要的接口,它们共同负责Eclipse界面的创建,管理,部署和与操作系统交互的功能。

  IWorkbenchWindow :整个Eclipse的窗口就是一个IWorkbenchWindow,它包含了menubar,toolbar,status bar,main area 这几个部分。(源码中的注释为 workbench window has a menubar, a toolbar, a status bar, and a main area for displaying a single page consisting of a collection of views and editors.)其中menubar是菜单栏,toolbar是工具栏,statusbar是状态信息栏,main area 就是放置IWorkbenchPage的地方。IWorkbenchWindow继承了IPageService接口和IServiceLocator。IPageService说明IWorkbenchWindow是一个PageService,可以包含和管理多个IWorkbenchPage。它通过IPerspectiveFactory来设置各个page在IWorkbenchWindow中的位置。IServiceLocator说明IWorkbenchWindow是一个服务装载器,它可以提供service的注册。

  IWorkbenchPage:IWorkbenchPage是IWorkbenchWindow的一部分,一个IWorkbenchWindow可以有多个IWorkbenchPage。IWorkbenchPage 继承了IPartService, ISelectionService这两个借口,说明IWorkbenchPage可以包含和管理多个IWorkbenchPart,这些IWorkbenchPart都重叠地放在IWorkbenchPage里面。ISelectionService说明IWorkbenchPage可以提供对在它范围之内的选择操作进行监听,同时也能获得选中的Objec的。

  IWorkbenchPart:该接口是所有view和ecitor的接口,而IWorkbenchPart也只有这两种类型。用于在IWorkbenchPage现实具体的内容。通过createPartControl方法,将SWT和JFACE的控件构造到UI上。

  IWorkbenchSite:IWorkbenchSite负责实现Part和IWorkbenchWindow的交互(The common interface between the workbench and its parts, including pages within parts.源码中的注释)。IWorkbenchSite继承了 IShellProvider ,IServiceLocator接口。IShellProvider 说明从IWorkbenchSite可以获得当前的shell,而IServiceLocator说明Site可以注册其他的服务,它可以注册以下几种类型的Service:ICommandService,IContextService,IHandlerService, IBindingService。

今天先写这些,未完待续!

你可能感兴趣的:(职场,休闲)