jBPM4.4开发(一)------------start,end,state活动节点

本文介绍了jBPM4.4中的start, end和state活动节点。start节点作为流程实例的起点,end节点用于结束流程,state节点则作为等待状态。详细阐述了各个节点的特性,包括子元素和实际应用场景,并通过两个实例展示了序列状态和可选择状态的流程定义及测试执行过程。" 132935184,20038906,Jetpack Compose与Room:Android数据持久化实践,"['Android开发', 'Jetpack Compose', '数据库', 'Room']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,start

start活动的意义在于指定了一个流程实例应该从哪里开始,即流程定义的入口。

start的子元素:

         name:活动的名称,在启动活动没有内部转移时,name名称是可选的。

         transition:用来指定流出的转移,指向流程的下一个活动。

二,end

end活动的意义在于结束了一个流程实例,即流程定义的结束点。

一个流程可以有多个end ,这样就很容易显示出流程处理实例的不同结果。如:

特殊的end-cancel和end-error。在一些特定的流程里,需要区分到底是为什么结束的,怎么结束的。如差旅费报销申请流程,可以被批准而正常结束;也可以被领导不批准而被取消。在一般的流程里一般不区分end和end-cancel,但是如果做的在精细点,可以让不同的结果,流向不同的结束。

三,state

state活动作为一个等待状态的活动。流程处理的流向会在外部触发器调用提供的API之前一直等待。

四,实例

1.序列状态节点

  流程定义

state.jpdl.xml 如下:

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

<process name="state" xmlns="http://jbpm.org/4.4/jpdl">
   <start g="28,95,48,48" name="start1">
      <transition g="-10,-10" name="to a" to="a"/>
   </start>
   <end g="540,94,48,48" name="end1"/>
   <state g="123,96,92,52" name="a">
      <transition g="-15,-13" name="to b" to="b"/>
   </state>
   <state g="267,92,92,52" name="b">
      <transition g="-13,-19" name="to c" to="c"/>
   </state>
   <state g="395,90,92,52" name="c">
      <transition g="-23,-13" name="to end1" to="end1"/>
   </state>
</process>

state节点的测试类:TestState

 

package com.itstudio.jbpm.p;

import org.jbpm.api.Configuration;
import org.jbpm.api.Execution;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.HistoryService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;
import org.jbpm.api.TaskService;

public class TestState {
 public static final Configuration configuration = new Configuration();
 public static final ProcessEngine processEngine=configuration.buildProcessEngine();
 public static final RepositoryService repositoryService= processEngine.getRepositoryService();
 public static final ExecutionService executionService=processEngine.getExecutionService();
 /**
  * @param args
  */
 //发布流程
 public void depoly(){
  repositoryService.createDeployment()
   .addResourceFromClasspath("com/itstudio/jbpm/p/state.jpdl.xml").deploy();
  System.out.println("发布成功!");
 }
 public void test(){
  //启动流程
  ProcessInstance processInstance = executionService.startProcessInstanceByKey("state");
  System.out.println("流程实例Id:" + processInstance.getId());      
  System.out.println("流程定义Id:" + processInstance.getProcessDefinitionId());
  ProcessInstance processInstanceA = executionService.signalExecutionById(processInstance.getId(),"to a");
  System.out.println("是否位于a节点:"+processInstanceA.isActive("a"));
  System.out.println("a处流程是否结束---->"+processInstanceA.isEnded());
  System.out.println("向下执行...");
  ProcessInstance processInstanceB = executionService.signalExecutionById(processInstanceA.getId());
  System.out.println("是否位于b节点:"+processInstanceB.isActive("b"));
  System.out.println("b处流程是否结束---->"+processInstanceB.isEnded());
  System.out.println("向下执行...");
  ProcessInstance processInstanceC = executionService.signalExecutionById(processInstanceB.getId());
  System.out.println("是否位于c节点:"+processInstanceC.isActive("c"));
  System.out.println("c处流程是否结束---->"+processInstanceC.isEnded());
  System.out.println("向下执行...");
  ProcessInstance endInstance = executionService.signalExecutionById(processInstanceC.getId());
  System.out.println("当前流程是否结束---->"+endInstance.isEnded());
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  TestState t = new TestState();
  t.depoly();
  t.test();
 }
}
运行结果:

2.可选择状态节点

流程定义:

teststate.jpdl.xml   如下:

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

<process name="teststate" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="23,164,48,48">
      <transition name="to A" to="A" g="-18,-18"/>
   </start>
   <state name="A" g="125,163,92,52">
      <transition name="to B" to="B" g="-6,-23"/>
      <transition name="to C" to="C" g="-5,-13"/>
   </state>
   <state name="B" g="276,106,92,52">
      <transition name="to end1" to="end1" g="-29,-14"/>
   </state>
   <state name="C" g="282,207,92,52">
      <transition name="to end1" to="end1" g="-27,-10"/>
   </state>
   <end name="end1" g="471,166,48,48"/>
</process>

 

测试类:TestStateDemo

package com.itstudio.jbpm.p;

import org.jbpm.api.Configuration;
import org.jbpm.api.ExecutionService;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.ProcessInstance;
import org.jbpm.api.RepositoryService;

public class TestStateDemo {
 public static final Configuration configuration = new Configuration();
 public static final ProcessEngine processEngine=configuration.buildProcessEngine();
 public static final RepositoryService repositoryService= processEngine.getRepositoryService();
 public static final ExecutionService executionService=processEngine.getExecutionService();
 /**
  * @param args
  */
 public void deploy(){//发布流程
  repositoryService.createDeployment()
  .addResourceFromClasspath("com/itstudio/jbpm/p/teststate.jpdl.xml").deploy();
 System.out.println("发布成功!");
 }
 public void test(){
  ProcessInstance processInstance = executionService.startProcessInstanceByKey("teststate");
  System.out.println("流程实例Id:" + processInstance.getId());      
  System.out.println("流程定义Id:" + processInstance.getProcessDefinitionId());
  ProcessInstance instanceA = executionService.signalExecutionById(processInstance.getId());
  System.out.println("是否位于A节点---->"+instanceA.isActive("A"));
  System.out.println("A处流程是否结束---->"+instanceA.isEnded());
  System.out.println("向下执行...");
  ProcessInstance instanceB = executionService.signalExecutionById(instanceA.getId(),"to B");
  System.out.println("是否位于B节点---->"+instanceB.isActive("B"));
  System.out.println("B处流程是否结束---->"+instanceB.isEnded());
  System.out.println("向下执行...");
  ProcessInstance endInstance = executionService.signalExecutionById(instanceB.getId());
  System.out.println("流程是否结束----->"+endInstance.isEnded());
 }
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  TestStateDemo demo = new TestStateDemo();
  demo.deploy();
  demo.test();
 }

}
运行结果:

By Mr.Z

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值