`

Activiti moduler+Spring Junit环境构建(一)

阅读更多

Activiti moduler + spring + junit  环境构建(一)

软件环境:开发工具idea,jdk 1.7,tomcat 8.5。

 

具体web搭建及附件可查看:

Activiti moduler + spring web环境构建(二)

 

项目目录结构如下:


 

 

maven配置文件:

 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>org.activiti.examples</groupId>
	<artifactId>activiti-examples</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>BPMN 2.0 with Activiti - Examples</name>

	<properties>
		<activiti-version>5.21.0</activiti-version>
		<spring-version>4.3.3.RELEASE</spring-version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-engine</artifactId>
			<version>${activiti-version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-modeler</artifactId>
			<exclusions>
				<exclusion>
					<groupId>xalan</groupId>
					<artifactId>xalan</artifactId>
				</exclusion>
			</exclusions>
			<version>${activiti-version}</version>
		</dependency>
		<!-- 查看流程详细定义 -->
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-diagram-rest</artifactId>
			<version>${activiti-version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-explorer</artifactId>
			<exclusions>
				<exclusion>
					<artifactId>vaadin</artifactId>
					<groupId>com.vaadin</groupId>
				</exclusion>
				<exclusion>
					<artifactId>dcharts-widget</artifactId>
					<groupId>org.vaadin.addons</groupId>
				</exclusion>
				<exclusion>
					<artifactId>activiti-simple-workflow</artifactId>
					<groupId>org.activiti</groupId>
				</exclusion>
			</exclusions>
			<version>${activiti-version}</version>
		</dependency>
		<dependency>
			<groupId>org.activiti</groupId>
			<artifactId>activiti-spring</artifactId>
			<version>${activiti-version}</version>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring-version}</version>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.39</version>
		</dependency>

		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.6</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-jdk14</artifactId>
			<version>1.7.6</version>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
		</dependency>
	</dependencies>
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-eclipse-plugin</artifactId>
				<inherited>true</inherited>
				<configuration>
					<classpathContainers>
						<classpathContainer>org.eclipse.jdt.USER_LIBRARY/Activiti Designer
							Extensions</classpathContainer>
					</classpathContainers>
				</configuration>
			</plugin>
		</plugins>
	</build>

</project>

  

spring配置文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/activiti"/>
        <property name="username" value="root"/>
        <property name="password" value="888"/>
        <property name="defaultAutoCommit" value="false"/>
    </bean>

    <bean id="processEngineConfiguration"
          class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="dataSource" ref="dataSource"/>
        <property name="databaseType" value="mysql"/>
        <property name="databaseSchemaUpdate" value="true"/>
        <property name="jobExecutorActivate" value="false"/>
        <!--是否在部署时自动生成流程图,默认为true-->
        <property name="createDiagramOnDeploy" value="true" />
        <!--防止中文乱码-->
        <property name="activityFontName" value="宋体"/>
        <property name="labelFontName" value="宋体"/>
    </bean>

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

    <bean id="repositoryService" factory-bean="processEngine"
          factory-method="getRepositoryService"/>
    <bean id="runtimeService" factory-bean="processEngine"
          factory-method="getRuntimeService"/>
    <bean id="taskService" factory-bean="processEngine"
          factory-method="getTaskService"/>
    <bean id="historyService" factory-bean="processEngine"
          factory-method="getHistoryService"/>
    <bean id="managementService" factory-bean="processEngine"
          factory-method="getManagementService"/>

    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

 

测试的Java文件:

package com.bpm;

import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.task.Task;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.awt.*;
import java.io.*;
import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring-activiti.xml"})
@Rollback
@Transactional
public class BpmDefinitionTest {
    @Resource
    TaskService taskService;
    @Resource
    private RepositoryService repositoryService;
    @Resource
    private RuntimeService runtimeService;

    private static Color HIGHLIGHT_COLOR = Color.RED;
    private static Stroke THICK_TASK_BORDER_STROKE = new BasicStroke(3.0f);

    @Test
    public void testDeploy() throws IOException {
        String sourceFile = "holidayRequest1.bpmn";
        /** 发布流程
         方法一:流的方式
         <code>
         InputStream is = new FileInputStream(new File(this.getClass().getResource("/holidayRequest2.bpmn").getPath()));
         Assert.assertNotNull(is);
         Deployment deployment = repositoryService.createDeployment().addInputStream("bpmn20.xml", is).name("holidayRequest").deploy();
         </code>
         方法二:当文件在资源目录下时,可使用以下方式直接加载:
         */
        Deployment deployment = repositoryService.createDeployment()
                .name("helloRequest")
                .category("testDemo")
                .addClasspathResource(sourceFile).deploy();
        Assert.assertNotNull(deployment);
        System.out.println("deploymentId:" + deployment.getId());
        /**查询流程定义,以下查询方法会自动查询出当前流程的最高版本
         * 流程定义主要是用于部署流程的版本控制,在保存部署信息时,会自动先创建一个流程定义。系统会根据*.bpmn中process元素属性来设置数据字段值。
         * <code>
         *     <definitions id="myDef" targetNamespace="testDemo">
         *          <process id="myProcess" name="My process" >...</process>
         *     </definitions>
         * </code>
         * 其中definitions->targetNamespace会作为字段category值,process->id 会作为字段key值,用来标识流程的唯一从而进行版本的自动升级,process->name 会作为字段name值...
         * 所以取process id 时要格外注意不要重复了
         * */
        ProcessDefinitionEntity processDefinition = (ProcessDefinitionEntity) repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();

        // 获取流程图并生成文件
        String diagramResourceName = processDefinition.getDiagramResourceName();
        InputStream stream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), diagramResourceName);
        // 通过这种方式获取,一定要添加 / ,否则会找不到文件
        String path = this.getClass().getResource("/" + sourceFile).getPath();
        File file = new File(path);
        OutputStream out = new FileOutputStream(file.getParent() + "/holidayRequest.expense.png");
        int len;
        byte[] data = new byte[1024];        //可以根据实际情况调整,建议使用1024,即每次读1KB
        while ((len = stream.read(data)) != -1) {
            out.write(data, 0, len);                    //建议不要直接用os.write(bt)
        }
        out.flush();
        stream.close();
        out.close();

        /**启动流程实例
         * 还可以使用:runtimeService.startProcessInstanceByKey("myProcess");这里的key是定义在bpmn文件中的process元素的id属性
         * */
        runtimeService.startProcessInstanceById(processDefinition.getId());

        //查询任务实例
        List<Task> taskList = taskService.createTaskQuery().processDefinitionId(processDefinition.getId()).list();
        Assert.assertNotNull(taskList == null);
        Assert.assertTrue(taskList.size() > 0);
        for (Task task : taskList) {
            System.out.println("task name is " + task.getName() + " ,task key is " + task.getTaskDefinitionKey());
        }
    }

}

 

流程文件bpmn:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:activiti="http://activiti.org/bpmn"
             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
             xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI"
             expressionLanguage="http://www.w3.org/1999/XPath" id="m1478052557696" name=""
             targetNamespace="http://www.activiti.org/test" typeLanguage="http://www.w3.org/2001/XMLSchema">
    <process id="myProcess" isClosed="false" isExecutable="true" name="My process" processType="None">
        <startEvent id="startevent1" name="Start"/>
        <endEvent id="endevent1" name="End"/>
        <userTask activiti:exclusive="true" id="usertask1" name="提交申请"/>
        <userTask activiti:exclusive="true" id="usertask2" name="主管审批"/>
        <userTask activiti:exclusive="true" id="usertask3" name="经理审批"/>
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"/>
        <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"/>
        <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="usertask3"/>
        <sequenceFlow id="flow4" sourceRef="usertask3" targetRef="endevent1"/>
    </process>
    <bpmndi:BPMNDiagram
            documentation="background=#FFFFFF;count=1;horizontalcount=1;orientation=0;width=842.4;height=1195.2;imageableWidth=832.4;imageableHeight=1185.2;imageableX=5.0;imageableY=5.0"
            id="Diagram-_1" name="New Diagram">
        <bpmndi:BPMNPlane bpmnElement="myProcess">
            <bpmndi:BPMNShape bpmnElement="startevent1" id="Shape-startevent1">
                <omgdc:Bounds height="32.0" width="32.0" x="125.0" y="80.0"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="endevent1" id="Shape-endevent1">
                <omgdc:Bounds height="32.0" width="32.0" x="515.0" y="320.0"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="32.0" width="32.0" x="0.0" y="0.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="usertask1" id="Shape-usertask1">
                <omgdc:Bounds height="55.0" width="105.0" x="300.0" y="70.0"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="usertask2" id="Shape-usertask2">
                <omgdc:Bounds height="55.0" width="105.0" x="300.0" y="190.0"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNShape bpmnElement="usertask3" id="Shape-usertask3">
                <omgdc:Bounds height="55.0" width="105.0" x="480.0" y="190.0"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="55.0" width="105.0" x="0.0" y="0.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNShape>
            <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1" sourceElement="startevent1"
                             targetElement="usertask1">
                <omgdi:waypoint x="157.0" y="96.0"/>
                <omgdi:waypoint x="300.0" y="97.5"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2" sourceElement="usertask1"
                             targetElement="usertask2">
                <omgdi:waypoint x="352.5" y="125.0"/>
                <omgdi:waypoint x="352.5" y="190.0"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3" sourceElement="usertask2"
                             targetElement="usertask3">
                <omgdi:waypoint x="405.0" y="217.5"/>
                <omgdi:waypoint x="480.0" y="217.5"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
            <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4" sourceElement="usertask3"
                             targetElement="endevent1">
                <omgdi:waypoint x="531.0" y="245.0"/>
                <omgdi:waypoint x="531.0" y="320.0"/>
                <bpmndi:BPMNLabel>
                    <omgdc:Bounds height="-1.0" width="-1.0" x="-1.0" y="-1.0"/>
                </bpmndi:BPMNLabel>
            </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
    </bpmndi:BPMNDiagram>
</definitions>

 

  • 大小: 20.5 KB
分享到:
评论

相关推荐

    Activiti 5.21 + moduler+spring mvc 实例项目搭建

    这个实例项目是基于Activiti 5.21版本构建的,它结合了moduler模块化管理和Spring MVC框架,提供了完整的Web应用解决方案。让我们深入探讨一下这个项目中的主要知识点。 1. **Activiti工作流引擎**: - Activiti ...

    activiti+spring+srping Mvc+mybatis+maven整合

    本项目是关于"activiti+spring+spring Mvc+mybatis+maven"的整合,旨在创建一个基于Activiti工作流引擎、Spring、Spring MVC、MyBatis以及Maven的开发环境。下面将详细介绍这些技术及其整合过程。 首先,`activiti`...

    springboot2+vue2+activiti7+myflow工作流设计demo

    springboot2+vue2+activiti7+myflow(vue下public目录下 window.open打开)工作流设计请假实战例子。。

    activiti+spring mvc+maven+extjs mvc+mybatis一个简单的请假工作流

    标题中的“activiti+spring mvc+maven+extjs mvc+mybatis”是一个集成的IT解决方案,用于构建一个简单的请假工作流程应用。这个项目利用了多种技术来创建一个前端和后端无缝协作的系统。 1. **Activiti**:Activiti...

    activiti 7 + springboot2(六) SpringBoot2 整合 Activiti7

    (一)首先 pom.xml 文件中引入相关的依赖 (二)springboot 的配置文件 application.yml中添加相关的配置 (三)流程资源 (四)编写Applocation主程序 (五)编写基于SpringBootTest的测试程序

    activiti6+springboot2.0+高亮显示当前执行任务+在线web设计器集成

    用springboot2来集成的activiti6,里面包括了activiti的在线web...上面的功能都是在一个项目中,且项目中有详细的注释,也有一个项目说明.txt用于更好的理解项目 绝对满足你对于activiti的需求,有不懂的可以私信我哦

    框架整合Spring MVC3.23+Spring3.23+Hibernate4.2.3+Activiti5.16.3+Proxool连接池

    框架整合Spring MVC3.23+Spring3.23+Hibernate4.2.3+Activiti5.16.3,三层架构dao,service,controller,使用proxool连接池(已配置好监听器),默认链接mysql数据库。可根据项目开发需要,做适当修改,各项配置齐全...

    activiti 7 + springboot2(十三)网关

    activiti中有四种网关:并行网关,排他网关,包含网关,基于事件网关 排它网关: 内部是一个“X”图标,用来在流程中实现决策。 当流程执行到这个网关,所有外出顺序流都会被处理一遍。 其中条件解析为true的顺序...

    activiti + spring

    它可能包含了如何在 `JUnit` 测试中启动和验证 `Activiti` 流程的例子,或者是展示了如何在 `Spring` 环境下配置和使用 `Activiti` 的详细步骤。 总结一下,`Activiti + Spring` 的组合提供了强大的业务流程管理...

    activiti + spring mvc 基础web项目.zip

    这个压缩包文件的标题表明它是一个基于Activiti工作流引擎和Spring MVC框架构建的基础Web项目。 Activiti是一款流行的开源工作流管理系统,用于实现业务流程自动化。而Spring MVC是Spring框架的一个模块,专门用于...

    activiti+springMVC+mybatis rest风格整合demo

    在本项目"activiti+springMVC+mybatis rest风格整合demo"中,开发者通过集成Activiti、Spring MVC和MyBatis三个核心组件,构建了一个基于RESTful API的工作流管理系统。这个项目对于初学者来说是一个很好的学习资源...

    spring boot+activiti+shiro+layui+Mysql权限管理系统源码

    这是一个基于Spring Boot、Activiti、Shiro和Layui的权限管理系统源码,结合了MySQL数据库,用于实现高效、安全的后台管理功能。下面将详细解释这套系统的各个组成部分及其核心知识点。 1. **Spring Boot**: Spring...

    springboot+activiti+vue+thymleaf 版本

    标题中的“springboot+activiti+vue+thymleaf 版本”指的是一个基于Spring Boot、Activiti、Vue.js和Thymeleaf的综合工作流管理系统。这个系统结合了四个关键的技术栈,构建了一个功能丰富的业务流程自动化平台。 1...

    java+spring-boot-jwt + spring security集成实战项目.zip

    在本项目中,我们主要探讨的是如何将Java与Spring Boot框架相结合,利用JWT(JSON Web Token)和Spring Security来构建一个安全的Web应用程序。这个实战项目涵盖了从基础概念到实际应用的完整流程,旨在帮助开发者...

    activitiDemo+项目实战

    接下来,"activitiSSHDemo完整版.zip"是一个完整的项目实战案例,其中融入了SSH(Spring、Struts2、Hibernate)框架,展示了如何将Activiti与实际业务系统整合。这个案例涵盖了用户登录、流程启动、任务查询、任务...

    struts+spring+hibernate整合办公OA系统全套视频下载地址

    **Ant** 是一个用于构建Java应用程序的工具,它提供了一系列的构建任务和类型,可以方便地完成编译、测试、打包等工作。 #### XDoclet **XDoclet** 是一个文档生成工具,它可以基于Javadoc注释自动生成代码文档或...

    springmvc4.0.6+activiti 5.16.4 + beetl 2.2.3

    在本项目中,我们关注的是一个基于Spring MVC 4.0.6、Activiti 5.16.4以及Beetl 2.2.3的整合应用。这些技术都是Java开发领域中非常重要的组件,它们各自在不同的层面上发挥着关键作用。接下来,我们将深入探讨这三个...

    集成activiti moduler流程设计器的springboot工程

    集成activiti moduler5.22官方流程设计器的springboot工程。自行修改yml配置文件中的数据库地址。启动后先访问 地址:端口/activiti/model获得model的id,再访问 地址:端口/modeler.html?modelId=xx,将xx改为获得...

    activiti源码+用户手册.zip

    其次,`Activiti+V5.21+用户手册+中文版.pdf` 是Activiti的用户手册,对于初学者来说,这是一个极好的起点。用户手册通常会涵盖以下几个方面: 1. **快速入门**:介绍如何安装和配置Activiti,以及如何启动第一个...

    activiti5.8+eclipse_plugin

    使用 activiti-5.8.zip 和 activiti-designer-5.8.0.zip 文件,你可以搭建一个完整的 Activiti 开发环境。首先,你需要将 activiti-5.8.zip 解压,这会包含 Activiti 引擎的库文件,你可以将它们添加到你的项目依赖...

Global site tag (gtag.js) - Google Analytics