工作流(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回复。

  后话:下一节将进行流程的持久化表的创建。有时间推出。

  

  

posted @ 2012-09-18 15:11  智菲尔  阅读(330)  评论(0)    收藏  举报