转自:http://blog.csdn.net/zjx86320/article/details/50234707

流程资源可以是各种类型的文件,在启动流程或流程实例运行过程中会被读取。下面介绍常用的流程资源。

一、流程资源

流程定义文件:扩展名为bpmn20.xml和bpmn;

流程定义的图片:用BPMN2.0规范的各种图形描绘,一般用PNG的格式;

表单文件:把表单内容保存在一个文件中,其扩展名为drl;

规则文件:其扩展名为drl;

二、部署流程资源

部署流程资源有很多种方法,包括classpath、InputStream、字符串、zip格式压缩包,下面将一一介绍。

1.classpath方式

  1. public class ProcessDefinitionTest {
  2. /**流程引擎(核心对象),默认加载类路径下命名为activiti.cfg.xml*/
  3. ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
  4. //部署流程定义
  5. @Test
  6. public void deployementProcessDefinition(){
  7. Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
  8. .createDeployment()//创建部署对象
  9. .name("helloworld演示")//声明流程的名称
  10. .addClasspathResource("diagrams/helloworld.bpmn")//加载资源文件,一次只能加载一个文件
  11. .addClasspathResource("diagrams/helloworld.png")//
  12. .deploy();//完成部署
  13. System.out.println("部署ID:"+deployment.getId());//1
  14. System.out.println("部署时间:"+deployment.getDeploymentTime());
  15. }
  16. }

2.InputStream方式

使用InputStream方式部署流程资源需要传入一个输入流及资源的名称,输入流的来源不限,可以从classpath读取,也可以从一个绝对路径文件读取,也可以是从网络上读取。

  1. //Inputstream方式
  2. @Test
  3. public void deployementProcessDefinitionByInputStream() throws FileNotFoundException{
  4. //获取资源相对路径
  5. String bpmnPath = "diagrams/helloworld.bpmn";
  6. String pngPath = "diagrams/helloworld.png";
  7. //读取资源作为一个输入流
  8. FileInputStream bpmnfileInputStream = new FileInputStream(bpmnPath);
  9. FileInputStream pngfileInputStream = new FileInputStream(pngPath);
  10. Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
  11. .createDeployment()//创建部署对象
  12. .addInputStream("helloworld.bpmn",bpmnfileInputStream)
  13. .addInputStream("helloworld.png", pngfileInputStream)
  14. .deploy();//完成部署
  15. System.out.println("部署ID:"+deployment.getId());//1
  16. System.out.println("部署时间:"+deployment.getDeploymentTime());
  17. }

 

3.字符串方式

利用字符串方式可以直接传入纯文本作为资源的来源,和前两种方式类似,字符串方式的实现原理是把一组字符串的内容转化为字节流后再部署。

  1. //字符串方式
  2. @Test
  3. public void deployementProcessDefinitionByString() throws FileNotFoundException{
  4. //字符串
  5. String text = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><definitions>...</definitions>";
  6. Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
  7. .createDeployment()//创建部署对象
  8. .addString("helloworld.bpmn",text)
  9. .deploy();//完成部署
  10. System.out.println("部署ID:"+deployment.getId());//1
  11. System.out.println("部署时间:"+deployment.getDeploymentTime());
  12. }

4.zip/bar格式压缩包方式

以上3种部署方式一次只能部署一个资源,除非执行多次deployment.addXxx()方法,如何一次部署多个资源呢?很简单,是我们可以使用zip/bar格式压缩包方式。将资源文件手动或使用Ant脚本,打包文件扩展名可以是Activiti官方推荐的bar或普通的zip。

  1. //部署流程定义(zip)
  2. @Test
  3. public void deployementProcessDefinitionByzip(){
  4. //从classpath路径下读取资源文件
  5. InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");
  6. ZipInputStream zipInputStream = new ZipInputStream(in);
  7. Deployment deployment = processEngine.getRepositoryService()//获取流程定义和部署对象相关的Service
  8. .createDeployment()//创建部署对象
  9. .addZipInputStream(zipInputStream)//使用zip方式部署,将helloworld.bpmn和helloworld.png压缩成zip格式的文件
  10. .deploy();//完成部署
  11. System.out.println("部署ID:"+deployment.getId());//1
  12. System.out.println("部署时间:"+deployment.getDeploymentTime());
  13. }

三、数据库表变更

在部署流程定义这一步,数据库中操作三张表:

1)ACT_RE_DEPLOYMENT(部署对象表)

存放流程定义的显示名和部署时间,每部署一次增加一条记录

2)ACT_RE_PROCDEF(流程定义表)

存放流程定义的属性信息,部署每个新的流程定义都会在这张表中增加一条记录。

注意:当流程定义的key相同的情况下,使用的是版本升级

3)ACT_GE_BYTEARRAY(资源文件表)

存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于bpmn规则文件的,一条是图片的(如果部署时只指定了bpmn一个文件,activiti会在部署时解析bpmn文件内容自动生成流程图)。两个文件不是很大,都是以二进制形式存储在数据库中。


         
         4)ACT_GE_PROPERTY(主键生成表)

主张表将生成下次流程部署的主键ID。

Activiti进阶(二)——部署流程资源的三种方式的更多相关文章

  1. 在Tomcat中部署web项目的三种方式

    搬瓦工搭建SS教程 SSR免费节点:http://www.xiaokeli.me 在这里介绍在Tomcat中部署web项目的三种方式: 1.部署解包的webapp目录 2.打包的war文件 3.Man ...

  2. Tomcat中部署web应用的三种方式

    Tomcat中部署web应用的三种方式(静态部署)       第一种,针对war或解压后的war,最为常用的是直接操作webapp目录,将完整的war包或者web应用直接放到webapp目录下.使用 ...

  3. 部署WEB应用的三种方式[转]

    一.基本部署 Tomcat安装目录下有一个webapps目录,该目录存放所有的WEB应用程序,Tomcat会自动管理该目录下的所有WEB应用.因此,最简单的部署方式就是将要部署的WEB应用直接拷贝到T ...

  4. 将web应用部署到Tomcat的三种方式

    Tomcat作为Servlet/JSP容器(服务器)挺不错的,开源免费,需要知道的是Tomcat是一个Web服务器,其符合Servlet/JSP规范,但是却没有实现所有JavaEE规范,所以我们还是应 ...

  5. SpringMVC访问静态资源的三种方式(转)

    本文转自:http://www.iigrowing.cn/springmvc_fang_wen_jing_tai_zi_yuan_de_san_zhong_fang_shi.html 如何你的Disp ...

  6. tomcat部署javaweb项目的三种方式

    一.将项目文件夹或war包直接拷贝到tomcat的webapps下 二.在Tomcat\conf\Catalina\localhost下建立xml文件 修改内容如下<Context path=& ...

  7. Tomcat部署web应用的三种方式

    原文:http://my.oschina.net/sunchp/blog/90235 一:相关概念 CATALINA_HOME:tomcat安装目录 CATALINA_BASE:tomcat工作目录 ...

  8. 当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

  9. SpringMVC访问静态资源的三种方式

    如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...

随机推荐

  1. 20145225唐振遠《网络对抗》Exp5 MSF基础应用

    基础问题回答 用自己的话解释什么是exploit,payload,encode? exploit就相当于是载具,将真正要负责攻击的代码传送到靶机中,我觉得老师上课举的火箭和卫星的例子非常形象,火箭只是 ...

  2. 20145332卢鑫 MSF基础应用

    20145332卢鑫 MSF基础应用 实验过程 靶机的IP地址:192.168.10.160 Kali的IP地址:192.168.10.128 1.一个主动攻击 攻击XP系统的漏洞:ms08_067 ...

  3. JS 获取浏览器的宽和高

    网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...

  4. linux下通过命令行上传文件到百度网盘

    一.环境: centos release 6.9 python 2.7.13 二.安装工具bypy sudo pip install bypy 三.使用bypy 3.1 授权 [root@ineedl ...

  5. ubuntu14.04禁止触摸板和恢复触摸板

    1.使用xinput list查看与触摸板相关的id,以下是本机的输出,没搞清楚为什么是Mouse!!! jello@jello:~$ xinput list⎡ Virtual core pointe ...

  6. swift设计模式学习 - 策略模式

    移动端访问不佳,请访问我的个人博客 设计模式学习的demo地址,欢迎大家学习交流 策略模式 策略模式定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户. ...

  7. 【基础配置】Dubbo的配置及使用

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...

  8. c# &与&& 和 |与||的区别

    &:按位与,对两个条件都进行判断 &&:逻辑与,只要一个条件满足,另外一个条件就不会执行 同理: |:按位或,对两个条件都进行判断 ||:逻辑或,只要一个条件满足,另外一个条件 ...

  9. makefile 中的符号替换($@、$^、$<、$?)

    Makefile  $@, $^, $< $@  表示目标文件$^  表示所有的依赖文件$<  表示第一个依赖文件$?  表示比目标还要新的依赖文件列表 如一个目录下有如下文件: $ ls ...

  10. Linux的内存分页管理【转】

    内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在其中保存数据.我将从内存的物理特性出发,深入到内存管理的细节,特别是了解虚拟内存和内存分页的概念. 内存 简单地说,内存就是一个数据货架.内存 ...