部署
- 以编程方式部署
String barFileName = "path/to/process-one.bar";
ZipInputStream inputStream = new ZipInputStream(new FileInputStream(barFileName));
repositoryService.createDeployment()
.name("process-one.bar")
.addZipInputStream(inputStream)
.deploy();
- 外部资源
- 流程定义存在于Flowable数据库中。
- 当使用 Service Tasks或者execution listeners或者在Flowable配置文件中的spring bean时,流程定义可以引用委托类
- 这些类和Spring配置文件必须可用于可执行流程定义的所有流程引擎
2.1 Java类
- 在启动进程实例时,进程中使用的所有自定义类(例如,Service Tasks或事件侦听器中使用的JavaDelegates,TaskListeners等)都应存在于引擎的类路径中。
- 在部署业务归档期间,这些类不必存在于类路径中
- 在使用Ant部署新的业务归档时,您的委托类不必位于类路径中
- 将自定义类的JAR添加到flowable-task或flowable-rest webapp lib(包含自定义类(如果有)的依赖项)
- 将依赖项包含在Tomcat安装的libraries目录中${tomcat.home}/lib
2.2 使用进程中的Spring bean
- 当表达式或脚本使用Spring bean时,执行流程定义时,这些bean必须可供引擎使用
- 如果您使用它,您还应该更新Flowable任务并使用该上下文 rest webapps
2.3 创建一个应用程序
- 将Flowable REST Web应用程序包含在您自己的Web应用程序中
- 只有一个可用,而不是确保所有进程引擎在其类路径上都具有所有委托类并使用正确的Spring配置ProcessEngine
流程定义的版本控制
- BPMN没有版本控制的概念
- 可执行的BPMN流程文件可能会作为开发项目的一部分存在于版本控制系统存储库(svn)
- 作为部署的一部分,在引擎中创建流程定义的版本
- 在部署期间,Flowable将ProcessDefinition在存储在Flowable DB之前为其分配版本
- 对于在业务归档的每个流程定义,执行以下步骤来初始化属性key,version,name和id:
- 流程定义id的XML文件中的属性作为流程定义key属性
- 流程定义name的XML文件中的属性作为流程定义name属性。如果未指定name属性,则使用id属性作为名称
- 第一次部署具有特定密钥的进程时,将分配版本1。对于具有相同密钥的流程定义的所有后续部署,版本将设置为高于当前部署的最高版本+1。key属性用于区分流程定义
- id属性设置为{processDefinitionKey}:{processDefinitionVersion}:{generated-id},其中generated-id添加了唯一编号,以保证集群环境中流程定义高速缓存的进程ID的唯一性。
<definitions id="myDefinitions" >
<process id="myProcess" name="My important process" >
...
2.1 部署此流程定义时,数据库中的流程定义将如下所示:
image.png
2.2 假设我们现在部署同一进程的更新版本(例如,更改某些用户任务)
image.png
2.3 当runtimeService.startProcessInstanceByKey("myProcess")调用它时,它现在将使用版本的流程定义2,因为这是流程定义的最新版本
2.4 创建第二个进程(如下所述)并将其部署到Flowable
<definitions id="myNewDefinitions" >
<process id="myNewProcess" name="My important process" >
...
image.png
提供流程图
- 可以将流程图图像添加到部署中。
- 此图像将存储在Flowable存储库中,并可通过API访问。
- 此图像还用于可视化Flowable应用程序中的过程
-
假设我们的类路径org/flowable/expenseProcess.bpmn20.xml上有一个进程,它有一个进程密钥开销。流程图图像的以下命名约定适用(按此特定顺序)
- 如果部署中存在具有与进程密钥和图像后缀连接的BPMN 2.0 XML文件名的名称的映像资源,则使用此映像
- 在一个BPMN 2.0 XML文件中定义了多个图像,则此方法最有意义。然后,每个图表图像将在其文件名中包含进程密钥
- 如果不存在此类映像,则搜索与BPMN 2.0 XML文件的名称匹配的部署中的映像资源
- 同一BPMN 2.0文件中定义的每个流程定义都具有相同的流程图图像
- 如果部署中存在具有与进程密钥和图像后缀连接的BPMN 2.0 XML文件名的名称的映像资源,则使用此映像
-
以编程方式部署的示例:
repositoryService.createDeployment()
.name("expense-process.bar")
.addClasspathResource("org/flowable/expenseProcess.bpmn20.xml")
.addClasspathResource("org/flowable/expenseProcess.png")
.deploy();
- 通过API检索图像资源
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
.processDefinitionKey("expense")
.singleResult();
String diagramResourceName = processDefinition.getDiagramResourceName();
InputStream imageStream = repositoryService.getResourceAsStream(
processDefinition.getDeploymentId(), diagramResourceName);
生成流程图
- 如果流程定义包含必要的图表交换信息,Flowable引擎将生成流程图图像
- 如果由于某种原因,在部署期间生成图表没有必要或不可取,则isCreateDiagramOnDeploy可以在流程引擎配置上设置该属性:
<property name="createDiagramOnDeploy" value="false" />
类别
- 部署和流程定义都具有用户定义的类别
- 使用BPMN XML中targetNamespace属性的值初始化流程定义类别:<definitions … targetNamespace="yourCategory" …
- 部署类别也可以在API中指定
repositoryService .createDeployment() .category("yourCategory") ... .deploy();
网友评论