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. Promise与异步

    不知道promise,大家现在用了吗?如果还不了解的话,今天就来对了-基础的了解起来- 正文从这开始- 接触过promise的的都知道它的应用场景和用途,Promise可以用来避免异步操作函数里的嵌套 ...

  2. mysql为什么范围查询(>,<,between,%like,like%)之后的索引无效

    因为使用了范围索引,所以会使用满足范围的所有的值,也就是说存储引擎在这个时候会提取出满足之后条件的所有值,并遍历获取满足之后条件的值. http://www.itpub.net/thread-1901 ...

  3. 第2天:HTML常用标签

    今天学完主要对所学知识点进行了整理. 一.超链接ahref:www.baidu.com(跳转页面):id名(锚点跳到相应div位置):01.rar(压缩包) target:_blank(新窗口打开): ...

  4. Java 中判断 JSONObject 对应的 VALUE 为空

    目前发现有两种包.两种不一样的json包. 第一种情况是: json包是json-lib包是net.sf.json 怎样判断JSONObject返回的是字符串null还是null值. 研究源码发现.J ...

  5. java‘小秘密’系列(二)---Integer

    java'小秘密'系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java'小秘 ...

  6. led模组的优点和却点

    插件模组 1.是指DIP封装的灯将灯脚穿过PCB板,经由过程焊接将锡灌满在灯孔内,由这种工艺做成的LED模组便是插灯模组:益处是视角年夜,亮度高,散热好:谬误舛错是像素密度小. 表贴模组 1.表贴也叫 ...

  7. 转每天一个linux命令(3):pwd命令

    Linux中用 pwd 命令来查看"当前工作目录"的完整路径. 简单得说,每当你在终端进行操作时,你都会有一个当前工作目录. 在不太确定当前位置时,就会使用pwd来判定当前目录在文 ...

  8. string,char*,int 之间的转化

    c++中经常遇到string,char*,int之间的相互转化,今天就来整理一下. 以下是转载并修改的内容: 以下是常用的几种类型互相之间的转换 string 转 int先转换为char*,再使用at ...

  9. spring boot / cloud (十六) 分布式ID生成服务

    spring boot / cloud (十六) 分布式ID生成服务 在几乎所有的分布式系统或者采用了分库/分表设计的系统中,几乎都会需要生成数据的唯一标识ID的需求, 常规做法,是使用数据库中的自动 ...

  10. NHibernate教程(11)--多对多关联查询

    本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...