2017.2.21 activiti实战--第七章--Activiti与容器集成

学习资料:《Activiti实战》

第七章 Activiti与容器集成

本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入、统一事务管理等。

7.1 流程引擎工厂

7.1.1 ProcessEngine

创建processEngine的方法有三种:

1 通过配置文件
2 测试中通过ActivitiRule
3 通过ProcessEngines类

7.1.2 ProcessEngineFactory

与spring集成的目的有两个:

1 通过spring统一管理ProcessEngine和七大Service的获取
2 业务与流程引擎的统一事务管理

(1)pom.xml

将activiti与spring集成,先要在pom.xml中增加依赖activiti-spring:(此处忽略了spring本身的依赖,请自行配置)

 1         <!-- activit begin -->
 2         <dependency>
 3             <groupId>org.activiti</groupId>
 4             <artifactId>activiti-engine</artifactId>
 5             <version>5.16.3</version>
 6         </dependency>
 7         <dependency>
 8             <groupId>org.activiti</groupId>
 9             <artifactId>activiti-spring</artifactId>
10             <version>5.16.3</version>
11         </dependency>
12         <!-- activit end -->

(2)配置文件applicationContext-test.xml

applicationContext.xml分为几个部分:数据源、事务管理器、引擎配置、引擎工厂、获取service。(同样,spring自身的一些配置此处略过。)

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
 3     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4     xsi:schemaLocation="http://www.springframework.org/schema/beans      http://www.springframework.org/schema/beans/spring-beans.xsd
 5                            http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">
 6
 7     <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
 8         <property name="driverClass" value="org.h2.Driver" />
 9         <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
10         <property name="username" value="sa" />
11         <property name="password" value="" />
12     </bean>
13
14     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
15         <property name="dataSource" ref="dataSource" />
16     </bean>
17     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
18
19     <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
20         <property name="dataSource" ref="dataSource" />
21         <property name="transactionManager" ref="transactionManager" />
22         <property name="databaseSchemaUpdate" value="true" />
23         <property name="jobExecutorActivate" value="false" />
24     </bean>
25
26     <bean id="processEngineFactory" class="org.activiti.spring.ProcessEngineFactoryBean">
27         <property name="processEngineConfiguration" ref="processEngineConfiguration" />
28     </bean>
29
30     <bean id="repositoryService" factory-bean="processEngineFactory" factory-method="getRepositoryService" />
31     <bean id="runtimeService" factory-bean="processEngineFactory" factory-method="getRuntimeService" />
32     <bean id="formService" factory-bean="processEngineFactory" factory-method="getFormService" />
33     <bean id="identityService" factory-bean="processEngineFactory" factory-method="getIdentityService" />
34     <bean id="taskService" factory-bean="processEngineFactory" factory-method="getTaskService" />
35     <bean id="historyService" factory-bean="processEngineFactory" factory-method="getHistoryService" />
36     <bean id="managementService" factory-bean="processEngineFactory" factory-method="getManagementService" />
37 </beans>

(3)ProcessEngine和xxxService使用示例

在配置文件applicationContext-test.xml文件中加上一段:

1     <!-- 使用annotation 自动注册bean, 并保证@Required、@Autowired的属性被注入 -->
2     <context:component-scan base-package="me.kafeitu.activiti">
3         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
4     </context:component-scan>

然后在代码中使用:

1 @Autowired
2 RuntimeService runtimeService;

7.2 自动部署流程定义

(1)场景

概念:通过Spring创建 ProcessEngine 时一个独有的功能。可以在初始化 ProcessEngine 时自动将定义的资源部署到 ProcessEngine 中。

问题:每次启动都会加载spring配置文件,并且随之初始化ProcessEngine,那么是不是每次都会部署一遍呢?那么一旦重启部署版本就变成新的了?(activiti中有部署版本的参数)Activiti处理整个的办法是,只有流程数据库中没有和自动部署的流程定义相同的记录才会部署,也就是没有新的流程定义就不会再部署一遍。

优点:对新系统的上线或者开发过程中加入新的流程非常有用,可以自动部署引擎数据库中不存在的,或者修改过的流程定义。

(2)配置

在引擎工程的属性里加上一个部署资源的属性。

1     <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
2         <property name="dataSource" ref="dataSource" />
3         <property name="transactionManager" ref="transactionManager" />
4         <property name="databaseSchemaUpdate" value="true" />
5         <property name="jobExecutorActivate" value="false" />
6         <property name="deploymentResource" value="classpath*:/chapter6/**/*.bpmn"/>
7     </bean>

(3)代码测试

1     long count = repositoryService.createProcessDefinitionQuery().count();
2     assertEquals(1,count);
时间: 2024-10-09 22:59:43

2017.2.21 activiti实战--第七章--Activiti与容器集成的相关文章

2017.2.28 activiti实战--第五章--用户与组及部署管理(二)部署流程资源

学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种: 1 流程定义文件:拓展名为bpmn20.xml和bpmn 2 流程定义的图片:拓展名为PNG 3 表单文件:拓展名为form 4 规则文件:拓展名为drl 部署流程资源的时候,要注意一点: 引擎会根据不同的拓展名进行不同的处理.bpmn或bpmn20.xml类型的文件,会在ACT_RU_PROCDEF(流

2017.2.20 《activiti实战第五章--用户与组及部署管理》(一)用户与组

学习资料:<Activiti实战> 第五章 用户与组及部署管理(一)用户与组 内容概览:讲解activiti中内置的一套用户.组的关系,以及如何通过API添加.删除.查询. 5.1 用户与组 5.1.1 用户 1 public class IdentityServiceTest{ 2 @Rule 3 public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数 4 5 @Test 6 public void t

2017.2.28 activiti实战--第六章--任务表单(一)动态表单(待)

学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. 第四章中讲解了两种表单:动态表单和外置表单的区别.这里将使用不同的表单来完成相同的功能. 1 动态表单:<activiti:formProperty> 2 外置表单:<activiti:formKey>

Spring实战第七章————SpringMVC配置的替代方案

SpringMVC配置的替代方案 自定义DispatherServlet配置 我们之前在SpittrWebAppInitializer所编写的三个方法仅仅是必须要重载的abstract方法.但还有更多的方法可以进行重载,从而实现额外的配置. 例如customizeRegistration().在AbstractAnnotationConfigDispatcherServletInitializer将DispatcherServlet主车道Servlet容器后,就会调用该方法,并将Servlet注

2017.2.20 activiti实战--第一章--认识Activiti

学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis 2.原生支持spring,可以轻松集成spring 3.引擎的Service接口 Activiti引擎提供了7大Service接口,均通过processEngine获取,支持链式API风格. Service接口 作用 RepositoryService 流程仓库服务,管理流程仓库,比如部署.删除.读取流程资源

2017上半年软考 第七章 重要知识点

第七章项目范围管理 []项目范围管理概念 [][]项目范围管理的含义和作用 项目范围管理内容p289 项目范围对项目管理的重要性?p289 [][]项目范围管理的主要过程 项目范围管理的6个过程是? []编制范围管理计划和范围说明书 编制范围管理计划的内容是? 编制范围管理计划的输入.工具和技术.输出 编制范围管理计划输出是什么? 项目管理计划可以作为什么的依据p291 需求管理计划包括什么? []范围定义 范围定义的输入.工具和技术.输出 范围定义的作用是什么?p292 定义范围的最重要任务是

分享本书《Activiti实战》和几个工作流的链接

现在搞工作流的,开源的很多都用Activiti,但相关的中文书其实不多,在当当上找到了一本,暂时没下载到pdf盗版,看了目录不错,特别从试读章节了解了历史,所以分享一下. java 工作流开发框架比较 http://blog.csdn.net/chinarenzhou/article/details/7679148 纵观jBPM:从jBPM3到jBPM5以及Activiti5 http://www.infoq.com/cn/articles/rh-jbpm5-activiti5 工作流引擎Act

第七章定制并发类

Java 7 并发编程实战手册目录 代码下载(https://github.com/Wang-Jun-Chao/java-concurrency) 第七章定制并发类 7.1简介 Java并发API提供了大量接口和类来实现并发应用程序.这些接口和类既包含了底层机制,如Thread类.Runnable接口或Callable接口.synchronized关键字,也包含了高层机制,如在Java 7中增加的Executor框架和Fork/Join框架.尽管如此,在开发应用程序时,仍会发现己有的Java类无

第七章 本源时空(补充)

                第七章        本源时空(补充) ?      第七章是匆匆结束的,有点文不对题.什么是本源时空,没有详细的论述.2个月来.我一直想做个小结,无奈心不在焉,忙于正业的玩游戏.看小说.其实,真正的原因.后面或许.会说一下吧.     我敢确定相对论.量子论等垃圾理论,100%是错误的,都将成为历史.按照本人30多年的实战经验总结,我的理论95%以上是对的:或许在小节上.不经意的地方有错误吧.嗯.注明一下:我不是"春哥",不需要"信我者永生&