工作流(jBPM) - 学习笔记(一)- 工作流简介以及helloworld入门
前言:声明,本人不是一个jbpm高手,本学习笔记系列纯为自己最近刚接触工作流后的一个记录,以防日后查看。尽量以一个初学者的角度(自己本身就是一个初学者)来写,也为了让那些没有接触过jbpm的java程序猿做一个入门学习。如果有写的不好的地方,请留言,指正,小弟不盛感激,但是请勿骂小弟哟。呵呵。本学习笔记,我抽时间就会更新(由于平时工作也比较忙,精力有限呀),中间可能会有一些笔记写了一半就会放上来的情况。
(1)工作流简介
工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动进行,从而实现某个预期的业务目标,或者促使此目标的实现”。 -- 摘自《百度百科》
简单的来说,工作流其实就是把我们日常工作所需要的环节,按照某种规范进行自动化,比如‘请假申请’,传统的做法,首先我们需要填写一张请假申请单;然后交给我们的上级领导申批,若批准,请假成功,若否认,则请假不成功;所有的操作均由我们徒手完成。而现在我们的做法是将此流程自动化:使用计算机语言将流程自动化(这里使用jbpm流程引擎),现在我们请假,只需要打开电脑,打开浏览器(这里说的是b/s结构),打开请假系统,填写一个请假申请单,点击提交,这时候,上级领导再进入他的账号系统就可以看到这个请假单,根据实际情况做出判断,点击申批,还是拒绝,然后,申请人就登陆系统就可以看到结果了。这就工作流的一个实例,我们用通俗的语言来描述。
注:更多关于工作流的概念性的东西,可以参照‘百度百科’或者其它资料。
(2)一切源于helloworld
对于使用java开发的流程引擎工具很多,现在要说的是jboss组织下面的jbpm流程引擎,现在针对jbpm3进行流程开发,而jbpm4和jbpm3的区别还是比较大的,我们以后有机会再针对jbpm4进行入门学习。
官方下载地址(jbpm3): http://sourceforge.net/projects/jbpm/files/jBPM%203/
1、学习的话,我们选择下载 jbpm-starters-kit-3.1.x.zip,这样的一个包,这里我们使用jbpm-starters-kit-3.1.4.zip来学习。
2、解压开这个压缩包,里面有一个文件夹jbpm,将此做为一个java工程导入到我们的开发工具eclipse中。
3、在源文件目录src/java.examples中的org.jbpm.tutorial.helloworld包中,打开HelloWorldTest.java程序,部分代码如下,我们可以右键使用junit进行测试,运行。
部分代码如下:
testHelloWorld
// This method shows a process definition and one execution // of the process definition. The process definition has // 3 nodes: an unnamed start-state, a state 's' and an // end-state named 'end'. // The next line parses a piece of xml text into a // ProcessDefinition. A ProcessDefinition is the formal // description of a process represented as a java object. ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( "<process-definition>" + " <start-state>" + " <transition to='s' />" + " </start-state>" + " <state name='s'>" + " <transition to='end' />" + " </state>" + " <end-state name='end' />" + "</process-definition>" ); // The next line creates one execution of the process definition. // After construction, the process execution has one main path // of execution (=the root token) that is positioned in the // start-state. ProcessInstance processInstance = new ProcessInstance(processDefinition); // After construction, the process execution has one main path // of execution (=the root token). Token token = processInstance.getRootToken(); // Also after construction, the main path of execution is positioned // in the start-state of the process definition. assertSame(processDefinition.getStartState(), token.getNode()); // Let's start the process execution, leaving the start-state // over its default transition. token.signal(); // The signal method will block until the process execution // enters a wait state. // The process execution will have entered the first wait state // in state 's'. So the main path of execution is not // positioned in state 's' assertSame(processDefinition.getNode("s"), token.getNode()); // Let's send another signal. This will resume execution by // leaving the state 's' over its default transition. token.signal(); // Now the signal method returned because the process instance // has arrived in the end-state. assertSame(processDefinition.getNode("end"), token.getNode());
代码解释:
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(...) //此处将一个xml的流程定义字符串转换成一个流程的定义对象。从xml串中我们可以看到此流程有三个环节:开始状态、s状态、结束状态。相当于我们定义了一个请假申请的规则。
ProcessInstance processInstance = new ProcessInstance(processDefinition);//此处根据上一步的流程定义,创建一个流程实例。相当于我们要开始一个请假申请。
Token token = processInstance.getRootToken(); //这一步得到的是一个令牌,是jbpm3引擎中定义的一个概念,他可以操纵我们的流程动作。比如,让流程向下进行。
token.signal(); //指示流程实例向下一步(下一节点)走。
好了,到此为止,我们的工作流概念和jbpm流程引擎的helloworld入门程序已经完毕了,如有疑问,或者BUG发现请留言,或邮箱chengpengfei_2010@hotmail.com回复。
后话:下一节将进行流程的持久化表的创建。有时间推出。

浙公网安备 33010602011771号