ActivitiSpring集成的示例分析

这篇文章将为大家详细讲解有关Activiti Spring集成的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联公司专业为企业提供凌海网站建设、凌海做网站、凌海网站设计、凌海网站制作等企业网站建设、网页设计与制作、凌海企业网站模板建站服务,十载凌海做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

1.版本

Activiti版本:5.17.0

Eclipse版本:Kepler Service Release 2

JDK版本:1.7.0_51

MySQL版本:5.5.33

2.创建Activiti工程

在Eclipse中集成了   Activiti Eclipse Designer 插件后(见《Eclipse 集成Activiti Eclipse Designer 插件》),

File->New->Other->Activiti->Activiti Project

Project Name为activiti-demo

创建项目后,默认是这样的

Activiti Spring集成的示例分析

已经是maven结构,但是还需要将项目转换成maven项目

在项目上右键->Configure->Conver to Maven Project,见下图

Activiti Spring集成的示例分析

转换完成后,编辑pom.xml,添加依赖包,见下


  4.0.0
  org.activiti.examples
  activiti-examples
  1.0-SNAPSHOT
  jar
  BPMN 2.0 with Activiti - Examples
  
    5.17.0
    3.2.4.RELEASE
    5.1.29
  
  
  	
  	
      junit
      junit
      4.11
    
  
  	
    
	  org.springframework
	  spring-context
	  ${spring-version}
	
	
	
	  org.springframework
	  spring-jdbc
	  ${spring-version}
	
	
	  org.springframework
	  spring-tx
	  ${spring-version}
	
	
  	
    
      org.activiti
      activiti-engine
      ${activiti-version}
    
    
      org.activiti
      activiti-spring
      ${activiti-version}
    
    
    
    
		mysql
		mysql-connector-java
		${mysql-version}
	
	
    
      org.slf4j
      slf4j-api
      1.7.2
    
    
      org.slf4j
      slf4j-jdk14
      1.7.2
    
    
  

目录结构如下

Activiti Spring集成的示例分析

至此,准备工作到此结束

3.开始第一个Demo

3.1 spring与activiti集成

在src/main/resources下添加Spring的配置文件,spring-activiti.xml如下


 
  
	
	
	
   	
   	
   	
   	
   	
   	
  
  
  
  	
  
  
  
  
  
  
  
  
  
  
  
  
	  
	  
	  
	  
	  
  
  
  
    
  
    
 

3.2 Activiti的主要接口

各个Activiti的主要bean的作用如下:

processEngineConfiguration   Activiti流程引擎

processEngine   Activiti的主接口

repositoryService    Activiti的资源操作接口

runtimeService    运行时操作接口(大多操作流程实例)

taskService    任务操作接口

identityService    身份操作接口(用户和用户组)

historyService    历史查询接口

formService    表单数据绑定接口

managementService    管理接口

3.3 设计工作流程DemoProcess

在src/main/resources/diagrams/下创建一个工作流,命名为DemoProcess.bpmn,如下图,利用Activiti插件新建流程图

Activiti Spring集成的示例分析

此时进入Activiti Diagram Editor,在空白处点一下,下边属性栏中设置id和name,id就是这个流程的key,后边启动流程的时候使用到。

Activiti Spring集成的示例分析

在图中单机FirstTask,设置其ID为firstTask,同样方法设置SecondTask的ID为secondTask 

设置完毕后,此工作流以xml方式打开是这样的

至此,流程设计完毕

3.4 创建测试类DemoProcess.java

package com.lei.demo.activiti.spring.test;

import java.util.List;

import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class DemoProcess {
	
	private static ApplicationContext context;

	public static void main(String[] args) {
		
		System.out.println( "start" );
		
		context = new ClassPathXmlApplicationContext("spring-activiti.xml");
		
		//创建Activiti流程引擎,Activiti主接口
		ProcessEngine processEngine = (ProcessEngine) context.getBean("processEngine");
		System.out.println("processEngine Name:"+processEngine.getName());
		
		// 获得Activiti的资源操作接口 
        RepositoryService repositoryService = processEngine.getRepositoryService();
        
        //获得运行时操作接口(大多操作流程实例)
        RuntimeService runtimeService = processEngine.getRuntimeService();
        
        //部署流程定义,部署后,activiti会根据数据库配置自动创建表,添加数据
      	Deployment deployment = repositoryService
      							.createDeployment()
      							.addClasspathResource("diagrams/DemoProcess.bpmn")
      							.deploy();
      	System.out.println("deployment ID:"+deployment.getId()+" deployment Name:"+deployment.getName());
      	
      	//启动流程实例 ,startProcessInstanceByKey参数DemoProcess即DemoProcess.bpmn中的ID
        ProcessInstance instance = processEngine  
                 .getRuntimeService().startProcessInstanceByKey("DemoProcess");  
        String procId = instance.getId();  
        System.out.println("procId:"+ procId);
        
        //获得第一个任务 ,taskDefinitionKey参数为流程途中UserTask的ID
        TaskService taskService = processEngine.getTaskService();  
        List tasks = taskService.createTaskQuery().taskDefinitionKey("firstTask").list();  
        for (Task task : tasks) {  
            System.out.println("Task信息: taskID -" +task.getId()+" taskName -"+ task.getName());  
            // 认领任务  
            taskService.claim(task.getId(), "testUser");
        }
        
        //完成任务前,输出testUser下的任务数量
        System.out.println("完成任务前,testUser认领的task数量: " 
                + taskService.createTaskQuery().taskAssignee("testUser").count());
        //查看testUser 现在是否能够获取到该任务  
        tasks = taskService.createTaskQuery().taskAssignee("testUser").list();
        for (Task task : tasks) {  
            System.out.println("Task for testUser: " + task.getName());  
            // 完成任务  
            taskService.complete(task.getId());  
        }
        //完成任务后,输出testUser下的任务数量
        System.out.println("完成任务后,testUser认领的task数量: " 
                + taskService.createTaskQuery().taskAssignee("testUser").count());  
          
  
        // 获取并认领第二个任务  
        tasks = taskService.createTaskQuery().taskDefinitionKey("secondTask").list();  
        for (Task task : tasks) {  
            System.out.println("Task信息: taskID -" +task.getId()+" taskName -"+ task.getName());  
            taskService.claim(task.getId(), "testUser");  
        }  
          
        //完成第二个任务结束结束流程  
        for (Task task : tasks) {  
            taskService.complete(task.getId());  
        }
        
     // 核实流程是否结束  
        HistoryService historyService = processEngine.getHistoryService();  
        HistoricProcessInstance historicProcessInstance = historyService
        													.createHistoricProcessInstanceQuery()
        													.processInstanceId(procId)
        													.singleResult();
        System.out.println("流程实例结束时间: " + historicProcessInstance.getEndTime());
		
		System.out.println( "end" );

	}

}

运行结果截图

Activiti Spring集成的示例分析

关于“Activiti Spring集成的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


网站名称:ActivitiSpring集成的示例分析
文章起源:http://ybzwz.com/article/jccsio.html