Activiti进阶(二)——部署流程资源的三种方式
转自:http://blog.csdn.net/zjx86320/article/details/50234707
流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被读取。下面介绍常用的流程资源。
一、流程资源
流程定义文件:扩展名为bpmn20.xml和bpmn;
流程定义的图片:用BPMN2.0规范的各种图形描绘,一般用PNG的格式;
表单文件:把表单内容保存在一个文件中,其扩展名为drl;
规则文件:其扩展名为drl;
二、部署流程资源
部署流程资源有很多种方法,包括classpath、InputStream、字符串、zip格式压缩包,下面将一一介绍。
1.classpath方式
- public class ProcessDefinitionTest {
 - /**流程引擎(核心对象),默认加载类路径下命名为activiti.cfg.xml*/
 - ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
 - //部署流程定义
 - @Test
 - public void deployementProcessDefinition(){
 - Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
 - .createDeployment()//创建部署对象
 - .name("helloworld演示")//声明流程的名称
 - .addClasspathResource("diagrams/helloworld.bpmn")//加载资源文件,一次只能加载一个文件
 - .addClasspathResource("diagrams/helloworld.png")//
 - .deploy();//完成部署
 - System.out.println("部署ID:"+deployment.getId());//1
 - System.out.println("部署时间:"+deployment.getDeploymentTime());
 - }
 - }
 
2.InputStream方式
使用InputStream方式部署流程资源需要传入一个输入流及资源的名称,输入流的来源不限,可以从classpath读取,也可以从一个绝对路径文件读取,也可以是从网络上读取。
- //Inputstream方式
 - @Test
 - public void deployementProcessDefinitionByInputStream() throws FileNotFoundException{
 - //获取资源相对路径
 - String bpmnPath = "diagrams/helloworld.bpmn";
 - String pngPath = "diagrams/helloworld.png";
 - //读取资源作为一个输入流
 - FileInputStream bpmnfileInputStream = new FileInputStream(bpmnPath);
 - FileInputStream pngfileInputStream = new FileInputStream(pngPath);
 - Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
 - .createDeployment()//创建部署对象
 - .addInputStream("helloworld.bpmn",bpmnfileInputStream)
 - .addInputStream("helloworld.png", pngfileInputStream)
 - .deploy();//完成部署
 - System.out.println("部署ID:"+deployment.getId());//1
 - System.out.println("部署时间:"+deployment.getDeploymentTime());
 - }
 
3.字符串方式
利用字符串方式可以直接传入纯文本作为资源的来源,和前两种方式类似,字符串方式的实现原理是把一组字符串的内容转化为字节流后再部署。
- //字符串方式
 - @Test
 - public void deployementProcessDefinitionByString() throws FileNotFoundException{
 - //字符串
 - String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><definitions>...</definitions>";
 - Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
 - .createDeployment()//创建部署对象
 - .addString("helloworld.bpmn",text)
 - .deploy();//完成部署
 - System.out.println("部署ID:"+deployment.getId());//1
 - System.out.println("部署时间:"+deployment.getDeploymentTime());
 - }
 
4.zip/bar格式压缩包方式
以上3种部署方式一次只能部署一个资源,除非执行多次deployment.addXxx()方法,如何一次部署多个资源呢?很简单,是我们可以使用zip/bar格式压缩包方式。将资源文件手动或使用Ant脚本,打包文件扩展名可以是Activiti官方推荐的bar或普通的zip。
- //部署流程定义(zip)
 - @Test
 - public void deployementProcessDefinitionByzip(){
 - //从classpath路径下读取资源文件
 - InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");
 - ZipInputStream zipInputStream = new ZipInputStream(in);
 - Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
 - .createDeployment()//创建部署对象
 - .addZipInputStream(zipInputStream)//使用zip方式部署,将helloworld.bpmn和helloworld.png压缩成zip格式的文件
 - .deploy();//完成部署
 - System.out.println("部署ID:"+deployment.getId());//1
 - System.out.println("部署时间:"+deployment.getDeploymentTime());
 - }
 
三、数据库表变更
在部署流程定义这一步,数据库中操作三张表:
1)ACT_RE_DEPLOYMENT(部署对象表)
存放流程定义的显示名和部署时间,每部署一次增加一条记录
2)ACT_RE_PROCDEF(流程定义表)
存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。
注意:当流程定义的key相同的情况下,使用的是版本升级
3)ACT_GE_BYTEARRAY(资源文件表)
存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。
         
         4)ACT_GE_PROPERTY(主键生成表)
主张表将生成下次流程部署的主键ID。
Activiti进阶(二)——部署流程资源的三种方式的更多相关文章
- 在Tomcat中部署web项目的三种方式
		
搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...
 - Tomcat中部署web应用的三种方式
		
Tomcat中部署web应用的三种方式(静态部署) 第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...
 - 部署WEB应用的三种方式[转]
		
一.基本部署 Tomcat安装目录下有一个webapps目录,该目录存放所有的WEB应用程序,Tomcat会自动管理该目录下的所有WEB应用.因此,最简单的部署方式就是将要部署的WEB应用直接拷贝到T ...
 - 将web应用部署到Tomcat的三种方式
		
Tomcat作为Servlet/JSP容器(服务器)挺不错的,开源免费,需要知道的是Tomcat是一个Web服务器,其符合Servlet/JSP规范,但是却没有实现所有JavaEE规范,所以我们还是应 ...
 - SpringMVC访问静态资源的三种方式(转)
		
本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html 如何你的Disp ...
 - tomcat部署javaweb项目的三种方式
		
一.将项目文件夹或war包直接拷贝到tomcat的webapps下 二.在Tomcat\conf\Catalina\localhost下建立xml文件 修改内容如下<Context path=& ...
 - Tomcat部署web应用的三种方式
		
原文:http://my.oschina.net/sunchp/blog/90235 一:相关概念 CATALINA_HOME:tomcat安装目录 CATALINA_BASE:tomcat工作目录 ...
 - 当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式
		
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
 - SpringMVC访问静态资源的三种方式
		
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
 
随机推荐
- 了解微信小程序
			
了解微信小程序 版权声明:未经博主授权,内容严禁转载分享! 微信小程序官方网址:https://mp.weixin.qq.com/cgi-bin/wx 某大神知乎专栏地址:七月在夏天 https:// ...
 - redis.windows.conf 参数说明
			
1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/ru ...
 - Android项目开发二
			
微博客户端开发 本周学习计划 学习布局控件和UI设计相关知识. 微博验证,学习OAuth相关知识. 看懂微博客户端开发部分代码. 把借鉴代码导入到Android Studio中并运行成功. 实际完成情 ...
 - SpringCloud请求响应数据转换(二)
			
上篇文章记录了从后端接口返回数据经过切面和消息转换器处理后返回给前端的过程.接下来,记录从请求发出后到后端接口调用过的过程. web请求处理流程 源码分析 ApplicationFilterChain ...
 - IDEA Java开发常用插件
			
这里只是推荐一下好用的插件,具体的使用方法就不一一详细介绍了. JRebel for IntelliJ 一款热部署插件,只要不是修改了项目的配置文件,用它都可以实现热部署.收费的,破解比较麻烦.不过功 ...
 - 嵌入式系统 Boot Loader 技术内幕【转】
			
本文转载自:https://www.ibm.com/developerworks/cn/linux/l-btloader/ 本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Lo ...
 - Goldbach`s Conjecture(素筛水题)题解
			
Goldbach`s Conjecture Goldbach's conjecture is one of the oldest unsolved problems in number theory ...
 - json字符窜转对象
			
第一种方法: 注意引用:using System.Runtime.Serialization.Json; using System.IO; static void Main(string[] args ...
 - requirejs配置代码示例
			
requirejs大致用法:通过定义模板define()再通过require()或requirejs()加载模板,paths是路径,如果路径长可以把它赋一个短名称加入ruquire()中,shim是兼 ...
 - java中集合格式及json格式的特点和转换
			
作者原创:转载请注明出处 今天在写代码,遇到一个难点,由于要调用webservice接口,返回的为一个list集合内容,从webservice调用接口返回的为一个string的io流, 在调用接口的地 ...