Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3351641
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类: Java

2013-08-04 12:12:34

1.概述
    Activiti 5与Spring整合比较简单,其基本思想就是,通过Spring的IOC容器来管理Activiti的流程引擎实例以及相关服务,主要是基于Activiti在与Spring整合上努力上,做好配置即可。\

2.Activiti在spring中的基本配置

2.1 ProcessEngineConfiguration-流程引擎配置文件
      无论你使用Standalone还是Spring管理引擎都可以在配置文件中配置参数,虽然目前Activiti支持多种引擎配置对象,但是均继承自一个基础的配置对象(抽象类)org.activiti.engine.ProcessEngineConfiguration。

      除了基础的引擎配置对象之外还有一下几个具体的实现,不同的场合使用不用的引擎实现,均继承自org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl
         .StandaloneProcessEngineConfiguration:标准的单机引擎配置对象,默认读取activiti.cfg.xml文件的配置
         .StandaloneInMemProcessEngineConfiguration:用于测试环境,jdbcUrl配置为jdbc:h2:mem:activiti,数据库的DDL操作配置:create-drop,在日常的快速测试中经常用到
         .JtaProcessEngineConfiguration:顾名思义,支持JTA
         .SpringProcessEngineConfiguration:这个恐怕是用的最多的一个,由Spring代理创建引擎,最最重要的是如果把引擎嵌入到业务系统中可以做到业务事务与引擎事务的统一管理

在spring中配置文件描述如下

点击(此处)折叠或打开

    首先配置一个数据库,再将dataSource赋值到processEngineConfiguration中

    将 DataSource 传递给 SpringProcessEngineConfiguration(使用 dataSource 属性)后,Activiti 内部使用org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy 来封装传进来的 DataSource。这就确保了从该DataSource 获取的 SQL 连接与 Spring 事务能够完美地结合。
    这意味着不再需要你在 Spring 配置文件中代理 dataSource 了,但同样允许向 SpringProcessEngineConfiguration 传递 TransactionAwareDataSourceProxy。该例子中不会有多余的包装发生。
    在 Spring 配置文件中自己声明 TransactionAwareDataSourceProxy 时,务必不要将其应用给已经感知了 Spring 事务的资源。

2.2 ProcessEngine-流程引擎
   activiti的流程引擎实现很简单,基于流程引擎提供了5个常用服务类,配置如下

点击(此处)折叠或打开

3.activiti注入方式

1.第一种注入方式
   将runtimeService直接注入到自定义的service类中
  1. <bean id="userBean" class="org.activiti.spring.test.UserBean">
  2.     <property name="runtimeService" ref="runtimeService" />
  3.   </bean>
  4.   
  5.   <bean id="printer" class="org.activiti.spring.test.Printer" />
调用方法
  1. UserBean userBean = (UserBean) applicationContext.getBean("userBean");
  2. userBean.hello();
  3. public class UserBean {
  4.   private RuntimeService runtimeService;
  5.   
  6.   @Transactional
  7.   public void hello() { 
  8.     runtimeService.startProcessInstanceByKey("helloProcess");
  9.   }
  10.     
  11.   public void setRuntimeService(RuntimeService runtimeService) {
  12.     this.runtimeService = runtimeService;
  13.   }
  14. }

2.让bpmn流程识别spring bean
     BPMN中的表达式也会识别Spring 实体
  1. ...

一个流程使用printer的例子
  1. printer.printMessage()}" />












阅读(2791) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~