读书人

工作流与JBPM开发范例精解(二)

发布时间: 2012-11-16 14:12:14 作者: rapoo

工作流与JBPM开发实例精解(二)
前几天发了一篇文章,没几个人看也没人留言,看来我这功夫差的还是远啊,今天来一个实际点的吧。可能上回的废话太多。说说这个jbpm应该怎么来用。

首先当你想学一个框架的时候一定是你要有项目来用他了,OK,那么你项目当中的流程是什么你应该清楚吧,那么当你清楚了这些的时候我们就开始我们这个最简单的例子吧。

假如我们现在有这么一个例子,公司员工想报销点出差费,那么他要将他的申请提交给他的第一级领导——部门主管去审批,然后部门主管审批完了之后还要交给这个部门主管的上级公司老总进行审批。那么针对这个简单的流程,我们应该从哪里下手呢?

首先第一件事情就是写流程定义文件,那么这个文件我们用什么来写呢,他就是一个符合某个语法的xml文件,幸运的是jbpm给我们提供了一个集成的开发环境让我们来用。

首先去官网上下一个jbpm-jpdl-suite-3.2.GA包,解压后你会发现他里面有一个designer文件夹,那个里面就是我们写流程定义文件的开发环境,他是一个eclipse的插件,但是好像他给我们的那个eclipse版本有问题,建议大家从新下一个eclipse-SDK-3.2.1-win32.zip这个版本的eclipse,然后覆盖他给我们提供的那个。

准备工作做完了,那么我们就开始吧,首先我们打开解压目录下的designer文件夹中的designer.bat文件,他弹出一个eclipse,然后我们就用这个东西来开发我们的流程定义文件了。

打开之后你就会看见一个他的小例子,不过我们不去用他,我们自己新建一个工程。右键-new-other-jBoss jbpm-process project。这个时候你会看见他弹出一个对话框,输入你的工程名字,然后点击next,这个时候你会发现他已经把jbpm加载进去了,记住要选中Generate simple ......。

工程建立完了,我们开始建立我们的流程定义文件。在工程里面你会发现src/main/jpdl这个source folder,然后你会看见他里面已经有了一个流程定义文件了,但是我们不去用他的,我们自己建立一个,右键src/main/jpdl,然后new-other-jBoss jbpm-process definition。这个时候他就会弹出一个对话框,起一个你要写的流程定义文件的名字输入进去,OK,可以了。这个时候你打开你建立的那个文件夹,里面就有processdefinition.xml文件,ok,打开他。

在右面的图里面你就可以看到一张什么都没有的白纸,我们看看这部分左面的那些东西,什么start啊,end啊,tasknode啊,fork啊,join啊。那我们来解释一下这是个什么东西呢,我们看看我们的需求,员工要写一个报销单,然后交给部门主管来处理,那么部门主管就应该算是一个tasknode,他就是一个任务节点。start和end其实就是一个虚状态,当我们写完报销单的时候我们就提交了,这个时候他就到了第一个tasknode这个节点了。然后他审批完了还要交给总经理审批,那么他又是一个tasknode,然后总经理审批完了结束,ok,是一个end。

start--》tasknode(部门主管审批)--》tasknode(总经理审批)--》end。

如果觉得看的有点模糊可以看看我传上来的那个图。然后你在这个试图框的下面可以看到有个source,点击一下,就会发现他已经自动的给你生成xml代码了。但是这样还是有点不够,我们只是定义了一个tasknode节点,并没有定义tasknode节点的任务由谁来做。那么我们还要定义一个tasknode节点是由谁来做的:
那么这段代码是这么写的:


这样的话我们的流程定义文件就定义完了,但是这只是把文件定义完了,系统并不知道啊,所以我们还要把我们的文件部署到系统中去,那么这个过程是这样的:

首先我们在src/main/java里面新建立一个包,然后建立一个class,随便起个名字,就叫TestJBPM_01吧,那么在这个类里面我们要做的是什么呢?我们要先导入表,因为jbpm要运行就要用到很多个表,ok,那么我们这个里面导入表和hibernate导入表是差不多的,它的代码是这样的:
package com.jbpm.test;import junit.framework.TestCase;import org.jbpm.JbpmConfiguration;import org.jbpm.JbpmContext;import org.jbpm.graph.exe.ProcessInstance;public class TestJbpm_05 extends TestCase {static JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();public void testJbpm(){JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();jbpmContext.setSessionFactory(HibernateUtil.getSessionFactory());try{Document document = (Document)jbpmContext.getSession().load(Document.class, 3);long processInstanceId = document.getProcessInstanceId();ProcessInstance processInstance = jbpmContext.getProcessInstance(processInstanceId);processInstance.signal();}finally{jbpmContext.close();}}}


好啦,jbpm的简单例子就到这里了,有什么问题大家可以给我留留言,还请大家多多指教小弟啊。后面我还会写点更具体的一些问题,比如说列出提交到这个人这还没有审批的公文啊,还有如果有多个分支的话应该怎么去做啊等等等等。



39 楼 fjilyfe 2008-09-25 hsnh6020 写道
楼主,可以做一个完整的例子上传吗?比较有实用价值的,包括会签什么的,就是从页面jsp到后台,最好结合struts我好需要啊期待您的新作!!!

呵呵,哥们,我也在公司做项目啊现在,很忙地,你有什么问题我们可以讨论讨论,不过要我完成这么大的一个东西,实在有点没时间。 40 楼 hsnh6020 2008-09-26 fjilyfe 写道hsnh6020 写道
楼主,可以做一个完整的例子上传吗?比较有实用价值的,包括会签什么的,就是从页面jsp到后台,最好结合struts我好需要啊期待您的新作!!!

呵呵,哥们,我也在公司做项目啊现在,很忙地,你有什么问题我们可以讨论讨论,不过要我完成这么大的一个东西,实在有点没时间。

呵呵,不需要太大的,就一个简单流程,结合页面做一个就好了,你在北京吗?我在合力金桥软件
41 楼 上柳橙 2008-10-28 楼主你好,
按你的帖子,在TestJbpm_03这个文件里,
其中session = HibernateUtil.getSession();这句过不错,把鼠标移到这行,
报HibernateUtil cannot be resolved.
是不是缺少引用包????
望楼主给指点!先谢过! 42 楼 上柳橙 2008-10-28 还有Document这个类 没看到你有引用包嘛

另外我看了org.dom4j里的Document定义,它是个interface
如果是接口,又不可以new,

楼主给的代码是可以运行的嘛

43 楼 egooooo 2008-10-30 问三个问题:
1,作者的例子中HibernateUtil是否要自己写
2,能否给出Document这个类
3,Document document = (Document)jbpmContext.getSession().load(Document.class,1); 这个不是很明白,难道使用1来代表Document这个实例? 44 楼 xiao_2008 2008-11-06 找了半天资料,没有教程什么都没有,幸亏发现了这个,我才慢慢开始入门了解,感激不尽啊,交流促进技术的发展 45 楼 black.angel 2008-11-07 大哥,好像用不了。 46 楼 black.angel 2008-11-07 楼主能不能发一下您的工程项目图? 47 楼 henujun 2008-11-14 谢谢大家啦,小弟会努力地! 48 楼 lwd1010 2008-11-19 都需要什么数据库表呀?

Document doc = new Document();
doc.setTitle("title3");
doc.setContent("this is content3");
session.save(doc);
session.getTransaction().commit();

这个保存到哪去了?
能把数据库脚本发一下吗?
我现在对工作流也是刚学,希望能帮助一下,不胜感激! 49 楼 mowenzheng 2008-12-30 请教 TestJBPM_03中的 HibernateUtil哪来的?? 50 楼 mowenzheng 2008-12-30 问三个问题:
1,作者的例子中HibernateUtil是否要自己写, 这个类哪来的??
2,能否给出Document这个类
3,Document document = (Document)jbpmContext.getSession().load(Document.class,1); 这个不是很明白,难道使用1来代表Document这个实例 51 楼 hbing110 2009-01-06 多谢!好东西值得学习,期待更多的.好帖子它是沉不下去的 52 楼 76196333 2009-01-06 我以前没有用工作流,我们用的是标志位确定工作流程
因为我们工作流是用户自己定制的,
不知道jbmp能不能用户定制工作流程 53 楼 bingqqbing 2009-01-18 HibernateUtil是什么? 54 楼 kjj 2009-01-18 bingqqbing 写道HibernateUtil是什么?
那是一个管理hibernate session的工具类! 55 楼 xujie2009 2009-03-06 很有用,呵呵,终于明白怎么委派给具体的人了!!! 56 楼 szy5200000 2009-03-11 都没看到一个主方法。。不知道你程序最后怎么运行啊 。。 57 楼 wumingjiayuan 2009-03-12 为什么不出个视频呢
如果出了视频,我第一个要,谢谢,非常感谢 58 楼 happy200318 2009-05-03 多谢,最近学习工作流 对我有很大的帮忙

读书人网 >软件架构设计

热点推荐