`
Saito
  • 浏览: 43710 次
  • 性别: 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
分享到:
评论
8 楼 lkj107 2010-09-09  
流程还有这么多人关注啊....


看来OA性质的项目是经久不衰啊
7 楼 comsci 2010-09-09  
哈哈,那么好的工具,有开源的计划和方案吗? 有官网? 哪里有下载?
6 楼 melin 2010-09-09  
为自己的工作流设计了一个flex版本的设计器,等完成了。提供源码,供需要的人学习




//----------------------------------------------------------------
看来有人急切需要。我就提供一份代码。我是边学习flex边开发的。大概花了不到两个星期的时间,代码质量部敢保证的。
5 楼 lookdd1 2010-09-09  
有没有再集成一套web表单设计器啊。
4 楼 分离的北极熊 2010-09-09  
流程图不是要一个起点,一个终点么

3 楼 kimmking 2010-09-09  
你也没睡,我给你秒精了吧~~

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

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


最后,弱弱的说,支持saito开源。
2 楼 Saito 2010-09-08  
lookdd1 写道
好期待楼主最后的开源计划。。目前在社区中对这样的开源套件貌似都灰常有兴趣。。很多人都自己开发自定义流程设计器。但需要配套的设施很多,工作量太大,对一般的小公司难度和成本都太高。如果有这么个开源的东西,加上JBPM4的号召力,肯定会非常受欢迎


  其实我们第一版的引擎是直接拿jbpm4.0来改造的.后来出现了诸多的问题.起先是hibernate性能问题.之后由于jbpm4.0的各种bug导致我们心神不宁.由于jbpm跟hibernate耦合过高.我们想换ibatis未果.就重新开发了.

  其实现在的版本跟jbpm已经完全没有关系了.(或者说有一点关系.).我们有一套自己的流程定义.支持分布式流程.页面流.工作流.业务流等等.单纯的引擎已经比较成熟了.web版的流程设计器也可以晒晒.(虽然现在有点年久失修). eclipse的插件正在做. 其实我们也很期待社区的反应.
1 楼 lookdd1 2010-09-08  
好期待楼主最后的开源计划。。目前在社区中对这样的开源套件貌似都灰常有兴趣。。很多人都自己开发自定义流程设计器。但需要配套的设施很多,工作量太大,对一般的小公司难度和成本都太高。如果有这么个开源的东西,加上JBPM4的号召力,肯定会非常受欢迎

相关推荐

    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