工作流框架--activiti(二)--部署流程定义

    在使用activiti工作流之前,我们得先画一个工作流流程,它会生成两个文件,一个是bpmn文件,一个是png文件。流程定义的部署,完全是根据这两个流程文件来进行的。

以一个简单的流程为例:

工作流框架--activiti(二)--部署流程定义_第1张图片

    部署流程定义一共有3个不同的方法,但是原理相同,都是读取刚刚画的两个流程文件。

 

    第一种创建流程定义的方法就是用classpath的方法,也就是读取这两个文件来创建:

    需要注意的是,一个流程定义之后不能修改,如果想启用新的流程定义,就得新创建一个新的,等旧的执行完之后再部署启用。

代码如下:

/**部署流程定义(从classpath*/

@Test

public void deploymentProcessDefinition_classpath(){

Deployment deployment =processEngine.getRepositoryService()//与流程定义和部署对象相关的service

                   .createDeployment()//创建一个部署对象

                   .name("流程定义")//添加部署的名称

                   .addClasspathResource("diagrams/helloworld.bpmn")//classpath的资源中加载,一次只能加载一个文件

                   .addClasspathResource("diagrams/helloworld.png")//classpath的资源中加载,一次只能加载一个文件

                   .deploy();//完成部署

System.out.println(deployment.getId());

System.out.println(deployment.getName());

}

 

第二种方法是将两个流程文件压缩成zip,然后进行部署到的:

工作流框架--activiti(二)--部署流程定义_第2张图片 

代码如下:

/**bpmn文件和png文件压缩成zip文件之后,用zip文件部署流程定义*/

@Test

public void deploymentProcessDefinition_zip(){

InputStream in=this.getClass().getClassLoader().getResourceAsStream("diagrams/helloworld.zip");

ZipInputStream zipInputStream =new ZipInputStream(in);

Deployment deployment =processEngine.getRepositoryService()//与流程定义和部署对象相关的service

                   .createDeployment()//创建一个部署对象

                   .name("流程定义")//添加部署的名称

                   .addZipInputStream(zipInputStream)//指定zip格式的文件完成部署

                   .deploy();//完成部署

System.out.println(deployment.getId());

System.out.println(deployment.getName());

}

 

第三种方法是使用输入流的方法读取流程文件:

首先要知道读取输入流的方法,一共有3种:

 this.getClass().getClassLoader().getResourceAsStream("testVariables.bpmn");//classpath根目录下加载指定名称的文件

    this.getClass().getResourceAsStream("testVariables.bpmn");//从当前包下加载指定名称的文件

    this.getClass().getResourceAsStream("/testVariables.bpmn");//calsspath根目录下加载指定名称的文件

 

接下来就是部署流程定义的方法:

/**Inputstream方法来部署流程定义*/

@Test

public void deploymentProcessDefinition_inputStram(){

//因为这里我的测试类和pbmn在同一个目录下,所以不用getClassLoader

InputStream inputStreambpmn =this.getClass().getResourceAsStream("/diagrams/processVariables.pbmn");

InputStream inputStreampng =this.getClass().getResourceAsStream("/diagrams/processVariables.png");

Deployment deployment =processEngine.getRepositoryService()//与流程定义和部署对象相关的service

                   .createDeployment()//创建一个部署对象

                   .name("流程定义")//添加部署的名称

                   .addInputStream("processVariables.pbmn",inputStreambpmn)//使用资源文件的名称(要求:与资源文件名称一致),输入流完成部署

                   .addInputStream("processVariables.png",inputStreampng)//使用资源文件的名称(要求:与资源文件名称一致),输入流完成部署

                   .deploy();//完成部署

System.out.println(deployment.getId());

System.out.println(deployment.getName());

}

 

 

部署流程定义之后,就可以启动一个流程实例,然后各个角色就可以执行各自的任务了。

你可能感兴趣的:(Activiti工作流)