activity边界事件的使用

一.边界错误事件

流程:

3.边界错误事件属性配置界面:

4.子流程服务节点配置:

public class TestServiceListener implements JavaDelegate {


    @Override
    public void execute(DelegateExecution execution) {
        System.out.println("coming");
        throw new BpmnError("abc");
    }

}

流程进入到子流程的服务任务节点后会抛出BPMN异常"abc",此时错误边界事件会捕捉到这个异常,然后流转到"接收边界错误事件"节点。

说明:

若配置了边界错误事件的"错误引用"属性,则此引用必须包含抛出的异常信息,比如"错误引用"属性配置了"aaa",但是却抛出的是"abc"异常,异常无法别捕捉,则会产生错误。该属性可以为空,此时捕捉任何异常流转到"接收边界错误事件"节点。

PS:接收的是 BpmnError 异常

二、边界消息事件

1.图标:

2.流程图:

3.边界消息事件属性配置界面:

上述消息引用的选择需要在整个流程层次上提前定义才可以进行选择,如下:

 

此时,在边界消息事件组件上进行"信号引用"属性进行选择了。

触发:

        runtimeService.messageEventReceived("messageName",executionId);

边界消息事件只能根据executionId进行触发。

三、信号边界事件和中间信号捕获事件,两种方式使用方法几乎一样的,区别就是信号边界事件只能用在某个节点上,中间信号捕获事件只能单独作为一个节点使用。具体可看下方示例:

图标:

流程中的两种使用方式:

 边界信号事件:用在节点上

 

中间信号捕获事件:单独作为一个节点信息

 

边界事件节点属性配置:

"信号引用"属性节点在未配置前是无法选择的,需要提前配置,如下:

然后就可以选择刚刚配置的信号属性信息了。

激活信号事件:

     List<Execution> executionList=runtimeService.createExecutionQuery().signalEventSubscriptionName("Signal")
        .list();

//        此种方法只能针对没有TenantId的流程实例信息,有TenantId的不生效
        runtimeService.signalEventReceived(signalName);
//        此种方法针对没有TenantId的流程实例
        runtimeService.signalEventReceivedWithTenantId(signalName,TenantId);

信号事件是全局的,不局限于某个或某些流程实例,只要有相应"signalName"的都会收到信号事件

<think>好的,我现在需要处理用户关于Activiti7定时事件实现方式和错误处理的问题。首先,我得回忆一下Activiti7的相关知识。Activiti是一个工作流引擎,定时事件在流程中用于触发特定时间点或间隔的任务。用户提到了定时事件的实现方式和错误处理,可能需要详细说明配置方法和异常处理机制。 首先,关于定时事件的实现方式。Activiti7支持定时器开始事件、中间定时器和边界定时器等类型。定时器开始事件用于在指定时间启动流程,中间定时器用于等待一段时间后继续流程,边界定时器则是在某个任务上设置超时。这些都需要在BPMN流程定义中配置,比如使用timeDate、timeDuration或timeCycle属性。例如,timeCycle可以用Cron表达式来定义重复执行的时间规则。 然后,错误处理方面,用户可能想知道当定时事件出现错误时如何处理。Activiti7中的错误结束事件和错误边界事件是关键。错误结束事件会终止当前流程实例,并标记为错误状态,而错误边界事件可以捕获特定的错误并执行补偿逻辑。例如,在边界事件中配置错误代码,当子流程抛出错误时,主流程可以捕获并处理,比如发送通知或回滚操作。 接下来,我需要参考用户提供的引用内容。引用[2]提到了Activiti6.0的定时器开始事件和错误开始事件,但用户问的是Activiti7,不过基本概念可能相似。引用[3]和[4]涉及使用delay和定时任务的具体代码实现,但Activiti7的定时事件更多是流程定义层面的配置,而非代码中的定时器。不过,可能需要结合代码示例,比如在服务任务中调用定时服务。 需要注意的是,用户的问题可能还涉及如何在流程中处理定时事件引发的错误,比如超时后的补偿措施。这时候需要结合错误边界事件和补偿中间件,或者使用服务任务执行异常处理逻辑。同时,定时事件配置的正确性也很重要,比如Cron表达式是否正确,否则可能导致流程无法按预期触发。 最后,生成相关问题时要覆盖实现方式、错误处理、配置注意事项、与旧版本差异以及调试方法等方面,帮助用户全面理解。确保回答结构清晰,分点说明,并正确使用LaTeX格式,如流程变量使用$variable$,独立公式用$$...$$,但这里可能较少涉及数学公式,更多是流程配置和代码示例。</think>### Activity7 定时事件实现方式与错误处理 #### 一、定时事件实现方式 1. **定时器开始事件** 在BPMN流程定义中,通过`timerEventDefinition`配置定时触发条件,支持以下属性: - `timeDate`:指定具体时间点(ISO 8601格式),例如: ```xml <startEvent id="timerStart"> <timerEventDefinition> <timeDate>2024-01-01T00:00:00Z</timeDate> </timerEventDefinition> </startEvent> ``` - `timeDuration`:延迟触发时间,例如`PT5M`表示延迟5分钟。 - `timeCycle`:周期性触发(Cron表达式或重复间隔),例如`0 0/30 * * * ?`每半小时执行一次[^2]。 2. **中间定时事件** 用于在流程执行中暂停并等待特定时间,常用于超时控制: ```xml <intermediateCatchEvent id="timerCatch"> <timerEventDefinition> <timeDuration>PT1H</timeDuration> </timerEventDefinition> </intermediateCatchEvent> ``` 3. **边界定时事件** 附加到任务或子流程上,实现超时中断: ```xml <boundaryEvent id="timeoutBoundary" attachedToRef="task1"> <timerEventDefinition> <timeDuration>PT30M</timeDuration> </timerEventDefinition> </boundaryEvent> ``` #### 二、错误处理机制 1. **错误结束事件** 当流程因错误终止时,通过`errorEndEvent`标记错误类型,例如: ```xml <endEvent id="errorEnd"> <errorEventDefinition errorRef="paymentTimeoutError"/> </endEvent> ``` 流程实例状态将变为`ERROR`,需通过API查询处理[^1]。 2. **错误边界事件** 捕获子流程或任务抛出的错误,执行补偿逻辑: ```xml <boundaryEvent id="errorHandler" attachedToRef="subProcess"> <errorEventDefinition errorRef="networkError"/> </boundaryEvent> <sequenceFlow sourceRef="errorHandler" targetRef="retryTask"/> ``` 3. **定时事件错误场景处理** - **Cron表达式错误**:部署流程时校验失败,需修正表达式格式。 - **执行超时**:通过边界定时事件触发重试或通知: ```xml <serviceTask id="retryTask" activiti:class="com.example.RetryService"/> ``` #### 三、代码集成示例 通过服务任务调用定时逻辑(结合Quartz或Spring Scheduler): ```java public class TimerJobHandler implements JavaDelegate { @Override public void execute(DelegateExecution execution) { // 调用定时任务逻辑,例如: ScheduleService.scheduleRetry(execution.getVariables()); } } ``` 需确保定时任务与流程引擎的事务一致性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值