JBOSS JBPM 学习笔记

工作流系统是以规格化的流程描述作为输入的软件组件,它维护流程的运行状态,并在人和应用之间分派活动。

一些基本的术语:

流程定义(process definition)是一个业务流程或过程的规格化描述。

流程实例(process instance. 是流程定义的一个运行实体。

流程上下文变量(process context variable ,或简称变量,是与流程实例相关的变量

 

package com.sample;

 

import junit.framework.TestCase;

import org.jbpm.graph.def.ProcessDefinition;

import org.jbpm.graph.exe.ProcessInstance;

import org.jbpm.graph.exe.Token;

 

public class testHelloWorldProcess extends TestCase {

       public void testHelloWorldProcess() {

              // 这个方法展现流程定义和流程执行的定义

              // 流程定义有3个节点.

              // 一个未命名的开始状态start-state,一个状态 's'

              // 一个结束状态名字为'end'.

              // 下面行解析一个xml text为一个ProcessDefinition对象(流程定义)

              // ProcessDefinition 把流程定义形式描述为java对象

              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>");

 

              // 下一行建立了一个流程执行定义.

              // 在构造后,流程执行有一个主要的执行路径

              // (= root token 根令牌) 此时位置在start-state

              ProcessInstance processInstance = new ProcessInstance(processDefinition);

 

              // 在构造后流程执行有一个主要的执行路径

              // (= roottoken 根令牌) .

              Token token = processInstance.getRootToken();

 

              // 构造后, 位置处于流程定义执行路径start-state的位置

              assertSame(processDefinition.getStartState(), token.getNode());

 

              // 现在开始流程执行,离开start-state 结束默认的转换(transition)

              token.signal();

              // 这个signal方法将会阻塞直到流程执行进入 wait 状态

 

              // 流程执行在状态's' 进入第一个 等待状态

              // 因此执行主路径现在位置在 状态's'

              assertSame(processDefinition.getNode("s"), token.getNode());

 

              // 我们再送另外一个信号signal. 这将继续执行离开状态's' 结束默认的转换(transition)

              token.signal();

              // 现在信号signal方法将返回,因为流程实例到达了end-state 结束状态

 

              assertSame(processDefinition.getNode("end"), token.getNode());

       }

 

}

 

 

 

对于流程定义可以要用JBoss的图形自动生成

 

点击source会生成下面的代码:

<?xml version="1.0" encoding="UTF-8"?>

 

<process-definition

  xmlns="urn:jbpm.org:jpdl-3.1"  name="test">

   <start-state name="start">

      <transition name="" to="s"></transition>

   </start-state>

 

   <state name="s">

      <transition name="" to="end"></transition>

   </state>

  

   <end-state name="end"></end-state>

</process-definition>

可以把加载流程定义文件,

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>");

 

改为:

 

FileInputStream fis = new FileInputStream("processes/test/processdefinition.xml");

              ProcessDefinition processDefinition = ProcessDefinition.parseXmlInputStream(fis);

 

 


对应的流程定义文件为:

<process-definition>
    
    

  
  
   
    
  
    <start-state>
    
    
    <transition to="auction" />
    
    
  </start-state>
    
    
    <state name="auction">
    
    
    <transition name="auction ends" to="salefork" />
    
    
    <transition name="cancel" to="end" />
    
    
  </state>
    
    
 // fork表示要进行分叉的情形 
     
     

//一个分支把一个执行路线分割成多个兵法的执行路线. 默认分支的行为是为每个离开分支转换建立一个子令牌,在令牌要到达的分支之间建立一个父母-子女 关系.

  <fork name="salefork">
    
    
    <transition name="shipping" to="send item" />
    
    
    <transition name="billing" to="receive money" />
    
    
  </fork>
    
    
    <state name="send item">
    
    
    <transition to="receive item" />
    
    
  </state>
    
    

  
  
   
    
  
    <state name="receive item">
    
    
    <transition to="salejoin" />
    
    
  </state>
    
    
    <state name="receive money">
    
    
    <transition to="send money" />
    
    
  </state>
    
    

  
  
   
    
  
    <state name="send money">
    
    
    <transition to="salejoin" />
    
    
  </state>
    
    
   //join表示要进行合并在一起的情形 
     
     

//默认联合(join)假设所有来自同一个父母的子令牌联合.当在上使用fork(分支)这个情形就出现了并且所有令牌分支建立,并且到达同一个联合(join).当全部令牌都进入联合的时候,联合就结束了. 然后联合将检查父母-子女. 当所有兄弟令牌到达联合(join),父母令牌将传播(唯一的)离开转换. 当还有兄弟令牌活动时,联合的行为将作为等待状态.


  
  
   
    
  
    <join name="salejoin">
    
    
    <transition to="end" />
    
    
  </join>
    
    
    <end-state name="end" />
    
    
  </process-definition>
    
    

   

参考资料:http://dl2.csdn.net/down4/20070802/02094345367.swf

                                  

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值