`
Saito
  • 浏览: 43807 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用gef构建一个图形化的流程设计器.

阅读更多
  我们总是在做着各种反潮流的事情..

  当jbpm4在N年以后终于推出了自己的"羚羊"的时侯,我们却要从已有的web流程设计器退化为用eclipse plugin的形式绘制流程.在这个诡谲的客户第一的年代里面.我们操起了osgi.操起了eclipse plugin. 操起了各种swt jface.... 操起了更加诡异的gef.放下我心爱的web流程设计器.(T T .还没优化好呢.)

  避开难受的osgi类加载机制吧.他太过于繁琐.我们只需要知道plugin作为bundle插入了容器便好了. 避开各种操蛋的swt jface吧.(我十分期待eclipse v4的xwt.)在类xml语言描述界面的大潮下.swt确实写起来让人蛋疼. swt设计器生成代码又有诸多限制以及问题. . 好吧. 事实上我最想避开的是gef.这个东西实在是太过于复杂.
附图:

  恐怖的osgi类加载机制:



  eclipse plugin开发其实不是什么高深的学问.没什么复杂的技术.我归结了一下.用三个字表达:"基于xml编程的eclipse plugin开发." 嗯.三个字.. eclipse插件开发中最重要的三个个文件就是Activitor plugin.xml 跟 MANIFEST.MF.(此刻我是多么期望能有anotation大大前来救驾.)Activitor同android什么activitor的其实是类似的. 提供了一个加载bundle的入口.当然osgi规范也制定了一系列的bundle的install.uninstall.avtive什么的状态转换过程的规范.嗯.各种规范.  plugin.xml维护了插件的扩展点.所谓扩展点分为两种.一种为eclipse自身的扩展点.我们可以扩展很多东西.wizard.editor.menu什么的.另一种我们可以自己制定扩展点.(这里面包括真的是自己的扩展点.和别人开发的插件的扩展点.).当然eclipse给你提供了方便的插件扩展界面.通过界面可以轻松的扩展.但是.但是啊.. MANIFEST.MF实际上是osgi的遗孀.我们的插件需要他.来作为osgi的bundle.bundle之间有什么相互依赖.然后你的插件需要导出导入什么package给别人或者给自己用都可以在里面定义.osgi R4的规范里面用很大的篇幅描述了如何才是一个规范哦MANIFEST.MF文件.然后各大osgi框架用大量的代码来校验并使用这个文件.osgi规定了一套classload机制来loadclass.然后分出了各种层来确保安全.服务的完整性等等.. 在这里推荐想深入了解的阅读osgi规范.其实开发插件只需要了解MANIFEST.MF文件寻找bundle的机制.以及export import package的规则就可以了.了解之后能避免很多不必要的时间浪费.

附图:

  bundle状态转换图:

 

  swt其实是好东西.好吧.我承认是对比swing.(看到swing的几刀有感而发.还想说两句. twaver也是好东西.) .但是对比mxml.xaml这样的东西.代码可阅读性上还是太差.并且对比类xml语言(发现过一个swt/xml的东西.不过貌似不成熟..).代码生成与反生成的难度也会更高.(虽然没我什么事.不过流程设计器实际上跟这些界面设计器是类同的.).手写代码的郁闷程度上会高很多.jface封装过了swt.提供了一些常用的组件.抽象的层次有所提高.还是有很大用处的.实际上在开发eclipse plugin的过程中.最常用的方法就是查看eclipse其他plugin的源码.尤其是jdt的源码.可以翻到很多有用的组件.然后就可以为我所用.当然条件是要学会找.. 这个能力还是要有经验累积的.我就不会抄..T T.

  web模式的mvc中view请求经历了servlet/rack/...等的一次封装.将http请求封装为了"request".以至于大家可以处理.当然.在非web模式的mvc框架中.gef也存在这样的东西. 同样将界面操作自身封装为"request"以供policy接收并处理.这种类型的匹配也是师出同门.所以有必要将他们进行小小的对比.
  附:在rest大行其道的今天.有人提出了一个新的架构RMR. 嗯.就是resource-method-representation. 理由很简单.web上面应该是以资源为主.method处理请求以处理资源.然后representation处展示. 好吧.可以认为他换个了马甲.除了resource的粒度发生了变化以外.m-r实际上就是controller跟view啊. 不过在sinatra.web.py等web dsl下.确实他们是method. rest的情况下提出RMR实际上也是对未来的web作出期许.期望web将来更加有序.(个人理解.) 接着继续对比 传统web框架与gef的异同.

request:
  springmvc; servlet容器封装view操作为request驱动整个应用运转.
  gef: 由Tools封装一些界面操作信息封装为request.框架内置一些常用request.

controller:
  springmvc: @controller处理各种request
  gef: request实际上请求给了policy.(虽然大家都知道editpart是controller.但实际上真正处理的是policy.)

view:
  springmvc: 各种模板引擎 html. flex什么的都可以.
  gef: draw2d.

model:
  springmvc: pojo.
  gef: 可以使用emf作为model. 也可以利用pojo实现IPropertySource来作为数据源.

  当然这只是gef的开始.我们还有各种command等着我们.gef内置了commandstack来帮你进行redo undo什么的.

  request => command => model 的过程.每一个图形界面的操作都会被封装为request.

  好吧.文章都快写完了还没介绍web流程设计器怎么做.嗯.忽悠的目的达到了..

  其实有一个不算很好的参考目标. jbpm的流程设计器.当然.不算太好是因为他使用了gef.然后自身封装又过于繁复.gef本身的学习曲线就已经非常高.在加上设计器本身的一层封装(在model上封装了wrapper. 有各种handler io什么的.).同时流程设计器又划分为四个小bundle.在MANIFEST.MF里面有各种bundle依赖.package导入导出什么的.导致新手接触项目就会有畏惧感. 不过做流程设计器的话扔不失为一个凑活的参考目标.(据我偷窥jbpm流程设计组的jira.貌似只有一个人在维护现有的代码了. 看到两个人的提交记录.)

  这里推荐下八进制的gef小项目=>gefpractice<=.  这个小项目可以说是gef的helloworld.对于理解gef有莫大的帮助.

晒图:

  图形化:

 

  源码化:

 

  我们的eclipse plugin流程设计器现在正在开发过程中.还有不少的bug.有可能的话(其实在规划之内.).会在一个时间在淘蝌蚪上面开源.当然会连同我们的流程引擎PMC(并不是单纯的工作流.还可以结合页面流和业务流的强悍引擎.).以及基于Flex的流程设计器一起.

  最后推荐一篇eclipse gef自身的wiki.对于了解gef的原理都有很大的帮助.

  最后的最后.我想说.eclipse v4赶快开发啊. 哥弄swt实在是抗不住了...
 
  • 大小: 103.7 KB
  • 大小: 118.9 KB
  • 大小: 55.8 KB
  • 大小: 38.7 KB
分享到:
评论
28 楼 ae6623 2014-08-26  
楼主,4年过去了,求开源~~~~
27 楼 leaderbird 2013-08-21  
在taobao上叫啥名字呀?给个URL吧!
26 楼 leaderbird 2013-08-21  
给分享一下这个吧!
25 楼 xw7824 2012-09-08  
能否分享一下源码,正好在找这样的东西, xw7825@163.com
24 楼 niweiwei 2011-10-14  
上面晒的那个图有没有有没有源代码?希望楼主共享一下,源码
23 楼 redheart_2006 2011-07-12  
  我们的eclipse plugin流程设计器现在正在开发过程中.还有不少的bug.有可能的话(其实在规划之内.).会在一个时间在淘蝌蚪上面开源。。。
--------哥们,时间过去快一年了,现在可否开源了吗?能否分享一分代码给我,谢谢
22 楼 zxlsky1314 2010-09-27  
坐在对面的还在搭积木的路过
21 楼 Saito 2010-09-09  
huzhenyu 写道
如果有朋友真想玩基于eclipse的流程设计器,可以去下载JBPM的流程设计器(带源码)。


嗯. 我在主贴里面也提到了. .

Saito 写道
  其实有一个不算很好的参考目标. jbpm的流程设计器.当然.不算太好是因为他使用了gef.然后自身封装又过于繁复.gef本身的学习曲线就已经非常高.在加上设计器本身的一层封装(在model上封装了wrapper. 有各种handler io什么的.).同时流程设计器又划分为四个小bundle.在MANIFEST.MF里面有各种bundle依赖.package导入导出什么的.导致新手接触项目就会有畏惧感. 不过做流程设计器的话扔不失为一个凑活的参考目标.(据我偷窥jbpm流程设计组的jira.貌似只有一个人在维护现有的代码了. 看到两个人的提交记录.)
20 楼 huzhenyu 2010-09-09  
如果有朋友真想玩基于eclipse的流程设计器,可以去下载JBPM的流程设计器(带源码)。
19 楼 duker 2010-09-09  
jbpm+osgi=?
18 楼 melin 2010-09-09  
国内大部分程序员是做企业应用开发,而企业应用开发是少不了工作流的。。。
17 楼 lookdd1 2010-09-09  
hatedance 写道
kimmking 写道
你也没睡,我给你秒精了吧~~

我在加班,跟1000公里以外的某个现场的同事协同处理一些问题~~~

说点正经的,现在流程太火了,
做个引擎,包装下,就是平台可以卖钱,
做个UI,美化下,就是设计器可以卖钱,
啥都没有,整整概念,就是流程专家,可以做咨询,卖钱。。。。


最后,弱弱的说,支持saito开源。


说点正经的,流程现在真的很火吗?请给点证据好吗?



看看family168那么短时间内就灰常火爆就可以了解了吧。看看JE的圈子频道最活跃的几个频道,JBPM的是经常上首页的。
16 楼 comsci 2010-09-09  
太感谢楼主了,大家一起,把中国的流程软件事业推向一个新的高峰。。。
15 楼 hatedance 2010-09-09  
kimmking 写道
你也没睡,我给你秒精了吧~~

我在加班,跟1000公里以外的某个现场的同事协同处理一些问题~~~

说点正经的,现在流程太火了,
做个引擎,包装下,就是平台可以卖钱,
做个UI,美化下,就是设计器可以卖钱,
啥都没有,整整概念,就是流程专家,可以做咨询,卖钱。。。。


最后,弱弱的说,支持saito开源。


说点正经的,流程现在真的很火吗?请给点证据好吗?
14 楼 beeke 2010-09-09  
和楼主一样的体会:swt写起来太蛋疼了,我已经发誓eclipse4的xwt正式推出之前,再也不写plugin了
13 楼 supercwg 2010-09-09  
好像到处都有人说要开源什么图形设计器、什么引擎、什么平台,但到现在为止,还没见到过一个比较完整的真正开源的东东呢
12 楼 Saito 2010-09-09  
kimmking 写道
你也没睡,我给你秒精了吧~~

我在加班,跟1000公里以外的某个现场的同事协同处理一些问题~~~

说点正经的,现在流程太火了,
做个引擎,包装下,就是平台可以卖钱,
做个UI,美化下,就是设计器可以卖钱,
啥都没有,整整概念,就是流程专家,可以做咨询,卖钱。。。。


最后,弱弱的说,支持saito开源。


还好我不卖钱.不做咨询. 我鸭梨瞬间减小了很多..

开源是公司层面的决策.嗯. 我是狐假虎威来着..
11 楼 Saito 2010-09-09  
comsci 写道
哈哈,那么好的工具,有开源的计划和方案吗? 有官网? 哪里有下载?


这玩意是不兼容jbpm4的. 成套修炼效果佳..

lkj107 写道
流程还有这么多人关注啊....


看来OA性质的项目是经久不衰啊


如果仅仅是工作流的话. 可以说是OA性质. 但是其实我们更多在关注业务流..而不是审批性质的工作流.

lookdd1 写道
有没有再集成一套web表单设计器啊。


恭喜你.我们的console就是这样搭出来的. 利用了我们的另一套系统..

melin 写道
为自己的工作流设计了一个flex版本的设计器,等完成了。提供源码,供需要的人学习


话说设计器这种东西其实不难做.kb的是做各种序列化跟反序列化. 以及属性的各种设置. 这个要耗费大量的精力.属于吃力不讨好. bug很多质量很难保证.. 话说有没有类似xstream这样的东西在actionScript界存在. 这样.我就省了很多力.

属性配置这种东西表单做细粒度重用.也是很麻烦的事. 欢迎各种探讨下..
10 楼 niumd 2010-09-09  
杭州出人才啊……
9 楼 sprite 2010-09-09  
melin 写道
为自己的工作流设计了一个flex版本的设计器,等完成了。提供源码,供需要的人学习


源代码在何处能下,学习一下,谢谢!

貌似可以一边开发,一面开源,迫不及待 想学习学习!

相关推荐

    org.eclipse.gef

    9. **Zest 图形库**:作为 GEF 的一部分,Zest 是一个专门用于构建图形图表的库,适用于生成流程图、关系图和其他类型的可视化信息。 综上所述,"org.eclipse.gef" 插件为 Eclipse 开发者提供了一套强大的工具,...

    GEF-ALL-3.9.100.zip

    总的来说,"GEF-ALL-3.9.100.zip" 提供了一个完整的开发环境,帮助开发者利用GEF框架构建图形编辑工具,适用于各种领域,如软件建模、流程图绘制、电路设计等。通过深入学习和实践,开发者可以充分利用GEF的强大功能...

    Eclipse开发使用GEF和EMF(IBM 红皮书)中英文对照版

    在Eclipse中,GEF(图形编辑框架)提供了一套用于构建图形编辑器的框架,使得开发者可以轻松地创建出复杂的图形用户界面,如流程图、网络拓扑图等。GEF提供了丰富的图形操作和交互机制,包括拖放、选择、连接线绘制...

    GEF-ALL-3.1.zip

    【描述】: GEF(Graphical Editing Framework)是Eclipse平台中的一个核心组件,主要用于构建图形化编辑器。GEF-ALL-3.1.zip是一个包含了GEF框架3.1版本的压缩包,它通常用于开发者在Eclipse环境中开发图形界面应用...

    GEF-ALL-3.9.101.zip

    GEF是一个开源项目,由Eclipse基金会维护,主要用于构建图形化用户界面,特别是图形编辑工具。它提供了丰富的API和模型,使得开发者可以轻松创建出具有拖放、连接、编辑等功能的图元编辑器。 描述中提到的操作步骤...

    GEF-Update-3.7.1.zip

    GEF(Graphical Editing Framework)是Eclipse平台上一个强大的图形编辑框架,主要用于构建可视化的建模和图形编辑工具。更新到3.7.1版本,它提供了许多改进和新功能,以满足开发者在创建图形用户界面时的需求。在这...

    GEF.rarGEF.rar

    GEF(Graph Editor Framework)是Eclipse项目的一部分,它提供了一个用于构建图形编辑器的开放源代码框架。Eclipse是一个广泛使用的集成开发环境(IDE),而GEF则是为了帮助开发者创建能够处理图形和图表的应用程序...

    GEF-runtime-3.5.0.zip

    **GEF(Graphical Editing Framework)** 是一个用于构建图形化编辑器的开源框架,它在Eclipse平台中被广泛使用。标题中的“GEF-runtime-3.5.0.zip”是一个包含GEF运行时环境的压缩包,适用于开发和运行基于GEF的...

    GEF_Tutorial.rar(GEF开发指南)

    GEF(Graphical Editing Framework)是Eclipse平台上用于构建图形编辑器的开源框架。它提供了一套全面的API和工具,使得开发者可以方便地创建出复杂的图形用户界面,特别是针对模型驱动工程(MDE)中的图形化建模...

    \GEF-SDK-3.4.1.zip

    GEF是Eclipse平台上用于构建图形化用户界面(GUI)的开源框架,特别适合创建和编辑图表、流程图等图形化数据。在描述中提到,它与Business Process Execution Language(BPEL)的使用有关,这意味着该SDK可能包含了...

    GEF-ALL-3.6.1.zip eclipse

    **GEF(Graphical Editing Framework)**是Eclipse平台中的一个关键组件,专门用于构建图形化编辑器。它为开发者提供了构建用户界面的强大工具,尤其是针对那些需要图形化表示的数据和流程。GEF的设计目标是使得开发...

    eclipse_gef_example.rar

    Eclipse GEF(Graphical Editing Framework)是一个强大的开源框架,用于构建图形化编辑器和可视化应用程序。这个"eclipse_gef_example.rar"压缩包提供了一系列的例子,帮助开发者更好地理解和掌握GEF框架。以下是对...

    GEF-SDK-3.4.2.zip

    【GEF-SDK-3.4.2.zip】是一个针对Java图形界面开发的软件开发工具包,它基于Eclipse平台,特别设计用于构建图形编辑框架(Graphical Editing Framework,简称GEF)。GEF是一个强大的开源库,允许开发者创建富客户端...

    eclipse的GEF插件

    例如,使用GEF和Zest可以轻松构建UML模型编辑器、数据库设计工具或者业务流程模拟器。 6. **开发过程** 开发一个GEF项目通常涉及以下步骤: - 设计模型:确定业务数据结构。 - 实现图元工厂:创建图形元素并定义...

    GEF-0.13-bin.zip

    GEF是一个开源的Java框架,它提供了构建可定制的图形编辑器所需的基础结构和组件。它支持MVC(模型-视图-控制器)设计模式,允许开发者专注于业务逻辑,而不是底层的绘图细节。GEF常用于创建复杂的图表、流程图和UML...

    GEF学习资料.zip

    GEF(Graphical Editing Framework)是Eclipse项目中的一个核心组件,主要用于构建图形编辑框架。它为开发者提供了一套全面的工具,用于创建复杂的图形用户界面,特别适用于创建数据建模、流程设计、系统架构等领域...

    [翻译]Eclipse图形化编辑框架(GEF)/更新第7章:层和视图

    Eclipse图形化编辑框架(GEF)是Eclipse平台中的一个重要组件,主要用于构建可自定义的图形编辑工具。它为开发人员提供了一套全面的API和设计模式,使得创建复杂的图形用户界面(GUI)变得相对简单。在本篇博文中,...

    一个GEF的简单例子

    GEF(Graphical Editing Framework)是Eclipse平台下的一个开源图形编辑框架,用于构建可视化的图形编辑工具。它提供了一套强大的API和设计模式,使得开发者能够轻松创建复杂的图形用户界面,特别是那些需要进行图形...

    eclipse插件 GEF-SDK-3.4.0.zip

    GEF(Graphical Editing Framework)是Eclipse平台中的一个关键组件,专门用于构建图形化用户界面(GUI)和图形编辑器。本压缩包"GEF-SDK-3.4.0.zip"提供了GEF的软件开发工具包,帮助开发者在Eclipse环境中创建功能...

Global site tag (gtag.js) - Google Analytics