事件与监听器

边界事件

边界事件是绑定在活动上的“捕获型”事件,会一直监听所有处于活动中的某种事件的触发,在捕获到事件之后中断活动,然后从边界事件类型的输出流继续执行。

  • 一旦边界事件触发,当前活动就会被中断,然后按照边界事件之后的输出流继续执行。
  • 边界事件和所关联的活动有一个特殊的关系附加,而且一个活动只能绑定一个边界事件,每个边界事件类型都是听过属性 attachedToRef 指定附加到抛出边界事件的活动上。
    对应的XML:
 <boundaryEvent attachedToRef="someActivity" id="boundaryId" cancelActivity="false">
  </boundaryEvent>

定时器边界事件

定时器边界事件和定时器启动事件类似,只不过两者的应用场景不同,定时器启动事件应用于在一个指定的时间启动一个新的流程,而定时器边界事件需要附属在一个非自动任务,调用活动,子流程上,在上游任务执行完成之后开始倒计时预设时间。


image.png

对于的XML

  <boundaryEvent attachedToRef="someActivity" id="boundaryId" cancelActivity="false">
            <timerEventDefinition>
                <timeDuration>P3D</timeDuration>
            </timerEventDefinition>
        </boundaryEvent>

对应的示例图:


image.png

异常边界事件

异常边界事件用来捕获嵌入子流程或者调用活动抛出的异常。异常在抛出之后被主流程的异常边界事件捕获,同时嵌入子流程或者调用活动中的活动也被中断执行。


image.png

对应的XML

 <subProcess id="subProcess1">
            <endEvent id="endEvent" name="error">
                <errorEventDefinition errorRef="A001">
                    
                </errorEventDefinition>
            </endEvent>
        </subProcess>
        
        <boundaryEvent attachedToRef="subProcess1" id="boundaryId1">
            <errorEventDefinition errorRef="A001"></errorEventDefinition>
        </boundaryEvent>

对应的实例图:


image.png

信号边界事件

信号边界事件可以捕获流程执行过程中抛出的信号,可以附加在各自活动和子流程上。信号边界事件是全局的。

取消边界事件

取消边界事件是专门针对事物子流程所设立的,用来捕获子流程中抛出的取消事件。

补偿边界事件

补偿边界事件用于事物子流程中针对事物失败后的业务逻辑进行补偿。

中间捕获事件

中间捕获事件就是流程的拦路虎,根据事件类型的不同需要使用不同的方式才能继续执行后续的输出流活动。

定时器中间捕获事件

定时器中间捕获事件和定时启动事件,定时器边界事件的功能,配置参数的方式都类似,都是在一个特定的时间或者时间间隔之后被触发。

信号中间捕获事件

信号中间捕获事件用来捕获被当前流程或者其他流程抛出的信号事件,捕获的条件就是信号的ID一致。

消息中间捕获事件

消息中间捕获事件和信号中间捕获事件类似,不同的是信号事件是广播式传播,而消息中间捕获事件是定向一对一的传递。

中间抛出事件

中间抛出事件和中间捕获事件是两个相互依赖的关系,中间捕获事件需要有事件抛出才能被触发,而中间抛出司机需要有对于的捕获事件接收才有意义。

空中间抛出事件

空中间抛出事件是BPMN规范中没有任务功能的事件,因此执行到空中间抛出事件时直接跳过。

信号间抛出事件

信号中间抛出事件可以抛出一个信号,然后交给引擎传播信号事件。
事件类型太多了我也搞不清到底有啥用,先把它罗列出来,等到真正使用的时候,再来好好查一下。

监听器

监听器是activiti 在BPMN规范的基础上扩展的功能,是业务和流程非浸入式的粘合剂。
监听器分为两类:执行监听器和任务监听器。

执行监听器

执行监听器允许在执行过程中执行Java代码。
执行监听器可以捕获事件的类型:
流程实例启动,结束
输出流捕获
获取启动,结束
路由开始,结束
中间事件开始,结束
触发开始事件,触发结束事件

监听器执行类 属性说明和实例
class 需要实现接口 ExecutionListener <activiti:executionListener event="end" class="com.xiaoyuxixi.TaskListener"></activiti:executionListener>
expression 定义一个表达式,类似于el表达式 <activiti:executionListener event="end" expression="${pojo.method(execution.eventName)}"></activiti:executionListener>
delegateExpression 利用spring代理实现,<activiti:executionListener event="end" delegateExpression="${procinstCompleteListener}"></activiti:executionListener>

选择一种就好,通常我们都使用最后一种。

任务监听器

相对于执行监听器的使用范围,任务监听器的范围就要小得多,因为他只能用于用户任务。

  • create 在任务被创建且所有任务属性设置完成之后才触发
  • assignment 在任务被分配给某个办理人之后触发,需要注意的是,assignment事件总是在create事件被触发之前触发
  • 在配置了监听器的上一个任务完成时触发,也就是在运行时数据被删除的时候触发。
监听器执行类 属性说明和实例
class 需要实现接口 TaskListener
expression 定义一个表达式,类似于el表达式 <taskListener event="end" expression="${pojo.method(execution.eventName)}"></activiti:executionListener>
delegateExpression 利用spring代理实现,<activiti:taskListener event="assignment" delegateExpression="${taskAssignmentListener}" </activiti:taskListener>

好了,activiti理论部门终于告一段落了,后面都是对这些理论的一些实践。理论确实枯燥了些,可是没有理论的指导,也出不了实践的真知。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容