您的位置:首页 > 其它

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

2017-03-28 08:01 381 查看
    在使用activiti工作流之前,我们得先画一个工作流流程,它会生成两个文件,一个是bpmn文件,一个是png文件。流程定义的部署,完全是根据这两个流程文件来进行的。
以一个简单的流程为例:



    部署流程定义一共有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,然后进行部署到的:


 

代码如下:

/**将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());

}
 
 
部署流程定义之后,就可以启动一个流程实例,然后各个角色就可以执行各自的任务了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐