JBPM这个词对于我来说应该是非常新的一个词,记得曾经一位学者提出一个理论,大致意思就是说一个人知道的或者接触的知识面越广越害怕,越觉得自己渺小,记得当初来到传智前一月,学完java基础,感觉自己真的也是个java高手了,可是随着学习的深入,越来越恐惧,真的有太多未知的东西了,学习的路还有很漫长,就像jbpm一样,第一天上课,真的有点慌了,因为这是来传智这么久了,第一次感觉有点晕晕的,不明白,不过还好的是教课的汤老师极具耐心,为了帮我彻底弄懂jbpm,显示举例,然后又画图,一遍遍,最后算是彻底明白了,而且,汤老师教给了我们很多自学的方法,最近学习感觉还是很开心的,所以今天小试牛刀,编写我的第一个流程定义的程序。
一、第一个小程序
1. 安装插件,并准备环境
按照要求安装插件,然后导入jar包。
n 安装插件:
1)MyEclipse6.x
在Eclipse安装目录下的eclipse目录中创建links目录(有就不用创建了), 然后建立一个.link文件,然后加入path即可。
2)MyEclipse7.x
a) 与MyEcplise6.x的安装方式不一样,所使用的插件版本也不一样。从网上下载7.x的插件版本
b) 可以把插件放到dropins目录中。
注1)插件在eclipse3.3的版本上才能正常工作,所以myeclipse5.1(eclipse3.2)不能使用这个插件。
注2)指定的插件的路径中不能含有中文。
n 添加并修改配置文件(hibernate)
2. 创建表结构
3. 设计流程定义,然后打包成zip文件
4. 部署流程定义
解析流程定义有三种方式(ProcessDefinition的静态方法):
1) 解析xml文件:parseXmlResource或parseXmlInputStream和parseXmlReader;
2) 解析par包:parseParResource与parseParZipInputStream。
3) 是解析xml字符串:parseXmlString;
注意:parseParResource以及parseXmlResource(xmlResource)接受的参数是流程定义文件的路径,这个路径是相对于classpath的根路径的一个相对路径。
5. 执行流程
流程实例可以通过ProcessDefinition.createProcessInstance()方法创建,或者是使用jbpmContext.getGraphSession().findLatestProcessDefinition("流程定义文件名")或者new ProcessInstance(ProcessDefinition pd)并传递一个流程定义来创建,总之创建的流程实例一定是要是属于(使用)某个流程定义的。启动流程后不要忘了使用ProcessInstance.signal()方法离开开始状态。
a) 启动(创建)流程实例(Signal)
b) 获取任务列表(只是自已的任务实例列表)
jbpmContext.getTaskList(actorId)
c) 办理任务
i. 开始任务
TaskInstance.start();
ii. 结束任务
TaskInstance.end()
其中bc连个步骤是循环执行。
二、流程变量
1. 变量的生命周期
变量的访问和赋值是在某一个token上进行的,缺省时,是基于root Token。每个Token(执行路线)有它自己的一套流程变量。变量的作用域和所属的Token的生命周期一致,不同的Token上的同名变量互不影响。
我们通过org.jbpm.context.exe.ContextInstance来操作变量
2.值的要求
变量只支持以下类型:java.lang.String、java.lang.Boolean、java.lang.Character、java.lang.Float、java.lang.Double、java.lang.Long、java.lang.Byte、java.lang.Short、java.lang.Integer、java.util.Date、java.io.Serializable、classes that are persistable with hibernate、byte[]
注:如果变量值是classes that are persistable with hibernate,则POJO的id应为long型或String型。