activiti.cfg.xml内容:

<?xml version="1.0"?>
<beans default-lazy-init="false"xsi:schemaLocation=" http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee"xmlns:util="http://www.springframework.org/schema/util" xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"><beanclass="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"id="processEngineConfiguration"><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activi1" /><property name="jdbcDriver" value="com.mysql.jdbc.Driver" /><property name="jdbcUsername" value="root" /><property name="jdbcPassword" value="root" /><property name="databaseSchemaUpdate" value="true" /><property name="jobExecutorActivate" value="true" /><property name="mailServerHost" value="mail.my-corp.com" /><property name="mailServerPort" value="5025" /><property name="history" value="full"></property></bean>
</beans>

方式一:使用java class来实现java服务任务

HelloService内容:

package org.mpc.final_activiti;import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;/*** * 作为activiti的ServiceTask的实现,必须实现JavaDelegate接口,但是不需要实现序列化接口* * activiti会使用反射机制将类初始化,因此在实现JavaDelegate接口的时候需要提供一个* 无参数的构造器,否则会抛出异常。* * @author mpc**/
public class HelloService implements JavaDelegate {@Overridepublic void execute(DelegateExecution arg0) throws Exception {System.out.println("---------------------------------------------");System.out.println();System.out.println("Hello Service " + this.toString()+ "Is Saying Hello To Every One !");System.out.println("---------------------------------------------");System.out.println();}}

测试方法:

package final_activiti.progress;import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.test.Deployment;
import org.junit.Test;public class ServiceTask1Test extends PluggableActivitiTestCase {@Test@Deployment(resources = "final_activiti/progress/serviceTask_01.bpmn")public void test() {assertProcessEnded(runtimeService.startProcessInstanceByKey("service1").getId());}}

测试结果:

从测试结果可以看到,我们在流程中定义的连个Service task都执行了,而且可以从红线标注处看到这两个Service是不一样的,也就是说activiti在每次需要执行一个Service task 的时候都重新创建了服务对象。

方式二:使用 Delegate expression来实现java服务任务

delegate对应的java类:

package org.mpc.final_activiti;import java.io.Serializable;import org.activiti.engine.delegate.DelegateExecution;
import org.activiti.engine.delegate.JavaDelegate;public class Helloservice1 implements Serializable, JavaDelegate {/*** 实现JavaDelegate接口,使用其中的execute方法 由于要放入流程定义中,所以要实现可序列话接口* */private static final long serialVersionUID = 5593437463482732772L;@Overridepublic void execute(DelegateExecution arg0) throws Exception {System.out.println("---------------------------------------------");System.out.println();System.out.println("Hello Service " + this.toString()+ "Is Saying Hello To Every One !");System.out.println("---------------------------------------------");System.out.println();}}

测试类:

package final_activiti.progress;import java.util.HashMap;
import java.util.Map;import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.test.Deployment;
import org.junit.Test;
import org.mpc.final_activiti.Helloservice1;public class ServiceTask2Test extends PluggableActivitiTestCase {@Test@Deployment(resources = "final_activiti/progress/serviceTask_02.bpmn")public void test() {//定义delegate放入流程定义中启动流程Map<String, Object> map = new HashMap<String, Object>();map.put("delegate", new Helloservice1());runtimeService.startProcessInstanceByKey("service2", map);}}

测试结果:

结果显示两个Service task 都执行了,而且可以发现,使用的是同一个服务对象。这样更节省系统开销吧。。。

方式三:使用expression

第二个Service task 的main config内容:

myBean对应的服务类:

package org.mpc.final_activiti;import java.io.Serializable;import org.activiti.engine.runtime.Execution;/*** * 不需要实现javadelegate,但是由于要放入到流程定义中,所以需要实现可序列话接口* * */
public class HelloService2 implements Serializable {private static final long serialVersionUID = 2356L;private String name = "test_mpc";/*** @Title: getName* @Description: 这里的get方法是必要的,因为在流程中直接使用对象.属性的方式调用属性的话,就相当于调用这里的get方法* @param @return 设定文件* @return String 返回类型* @throws* @author mpc*/public String getName() {return name;}public void print(Execution ex) {System.out.println("This is HellService2 Called by  process "+ ex.getId() + "who's saying hello ! ");}
}

测试类:

package final_activiti.progress;import java.util.HashMap;
import java.util.Map;import org.activiti.engine.impl.test.PluggableActivitiTestCase;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.test.Deployment;
import org.junit.Test;
import org.mpc.final_activiti.HelloService2;public class ServiceTask3Test extends PluggableActivitiTestCase {@Test@Deployment(resources = "final_activiti/progress/serviceTask_03.bpmn")public void test() {Map<String, Object> map = new HashMap<String, Object>();map.put("myBean", new HelloService2());ProcessInstance pi = runtimeService.startProcessInstanceByKey("service3", map);String s = (String) runtimeService.getVariable(pi.getId(), "myVar");assertTrue("test_mpc".equals(s));taskService.complete(taskService.createTaskQuery().singleResult().getId());assertProcessEnded(pi.getId());}}

测试结果:

activiti5第四弹----serviceTask中的java服务任务相关推荐

  1. activiti5第五弹 serviceTask中的webserviceTask 以及 shellTask

    web service task是BPMN2.0中的一种任务类型,在activiti5中它并没有专门的标签表示,而是使用了service task 来表示.而且有很多要配置的内容是无法用图形化工具来完 ...

  2. java关闭服务_实现优雅地关闭Docker中的java服务

    时至今日,Docker在项目中的应用越来越普遍了,但往往会遭遇一些麻烦,比如说,有几个请求至Docker中的服务,发起了事务处理业务,但每个事务完成可能需要1-5分钟,而此时我们正要将Docker停机 ...

  3. Thrift中实现Java与Python的RPC互相调用

    场景 Thrift介绍以及Java中使用Thrift实现RPC示例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1086894 ...

  4. Java服务启动慢,JVM预热的问题,我在k8s上改进了

    来源 | http://mtw.so/6qevJi JVM 预热是一个非常头疼而又难解决的问题.本文讨论了在运行在 Kubernetes 集群中的 Java 服务如何解决 JVM 预热问题的一些方法和 ...

  5. Java服务框架分析

    Android服务框架由本地服务框架(Native Service Framework)和Java服务框架(Java Service Framework)两部分组成. Java服务框架是一系列类的集合 ...

  6. android java 8_四个库,让你在 Android 中启用 Java 8 功能

    Java 8 的推出引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时简化了各种设计模式的实现方式,是 Java 有史以来最重要的更新. 自 Android N 之后,由于 J ...

  7. 简述java 线程四个状态_面四个选项中,哪些是线程进入阻塞状态的原因?_学小易找答案...

    [简答题]通过继承 Thread 类的方式创建两个线程,在 Thread 构造方法中指定线程的名字,并将这两个线程的名字打印出来. [论述题]请运用所学原理解释,为什么在孩子成长的过程中,家长要不断地 ...

  8. 【开发环境】Android 命令行中执行 Java 程序 ( IntelliJ IDEA 中创建 Java / Kotlin 工程 | dx 打包 DEX 字节码文件 | dalvikvm 命令 )

    文章目录 前言 一.IntelliJ IDEA 中创建 Java / Kotlin 工程 二.准备 Java 和 Kotlin 代码 三.编译在 PC 上可执行的 Java / Kotlin JAR ...

  9. 【福利】【送书第四弹】机器学习知识体系

    [福利][两周年庆典,送书第四弹] 本次赠送6本(以下两本随机赠送) 开奖方式:1024人或3天自动开奖 点击下方小程序 推荐理由: 本书是一本优秀的数据科学入门教材,由资深数据科学家撰写,不仅全面. ...

最新文章

  1. nginx将泛解析的匹配域名绑定到子目录配置方法
  2. QT学习笔记(-): 利用QHttp进行http下载(1)
  3. 在用户退出后,清除缓存,防止用户后退到网站中的功能页面
  4. 分布式锁的 3 种实现方案!
  5. 我是如何自学 Python 的,分享一下经验
  6. JavaScript 简史 1
  7. 《Queue,Stack,SortedList》---集合
  8. VB / VS 多语言软件设计
  9. python 批量gif转tif_使用Python 批量转移*.tif和*.mov文件
  10. dtools: error while loading shared libraries: libicui18n.so.55: cannot open shared object file
  11. FTP工具免费,6大免费的FTP工具
  12. 熟女给老实木讷男孩的恋爱建议(转帖)
  13. 数据一致性、准确性、完整性、及时性、有效性
  14. linux串口操作及设置
  15. GRU和LSTM的单元结构
  16. 《计算机网络—自顶向下方法》 第四章Wireshark实验:IP
  17. java mongodb开发_Java 操作 MongoDB
  18. openCV中二值化图像的方法
  19. TIA博途中如何调整LAD/FBD梯形图中字体大小?
  20. python 调用剪切板

热门文章

  1. 哪个html在大部分浏览器下是不隐藏的,前端浏览器兼容性问题总结
  2. HTML+CSS+JS实现 ❤️彩色3D线条动画特效❤️
  3. HTML+CSS+JS实现 ❤️翻页倒计时ui特效❤️
  4. 计算机硬件组成 pdf,计算机硬件的组成..pdf
  5. python xlwings api_2021-01-13python,xlwings,api运用,及一些问题
  6. web系统软件测试功能点,小程序、app、web测试的区别
  7. 小米手环导出心率_这个功能有意思,小米11支持指纹检测心率,没有手环也不怕...
  8. hp服务器装xp系统,教你惠普笔记本一键装xp系统的方法
  9. bootstrap 垂直居中 布局_CSS3 flex 布局必须要掌握的知识点
  10. IOS UIScrollView 滚动视图的使用和文档