BPMN2.0服务任务

2023-11-23 01:18
文章标签 服务 任务 bpmn2.0

本文主要是介绍BPMN2.0服务任务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 服务任务(Java Service Task)

服务任务图形元素:

2. 服务任务(Java Service Task)执行Java程序的方法

  • 执行实现JavaDelegate或ActivitiBehavior的类

  • 执行一个JavaDelegate对象表达式,通常是spring配置的bean

  • 执行调用方法表达式和值表达式

3. 执行实现JavaDelegate或ActivitiBehavior的类

两者区别:JavaDelegate为直接执行,ActivitiBehavior为流程等待

代码实现(代理类):

public class MyJavaDelegate implements JavaDelegate, Serializable {private static final Logger LOGGER = LoggerFactory.getLogger(MyJavaDelegate.class);@Overridepublic void execute(DelegateExecution execution) {LOGGER.info("run my java delegate {}", this);}
}

流程定义文件:

<process id="my-process"><startEvent id="start" />
<sequenceFlow id="flow1" sourceRef="start" targetRef="someTask" /><serviceTask id="someTask" name="Service Task"
activiti:class="com.syc.activiti.example.MyActivitiBehavior"/>
<sequenceFlow id="flow2" sourceRef="someTask" targetRef="end" /><endEvent id="end" /></process>

测试文件:

@Test
@Deployment(resources = "my-process-servicetask1.bpmn20.xml")
public void testServiceTask(){ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");List<HistoricActivityInstance> activityInstances = activitiRule.getHistoryService().createHistoricActivityInstanceQuery().orderByHistoricActivityInstanceEndTime().asc().list();for(HistoricActivityInstance activityInstance : activityInstances){LOGGER.info("activity = {}", activityInstance);}
}

测试输出效果:

同理,MyActivitiBehavior的测试类:

@Test
@Deployment(resources = "my-process-servicetask2.bpmn20.xml")
public void testUserTask2(){ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process");List<HistoricActivityInstance> activityInstances = activitiRule.getHistoryService().createHistoricActivityInstanceQuery().orderByHistoricActivityInstanceEndTime().asc().list();for(HistoricActivityInstance activityInstance : activityInstances){LOGGER.info("activity = {}", activityInstance);}Execution execution = activitiRule.getRuntimeService().createExecutionQuery().activityId("someTask").singleResult();LOGGER.info("execution = {}", execution);//节点继续向后执行ManagementService managementService = activitiRule.getManagementService();managementService.executeCommand(new Command<Object>() {@Overridepublic Object execute(CommandContext commandContext) {ActivitiEngineAgenda agenda = commandContext.getAgenda();agenda.planTakeOutgoingSequenceFlowsOperation((ExecutionEntity) execution,false);return null;}
});activityInstances = activitiRule.getHistoryService().createHistoricActivityInstanceQuery()
.orderByHistoricActivityInstanceEndTime().asc().list();for(HistoricActivityInstance activityInstance : activityInstances){LOGGER.info("activity = {}", activityInstance);}
}

4. JavaDelegate注入属性

//添加属性:姓名和描述
private Expression name;
private Expression desc;@Override
public void execute(DelegateExecution execution) {if(name != null){Object value = name.getValue(execution);LOGGER.info("name = {}", value);}if(desc != null){Object value = desc.getValue(execution);LOGGER.info("desc = {}", value);}LOGGER.info("run my java delegate {}", this);
}

流程定义文件代码ServiceTask部分代码

<serviceTask id="someTask" name="Service Task"
activiti:class="com.syc.activiti.example.MyJavaDelegate">
<extensionElements><activiti:field name="name" stringValue="The Java Delegate"/><activiti:field name="desc"><activiti:expression>my ${desc}</activiti:expression></activiti:field>
</extensionElements>
</serviceTask>

测试部分代码:

@Test
@Deployment(resources = "my-process-servicetask3.bpmn20.xml")
public void testServiceTask3(){Map<String, Object> variable = Maps.newHashMap();variable.put("desc", "the test java delegate");ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process",variable);}

测试效果输出:

5. 执行一个JavaDelegate对象表达式

<serviceTask id="servicetask" name="Service Task"activiti:delegateExpression="${myJavaDelegate}"/><serviceTask id = "servicetask" name="Service Task"activiti:class="com.syc.activiti.example.MyJavaDelegate"/>

 使用DelegateExpression与使用Activiti:class的区别:

6. 执行调用方法表达式和值表达式

(1)编写JavaBean类,该类实现序列化方法

public class MyJavaBean implements Serializable {private static final Logger LOGGER = LoggerFactory.getLogger(MyJavaBean.class);private String name;public String getName() {LOGGER.info("run getname name:{}",name);return name;}public void setName(String name) {this.name = name;}public MyJavaBean() {}public void sayHello(){LOGGER.info("run sayhello");}
}

 

这篇关于BPMN2.0服务任务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414273

相关文章

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。