ProcessEngineFactoryBean

<beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">    ...</bean>  <beanid="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean">  <property name="processEngineConfiguration"ref="processEngineConfiguration"/></bean>

Transactions

<beansxmlns="http://www.springframework.org/schema/beans"        xmlns:context="http://www.springframework.org/schema/context"       xmlns:tx="http://www.springframework.org/schema/tx"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd                           http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

  <beanid="dataSource"class="org.springframework.jdbc.datasource.SimpleDriverDataSource">    <propertyname="driverClass"value="org.h2.Driver"/>    <propertyname="url"value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"/>    <propertyname="username"value="sa"/>    <propertyname="password"value=""/>  </bean>

  <beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <propertyname="dataSource"ref="dataSource"/>  </bean>    <beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">    <propertyname="dataSource"ref="dataSource"/>    <propertyname="transactionManager"ref="transactionManager"/>    <propertyname="databaseSchemaUpdate"value="true"/>    <propertyname="jobExecutorActivate"value="false"/>  </bean>    <beanid="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean">    <propertyname="processEngineConfiguration"ref="processEngineConfiguration"/>  </bean>    <beanid="repositoryService"factory-bean="processEngine"factory-method="getRepositoryService"/>  <beanid="runtimeService"factory-bean="processEngine"factory-method="getRuntimeService"/>  <beanid="taskService"factory-bean="processEngine"factory-method="getTaskService"/>  <beanid="historyService"factory-bean="processEngine"factory-method="getHistoryService"/>  <beanid="managementService"factory-bean="processEngine"factory-method="getManagementService"/>

...

<beans>    ...  <tx:annotation-driventransaction-manager="transactionManager"/>

  <beanid="userBean"class="org.activiti.spring.test.UserBean">    <propertyname="runtimeService"ref="runtimeService"/>  </bean>

  <beanid="printer"class="org.activiti.spring.test.Printer"/>

</beans>
第一步: 构造Spring Context
ClassPathXmlApplicationContext applicationContext =     new ClassPathXmlApplicationContext("org/activiti/examples/spring/SpringTransactionIntegrationTest-context.xml");或者

@ContextConfiguration("classpath:org/activiti/spring/test/transaction/SpringTransactionIntegrationTest-context.xml")
第二步:获取service bean并调用它的方法
RepositoryService repositoryService =(RepositoryService) applicationContext.getBean("repositoryService");String deploymentId = repositoryService  .createDeployment()  .addClasspathResource("org/activiti/spring/test/hello.bpmn20.xml")  .deploy()  .getId();    
也可以以下面方式使用bean
UserBean userBean =(UserBean) applicationContext.getBean("userBean");userBean.hello();
user bean的代码
publicclassUserBean{

  /** injected by Spring */  privateRuntimeService runtimeService;

  @Transactional  publicvoid hello(){    // here you can do transactional stuff in your domain model    // and it will be combined in the same transaction as     // the startProcessInstanceByKey to the Activiti RuntimeService    runtimeService.startProcessInstanceByKey("helloProcess");  }    publicvoid setRuntimeService(RuntimeService runtimeService){    this.runtimeService = runtimeService;  }}

Expressions

Spring配置片段

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  ...
  <property name="beans">
    <map>
      <entry key="printer" value-ref="printer" />
    </map>
  </property>
</bean>

  <bean id="printer" class="org.activiti.examples.spring.Printer" />

在流程定义文件中使用 spring.xml中的bean的方法的写法

<definitions id="definitions" ...>

  <process id="helloProcess">

    <startEvent id="start" />
    <sequenceFlow id="flow1" sourceRef="start" targetRef="print" />

    <serviceTask id="print" activiti:expression="#{printer.printMessage()}" />
    <sequenceFlow id="flow2" sourceRef="print" targetRef="end" />

    <endEvent id="end" />

  </process>

</definitions>
public class Printer {

  public void printMessage() {
    System.out.println("hello world");
  }
}
<beans ...>
  ...

  <bean id="printer" class="org.activiti.examples.spring.Printer" />

</beans>

Automatic resource deployment

集成Spring对部署资源也有特性,在流程引擎配置中,你可以指定一系列资源,当流程引擎呗创建时,所有的资源被扫描部署。有一个过滤器负责阻止多次部署,只有当资源呗改变时才会部署到Activiti DB中。这就意味着在多数用例中,Spring容器经常被重启.  如下例子:

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
  ...
  <property name="deploymentResources" value="classpath*:/org/activiti/spring/test/autodeployment/autodeploy.*.bpmn20.xml" />
</bean>

<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
  <property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>

下面是基于Spring的测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:org/activiti/spring/test/junit4/springTypicalUsageTest-context.xml")
public class MyBusinessProcessTest {

  @Autowired
  private RuntimeService runtimeService;

  @Autowired
  private TaskService taskService;

  @Autowired
  @Rule
  public ActivitiRule activitiSpringRule;

  @Test
  @Deployment
  public void simpleProcessTest() {
    runtimeService.startProcessInstanceByKey("simpleProcess");
    Task task = taskService.createTaskQuery().singleResult();
    assertEquals("My Task", task.getName());

    taskService.complete(task.getId());
    assertEquals(0, runtimeService.createProcessInstanceQuery().count());

  }
}
  

为了能够执行,还需要下面的

<bean id="activitiRule" class="org.activiti.engine.test.ActivitiRule">
  <property name="processEngine" ref="processEngine" />
</bean>  
												

Activiti-04-.Spring integration的更多相关文章

  1. Liferay7 BPM门户开发之5: Activiti和Spring集成

    参考文档: https://github.com/jbarrez/spring-boot-with-activiti-examplehttps://github.com/sxyx2008/spring ...

  2. Spring Integration - 自动轮询发送手机短信

    Spring Integration 配置 <?xml version="1.0" encoding="UTF-8"?> <beans xml ...

  3. spring Integration服务总线

    最新项目中使用数据交换平台,主要通过交换平台抓取HIS数据库医生医嘱检查检验等数据以及FTP上的txt文件,html等病程文件,生成XML文件,之后通过业务系统按业务规则对数据进行处理,再将其存入数据 ...

  4. Spring Integration实现分布式锁

    学习本篇之前,可以先看下文章 什么是分布式锁,了解下基本概念. 之前都是手写一个分布式锁,其实Spring早就提供了分布式锁的实现.早期,分布式锁的相关代码存在于Spring Cloud的子项目Spr ...

  5. Activiti学习——Activiti与Spring集成

    转: Activiti学习——Activiti与Spring集成 与Spring集成 基础准备 目录结构 相关jar包 Activiti的相关jar包 Activiti依赖的相关jar包 Spring ...

  6. Spring Integration概述

    1.   Spring Integration概述 1.1     背景 Spring框架的一个重要主题是控制反转.从广义上来说,Spring处理其上下文中管理的组件的职责.只要组件减轻了职责,它们同 ...

  7. ref:Spring Integration Zip 不安全解压(CVE-2018-1261)漏洞分析

    ref:https://mp.weixin.qq.com/s/SJPXdZWNKypvWmL-roIE0Q 0x00 漏洞概览 漏洞名称:Spring Integration Zip不安全解压 漏洞编 ...

  8. [转] Spring Integration 系统集成

    [From] http://blog.csdn.net/w_x_z_/article/details/53316618 pring Ingegration 提供了基于Spring的EIP(Enterp ...

  9. 2017.2.21 activiti实战--第七章--Activiti与spring集成(一)配置文件

    学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 ...

  10. Spring Integration - WS Outbound Gateway

    1.通过MessageSender客户化http连接参数 AbstractHttpWebServiceMessageSender有若干实现子类: - CommonsHttpMessageSender( ...

随机推荐

  1. 采用SmartQQ 协议可制作聊天机器人

    采用.NET CORE可运行在 Linux . Windows 和 Mac OSX 平台下. SmartQQ可以: 收发文字消息 获取好友.群.讨论组.好友分组和最近会话的列表 SmartQQ不可以: ...

  2. 内存数据库之Apache Ingite

    上一篇文章,我们做了内存数据库的技术选型: 内存数据库技术选型 本文中,我们继续深入研究Apache Ignite,同时分享一些我们.Net的编码实践. 首先,Apache Ignite是一个内存数据 ...

  3. 7.21.03 while循环和do...while循环

    while循环 while是最基本的循环,它的结构为: while( 布尔表达式 ) { //循环内容 } 只要布尔表达式为true,循环体会一直执行下去. 有时程序也需要死循环. 实例 public ...

  4. jeecg 3.7.1 新版功能,集群定时任务动态发布模块 使用规则

    jeecg 3.7.1  集群定时任务动态发布模块 使用规则   新版特性:    支持集群定时任务,支持分布式. 菜单路径: 系统监控-->定时任务 字段说明: 任务ID.任务说明:自定义即可 ...

  5. CRF技能词识别过程

    最近在用CRF做未登录技能词识别,虽然艰难,但是感觉很爽,效率非常高. (1)数据准备: 选取30000行精语料作为训练数据.每一个br作为一条数据.使用已有的技能词典对数据进行无标注分词. (2)训 ...

  6. Kubernetes e2e test and test framework

    前言 Kubernetes的成功少不了大量工程师的共同参与,而他们之间如何高效的协作,非常值得我们探究.最近研究和使用了他们的e2e测试和框架,还是挺有启发的. 怎样才是好的e2e测试? 不同的人写出 ...

  7. C语言:freopen函数

    当我们求解acm题目时,通常在设计好算法和程序后,要在调试环境(例如VC等)中运行程序,输入测试数据,当能得到正确运行结果后,才将程序提交到oj中.但由于调试往往不能一次成功,每次运行时,都要重新输入 ...

  8. Django数据库操作(增删改查)

    Django数据库操作(增删改查) 创建数据库中的一个表 class Business(models.Model): #自动创建ID列 caption = models.CharField(max_l ...

  9. 九天学会Java,第五天,函数定义函数调用

    变量和数据类型,赋值和输出 算术运算 选择结构 循环结构 函数定义,函数调用 变量作用域 栈,程序运行的基石 面向对象 异常处理 语言提供的公用包 什么是函数,为什么有函数,大家可能有这样的疑问. 举 ...

  10. 一台电脑 一起跑python2 python3

    我习惯使用python2.7,命令都是使用的python和pip,这时候装了python3.4,首先到python3下修改python.exe,pythonw.exe为python3.exe,pyth ...