JBPM 工作流引擎 JBPM指南 例子:客户动作(action)例子(3.5)

jbpm 事件与动作的含义解释以及代码配置 当流程进入、离开某个节点,或执行某个转换的时候,可以发出相应的事件,针对这些事件,我们可以编写Action类,来执行某些动作。 利用Action完成自动节点 所谓自动节点,即当流程进入节点之后,执行了某些动作,然后不需要人工的参与,自动流出节点。 立即下载

3.5. 客户动作(action)例子

声明:

本人E文VeryVeryPoor,又是刚刚开始学习JBPM工作流引擎,对原文及概念等理解不当的地方,请网友不吝赐教,吾将及时修改和更正。

本文仅是本人自己学习JBPM,对JBPM指南的学习理解过程。

还望可以对入门者有所帮助。共享之。

需要中英文对照Word文档者请联系:gutengcom@hotmail.com或留下邮件地址。

 

  动作是绑定客户代码到jBPM业务中的一种机制。动作能和它自己的节点联合起

来(如果在业务的图形表示中他们是相关的)或动作能被编入到例子的事件中。

取得一个转换(transition),离开一个节点或进入一个节点。如果是那样的话,

动作不但是图形表示中的一部分,而且他们在执行触发了运行业务执行时的事件

时被执行。

 

我们以着眼于动作的实现开始,我们正在使用的例子:MyActionHandler.这个动

作处理执行不能做到真正的引人入胜的东西…它只是设置boolean变量

isExecuted 为true.这个变量isExecuted是static类型因此它可以被来自内部动作的处理访问也是动作验证它的值。

关于动作的更多信息可以在Section 7.4, “Actions”查找。

/*
       
MyActionHandler 代表了一个类,一个在jBPM业务执行期间能够执行一些用户
        
代码的类。
        
*/
     
public class MyActionHandler implements ActionHandler {
     

   
     
   
/*
       
在每个测试前(在设置里),isExecuted的成员将被设置为false.
        
*/
     
  public static boolean isExecuted = false;  
     

   
     
   /*
       
这个动作将设置isExecuted为true,因此当动作被执行时,这单元测试将能够
        
被展示。
        
*/
     
  public void execute(ExecutionContext executionContext) {
     
    isExecuted = true;
     
  }
     
}
     

As mentioned before, before each test, we'll set the static field MyActionHandler.isExecuted to false;

  
       
/*
       
每个测试都是由设置MyActionHandler的静态成员变量isExecuted为false
        
开始。
        
*/
     
  public void setUp() {
     
    MyActionHandler.isExecuted = false;
     
  }
     

We'll start with an action on a transition.

public void testTransitionAction() {
     
    
       
/*
       
下面的过程是hello world业务的一个变量。我们从状态’s’到end-state
        
转换添加个动作。这个测试的目的是展示了整合java代码到jBPM业务中是如何容易。
        
*/
     
    ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
     
      "<process-definition>" +
     
      "  <start-state>" +
     
      "    <transition to='s' />" +
     
      "  </start-state>" +
     
      "  <state name='s'>" +
     
      "    <transition to='end'>" +
     
      "      <action class='org.jbpm.tutorial.action.MyActionHandler' />" +
     
      "    </transition>" +
     
      "  </state>" +
     
      "  <end-state name='end' />" +
     
      "</process-definition>"
     
    );
     
    
     
//让我们为过程定义启动一个新的执行。
     
    ProcessInstance processInstance = 
     
      new ProcessInstance(processDefinition);
     
    
     
    
       
/*
       
下面的signal将引起离开启动状态到进入状态‘s’的执行.
        
*/
     
    processInstance.signal();
     

   
     
   
//这展现了MyActionHandler仍没被执行。
     
    assertFalse(MyActionHandler.isExecuted);
     
   
       
/*
       
这个主要的执行路径被定位到状态’s’
        
*/
     
    assertSame(processDefinition.getNode("s"), 
     
               processInstance.getRootToken().getNode());
     
    
     
    
       
/*
       
下面的signal将触发root token的执行。Token将取得动作的转换,在
        
调用signal的方法期间,动作将被执行。
        
*/
     
    processInstance.signal();
     
    
     
   
       
/*
       
这里我们能看到在调用 signal方法期间MyActionHandler被执行。
        
*/
     
    assertTrue(MyActionHandler.isExecuted);
     
  }
     

 

下面的例子展示了同样的动作,但现在动作将被分别替换这个进入节点和离开

节点。注意和转换形成对比,事件只有一个,一个节点比一个事件类型更多。因

此动作替换了一个节点将被放入一个事件元素。

时间

ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
     
  "<process-definition>" +
     
  "  <start-state>" +
     
  "    <transition to='s' />" +
     
  "  </start-state>" +
     
  "  <state name='s'>" +
     
  "    <event type='node-enter'>" +
     
  "      <action class='org.jbpm.tutorial.action.MyActionHandler' />" +
     
  "    </event>" +
     
  "    <event type='node-leave'>" +
     
  "      <action class='org.jbpm.tutorial.action.MyActionHandler' />" +
     
  "    </event>" +
     
  "    <transition to='end'/>" +
     
  "  </state>" +
     
  "  <end-state name='end' />" +
     
  "</process-definition>"
     
);
     

   
     
   
ProcessInstance processInstance = 
     
  new ProcessInstance(processDefinition);
     

   
     
   
assertFalse(MyActionHandler.isExecuted);
     
 
       
/*
       
下面的signal将引起离开启动状态到进入状态‘s’的执行.因此状态’s’
        
被输入,因此这个动作被执行。
        
*/
     
processInstance.signal();
     
assertTrue(MyActionHandler.isExecuted);
     

   
     
   

     
       
     
//我们重新设置MyActionHandler.isExecuted 为false
     
MyActionHandler.isExecuted = false;
     

   
     
   
/*
       
下面的signal将触发离开状态’s’的执行。因此动作将再次被执行。
        
*/
     
processInstance.signal();
     
// Voila.  
     
assertTrue(MyActionHandler.isExecuted);
     

待续……

 

HFSS仿真平行线定向耦合器学习笔记 材料:FR4(玻璃纤维环氧树脂),介电常数:4.4,损耗角正切:0.02,厚度0.8mm。扫频方式:快速扫频,扫频范围:1.0GHz~3.0GHz,步进:0.01GHz。端口2是端口1关于Y轴对称,端口3,端口4是端口1和端口2关于X轴对称得到。求解中心频率:2.0GHz,迭代次数:20,收敛误差为0.02。右键设置边界条件----辐射边界。激励方式:集总端口激励。 阅读详情

相关推荐

STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运

DMA(Direct Memory Access),直接存储器访问(或数据搬运),是STM32中很实用的一个外设。DMA 传输数据方式不需要 CPU 参与控制传输,也不用中断处理的方式进行数据搬运处理,纯粹通过硬件为 RAM 与 I/O 设备之间开辟一条直接传送数据的通路,使 CPU 的效率大大提高。

weixin_43866583的博客 1499

工作流表结构文档

JBPM数据库表说明 1 流程配置类数据库表: 1.1 JBPM_PROCESSDEFINITION:流程模版表 字段名 字段含义 主键 外键 ID_ 流程模版标识 √ × NAME_ 流程模版名称 × × VERSION_ 流程模版版本,对于同一流程模版,多次插入数据库时,数据库中有多条记录,每条记录中的版本号一次增加 × × ISTERMINATIONIMPLICIT_ 是否支持...

rr_gzxuan的专栏 363

2023年全国职业院校技能大赛高职组“区块链技术应用”赛项赛卷(3卷)解析

我们先绘制题组中所有设计图我这边作图用的国内的在线作图工具。

2301_76737000的博客 5419

JBPM数据库表解析与实例

[color=red]1.jbpm_action表[/color] 字段 含义 ID_ 标识 主键 class 流程动作分类 A(动作): org.jbpm.graph.def.Action ...

J﹀行天下~ 247

记一次从零到getshell的渗透历程

0x00 前期 拿到测试范围清单后,首先用脚本获取了下各个子站的标题,基本都是XXX管理系统。浏览器查看后,各个子站也大同小异,纯登录系统,带验证码。这些系统基本都是jsp写的,逮到了两个没有验证码的小宝贝,一番暴力破解,小宝贝对我说:别爱我,没结果。又看到了两个站返回的Set-Cookie头:rememberMe=deleteMe; 很明显,这是Apache Shiro。打了一波exp,没有反应,放弃。搞了三天啥都没搞出来,和女朋友出去玩散散心,还是很高兴。 0x01 初显进展 测试范围内有六个门户

CanMeng'Blog - 一个WEB安全渗透的技术爱好者 3969

【yolov8】与yolov5的区别及改进详解

yolov8-----有点厉害的目标检测框架.

qq_44878985的博客 3万+

JBPM基础

* 节点不同的节点类型代表不同的行为。** start-state 节点开始节点,标识流程开始边界。开始状态有且只有一个,就是说流程中不能有任何transition指向开始节点。在流程实例被创建后(启动),RootToken(根令牌)就指向start-state,并且处于等待状态,需要给Token发信号(signal)才能使流程继续执行。** end-state 节点结束节点,标识流程

sha_xinyu的专栏 694

从原理到代码:一文搞懂LFM信号脉冲压缩在Matlab中的实现

本文深入解析了LFM信号脉冲压缩的核心原理与Matlab实现方法。从线性调频信号的数学表达、时频特性入手,详细讲解了如何构建多目标回波仿真环境,并重点阐述了匹配滤波器的频域实现算法。文章提供了完整的、可运行的Matlab代码,涵盖信号生成、噪声添加、脉冲压缩及性能评估等关键步骤,并探讨了加窗处理、参数选择等工程实践中的考量,为雷达信号处理的学习与实践提供了清晰指南。

weixin_29063035的博客 415

jbpm的基本流程

理解JBPM(java Business Process Management)的基本概念: jPDL - JBPM Process Definition Language JBPM简要过程:1、定义流程(利用JPDL)2、部署流程(部署到数据库)3、创建公文并与流程实例绑定4、可通过JBPM的接口,触发流程向下流动5、可通过JBPM的接口,获得流动到某个用户那里的文档(即待处理任务列表)6、可通...

shaqiang32 349

实战案例—encrypt靶场(AES固定key篇)

AES是一种对称密钥加密方法,意味着加密和解密时使用相同的密钥。AES加密存在三种形式:AES-128、AES-192和AES-256,它们分别对应于三种不同的密钥长度——128位(即16字节)、192位(即24字节)和256位(即32字节)。通常情况下,密钥的长度越长,提供的安全性就越高,但相应地,加解密过程所需的时间也会增加。默认情况下,采用的是AES-128,其提供的安全性对于大多数应用来说已经足够充分。

zhouzhou_98的博客 498

mybaits-plus通用CRUD详解及代码案例

文章目录mybaitsplus通用CRUD插入操作方法定义测试用例mybaitsplus主键生成策略设置自增主键设置输入主键:UUID:ID_WORKER_STR:ID_WORKER:更新操作根据id更新方法定义:方法步骤根据条件更新方法定义:更新步骤:根据条件更新(可以更新NULL)删除操作根据id删除方法定义:删除步骤:根据 entity 条件删除方法定义:删除步骤:根据ID 批量删除方法定义:删除步骤:查询操作根据id查询方法定义:查询步骤:根据id批量查询方法定义:查询步骤:根据 entity 条件

流楚丶格念的博客 3405

Jbpm建模添加action和task的说明(自己理解和测试的:)

state 节点中无法直接添加Action如下写法"  " +       "    " +       "    " +       "    " +       "  " +是错误的task-node节点中无法直接添加Action       "  " +       "    " +       "    " +       "    " +       "  " +是错误的以上在流

dust的专栏 3082

基于STM32设计的个人健康检测仪(华为云IOT)(191)

本系统采用华为云物联网平台实现数据云端存储与分析,并通过自研手机APP提供远程监控界面,让用户无论身处何地都能及时掌握自身的健康数据,为用户提供个性化的健康管理方案,同时也为医疗机构提供了便捷的数据获取途径,助力实现智能化、精细化的医疗服务。

1678

Java工作流引擎:jBPM、Activiti以及SWF

http://zhouliang.pro/2013/07/06/bpm-jbpm-activiti/这只是一篇非常粗浅的记录我对工作流引擎认识的文章。知道工作流引擎是很久之前了,但是一直都没有机会尝试,一是没有业务上的需要,二是感觉工作流入门不容易。最近,项目中用到了一点工作流的东西,虽然我没有具体参与,但是了解一下还是好的。于是抽周末两天时间读了一些文章和jBPM以及Activiti的User ...

liutong123987的专栏 731

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

jBPM jPDL 3.2用户指南:第3章教程

作者:JBossWeek http://blog.csdn.net/JBossweek email:jbossweek AT gmail.com 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息

JBossWeek的专栏 3202

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

JBPM——工作流概念

一、概念        工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。具体的说工作流表达了一个抽象的流程定义,之所以说是抽象,因为它没有表示确切的执行者,比如某借款人被具体化为张三,部门主管成为张三的部门经理李四,

不忘初心 ,方得始终 2325

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

工作流JBPM

jbpm3共分为12种节点1.node节点:如果该节点没有定义ACTION,则流转到该节点时不会停留,会继续往下走,如果定义ACTION,执行完ACTION后会停在该节点上,调用 token.signal后继续流转 node节点支持事件 node-enter,node-leave2.state 节点 调用 token.signal后继续流转,否则会停下3.tasknode 节...

weixin_30919571的博客 367

jBPM3 vs jBPM4

转自http://www.javaeye.com/topic/333718 jBPM3 vs jBPM4JBoss Goup 目前已经发布了 jBPM4 Alpha1 版本,在版本 4 中最大的变化就是引入 PVM (流程虚拟机)的概念,而引擎内部的调度算法中重要的 Token 机制,在新版中也去掉了,纵观整个代码,变化可以说非常的大,笔者接下来就试着来比较一下这种变化,让

ucqqff的专栏 1220

JBPM工作流引擎数据库表结构解析3

1.11JBPM_EXCEPTIONHANDLER:流程异常处理器表   字段名 字段含义 主键 外键 ID_ 流程异常处理器标识 √   EXCEPTIONHANDLERNAME_ 流程异常处理器名称     TYPE_ 流程异常处理器所在的图形节点类型 "A"...

Mr.Sherlock 240

jbpm入门例子

工作流入门例子http://www.blogjava.net/chengang/archive/2006/07/13/57986.html 1.      jBPM的简单介绍 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储。    参考 http://www.jboss.com/products/jbpm 2

seelye的专栏 1332

jbpm gop的四个模型

作者:我想我是海GOP = groph oriented programing 面向图形编程JBPM的流程执行模型以下面几个模型为原型: Node 节点,Action 动作,Transition 流向,Excution 执行。 简单看过GOP的代码,初步了解了JBPM的执行模型及原理。先记下来。 Node:节点代表流程中一个状态,如开始、结束、等待等。一个节点里可以通往其他节点,我们把通往

jbpm_bpm的专栏 1021

JBPM工作流引擎数据库表结构解析2

1.5 JBPM_EVENT:流程事件表   字段名 字段含义 主键 外键 ID_ 流程事件标识 √   EVENTTYPE_ 流程事件类型名称     TYPE_ 流程事件所在的图形节点类型 "A" :Task "C" :ProcessState "D" :...

Mr.Sherlock 196

jbpm3与jbpm4实现对比

jBPM3 vs jBPM4 JBoss Goup 目前已经发布了 jBPM4 Alpha1 版本,在版本 4 中最大的变化就是引入 PVM (流程虚拟机)的概念,而引擎内部的调度算法中重要的 Token 机制,在新版中也去掉了,纵观整个代码,变化可以说非常的大,笔者接下来就试着来比较一下这种变化,让大家能有个直观的认识。当然 Jbpm4 ...

snowfox2008 513

JBPM工作流引擎数据库表结构解析1

1.1 JBPM_PROCESSDEFINITION:流程模版表   字段名 字段含义 主键 外键 ID_ 流程模版标识 √ × NAME_ 流程模版名称 × × VERSION_ 流程模版版本,对于同一流程模版,多次插入数据库时,数据库中有...

Mr.Sherlock 219

JBPM3的对象介绍

<br />首先介绍几个必要的JBPM中的实例对象。以方便谈论架构。<br />JbpmConfiguration: Jbpm的配置文件,<br />JbpmContext: 想当于根据配置文件,和数据库配置而生成相关的流程上下文。<br />Swimlane: 泳道用于简化指派参与者的操作的一种方式(指定参与者可以在多个地方,如:配置,或编码的方式指定。);<br />Node: 节点,所有节点的根类,代表了流程执行的节点。<br />Transition: 有向弧,流向,表明了流程执行的方向。<br /

ArtCodeWorks 128个字符,coding一个世界。 582
上一篇: JBPM 工作流引擎 JBPM指南 例子:任务指派实例(3.4)
下一篇: JBPM 工作流引擎 JBPM指南 jbpm 指南第一章翻译
sunkingcom
博客等级 码龄21年 4粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值