java1234开源博客系统
博客信息

Activiti流程定义部署之ZIP方式

0
发布时间:『 2016-04-13 13:02』  博客类别:activiti  阅读(7838) 评论(0)

前面的话,我们使用的是classpath加载资源文件方式来部署流程定义的,但是这种方式有局限性,只能适合小项目,固定写死的流程;

实际项目的话,需要来动态导入流程定义文件,通过把bpmn和png文件打包成zip压缩包,然后用户界面直接导入到系统,然后解析,部署流程定义;

Activiti是支持这种方式的。今天我们来实现下这种方式;


首先第一步,把bpmn和png文件打成zip压缩包,放到diagrams文件夹下;


a.jpg


前面我们使用的是classpath加载流程定义文件;

我们新建一个测试类 ProcessDefinition

package com.java1234.activiti.test;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.repository.Deployment;
import org.junit.Test;

public class ProcessDefinition {

	/**
	 * 获取默认的流程引擎实例 会自动读取activiti.cfg.xml文件 
	 */
	private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
	
	/**
	 * 部署流程定义使用classpath方式
	 */
	@Test
	public void deployWithClassPath(){
		// 获取部署对象
		Deployment deployment=processEngine.getRepositoryService() // 部署Service
		             .createDeployment()  // 创建部署
		             .addClasspathResource("diagrams/helloWorld.bpmn")  // 加载资源文件
		             .addClasspathResource("diagrams/helloWorld.png")   // 加载资源文件
		             .name("HelloWorld流程")  // 流程名称
		             .deploy(); // 部署
		System.out.println("流程部署ID:"+deployment.getId());
		System.out.println("流程部署Name:"+deployment.getName());
	}
	
}


下面我们用zip方式来实现,新建一个deployWithZip方法:

/**
 * 部署流程定义使用zip方式
 */
@Test
public void deployWithZip(){
	InputStream inputStream=this.getClass()  // 获取当前class对象
						.getClassLoader()   // 获取类加载器
						.getResourceAsStream("diagrams/helloWorld.zip"); // 获取指定文件资源流
	ZipInputStream zipInputStream=new ZipInputStream(inputStream); // 实例化zip输入流对象
	// 获取部署对象
	Deployment deployment=processEngine.getRepositoryService() // 部署Service
				 .createDeployment()  // 创建部署
				 .name("HelloWorld流程2")  // 流程名称
				 .addZipInputStream(zipInputStream)  // 添加zip是输入流
				 .deploy(); // 部署
	System.out.println("流程部署ID:"+deployment.getId());
	System.out.println("流程部署Name:"+deployment.getName());
}


我们运行这个测试类:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
流程部署ID:7501
流程部署Name:HelloWorld流程2


说明已经部署成功了;


我们来看下相关表:


这里我们再来把几个关键表拎出来,好好熟悉下:


act_re_deployment 流程定义部署表:

b.jpg


我们会发现,这里多了一条记录;


act_re_procdef 流程定义表

c.jpg

流程定义表里,我们发现VERSION_字段 版本升级了,KEY依然是一样的;


act_ge_bytearry 资源文件表

d.jpg


资源表里相应的多里两条记录;


这里再提一个表 act_ge_property 属性表

e.jpg


这里的next_dbid是主键策略,就是规定好了下一次生成的id就是10001;


完整代码:http://pan.baidu.com/s/1o8nGOd0



关键字:   Activiti  
关注Java1234微信公众号
博主信息
Java1234_小锋
(知识改变命运,技术改变世界)
Powered by Java1234 V3.0 Copyright © 2012-2016 Java知识分享网 版权所有