本文目录一览:
- 1、四、BPMN文件
- 2、activiti bpmn文件放哪里
- 3、activity后端文件后缀
- 4、activity发布流程定义
- 5、activiti6.0流程引擎部署方式之BpmnModel以及使用
- 6、如何实现bpmn文件更改后自动重新部署
四、BPMN文件
本文部分摘自
事件都是用一个圆圈来代表的,影响流程的流动,一般有一个原因(trigger)或者一个影响(result)。标准定义了三种事件:开始,中间和结束。从定义和分类名称上来看也能猜到事件的作用了,控制流程的开始,中间流转和结束,这些控制可能采取触发器(trigger)来完成,或者是导致一个结果(结束或抛出)。
这些任务中,需要人参与自身完成的有Manual Task 和UserTask。Manual Task是一个不受任何商业流程引擎管理的任务,User Task是。不受管理即意味着流程引擎无法追踪器任务的开始和完成。举个例子,这个可能就是一张充满指令的纸,为电话技术人员帮顾客安装电话-activity与bpmn文件
网关用于控制序列流如何在一个流程中收敛和发散的交互。如果一个流程不需要控制,那么网关就是非必需的。“网关”一词意味着有一个门机制。允许或不允许通过网关——也就是说,执行到网关的时候,当网关机制被调用,输入可以被合并在一起,或者输出分离成若干部分。-activity与bpmn文件
传统的流程建模要求能够模拟物品(物理或信息的)在流程中的创建、操作和执行过程。重要的方面就是能够捕获数据的结构,并且查询或者操作结构。
BPMN本身并不提供内置的模型来描述数据结构或查询数据的语言表达式。相反,它规范hooks来允许使用外部定义的数据结构和表达式语言。此外,在同一个模型中,BPMN允许不同的数据结构和表达式语言。这些语言的兼容性和验证是在规范的范围之外,变成了工具供应商的职责。-activity与bpmn文件
BPMN使用XML Schema和XPath作为其默认的数据结构和表达式语言,但是供应商可以自由替换他们自己的语言。
将一部分元素按逻辑或特定目的进行分组,便于查看和管理,用于解释和描述目的,不会影响流程的流转
提供一些附加性的文本信息给流程图的阅读者。
activiti bpmn文件放哪里
Activiti的流程定义文件可以直接部署bpmn20.xml、zip、bar文件,其中后面的zip和bar类型一样都是压缩文件格
式,bpmn20.xml是符合bpmn2.0规范的xml定义。
今天要解决的问题就是帮助大家打包流程资源文件,其中肯能包括:bpmn20.xml、png、form等文件。
大多数开发人员都是用Activiti Designer来设计流程定义,可能业务人员使用了其他的流程设计器来描述业务,然后开发人员用Activiti Designer来“深加工”以便让计算机能读懂流程的走向及其逻辑。-activity与bpmn文件
activity后端文件后缀
后缀是bpmn。
准备工作做好之后,就可以编写人生中第一个activity程序,使用activity插件新建一个流程,activity插件会给我们生成一个后缀为bpmn的文件。
activity发布流程定义
springboot整合activity到这里,基本的框架搭建完成,下面做下总结:
1.依赖
dependency
groupIdorg.activiti/groupId
artifactIdactiviti-spring-boot-starter/artifactId
version7.1.0.M1/version
/dependency
2.配置文件:
spring.activiti.process-definition-location-prefix=classpath:/process/
3.bpmn文件
所有流程实例都共享同一个流程定义。发布流程定义意味着流程定义会保存到持久化的数据存储里,BPMN 2.0流程文件会解析成内存对象模型, 可以通过Activiti API操作。
主要编码:
@Autowired
RepositoryService repositoryService;
@Override
public void deploy() {
Deployment deploy =repositoryService.createDeployment()
.addClasspathResource("process/emplLeave.png")
.addClasspathResource("process/emplLeave.xml")
.name("emplLeave").key("emplLeave").deploy();
System.out.println(deploy);
}
部署完成后,可以到这两张表中查看。
SELECT * FROM act_re_deployment #部署对象表
SELECT * FROM act_re_procdef #流程定义表
SELECT * FROM act_ge_bytearray #资源文件表
activiti6.0流程引擎部署方式之BpmnModel以及使用
在流程资源文件中,每一个节点元素在activiti中都有对应的元素属性承载类,比如,UserTask任务节点,它的元素属性承载类为UserTask,相同,startEvent开始节点的元素承载类为StartEvent,在bpmn流程文件进行解析时,也是将xml文档中每个元素解析为对应的承载类,从而进行组装成一个BmpnModel模型,我们可以直接由activiti将bpmn xml文件解析为一个实例模型(下图所示),也可以完成通过自定义手动创建模型。-activity与bpmn文件
关于模型校验器更多细节可查看 activiti源码剖析之BpmnModel模型校验器
如何实现bpmn文件更改后自动重新部署
首页 Activiti activiti--部署bpmn/bar文件详解
activiti--部署bpmn/bar文件详解
Everything that is related to 'static' data (such as process definitions) are accessed through the RepositoryService. Conceptually, every such static piece of data is content of the 'repository' of the Activiti engine.-activity与bpmn文件
当配置好工作流,启动工作流。我们的第一步就是配置bpmn、bar、bpmn20.xml等文件。
部署bpmn的简单代码:
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RepositoryService repositoryService = processEngine.getRepositoryService();
repositoryService.createDeployment()
.addClasspathResource("org/activiti/test/AssigneeUserAndGroup.bpmn")
.deploy();
简单解释:创建一个部署引擎DeploymentBuilder,然后通过addClasspathResource把文件路径设置进去(最起码activiti需要知道部署哪一个文件啊),然后启动部署方法deploy()。-activity与bpmn文件
addClasspathResource()方法其实就是把文件读入到一个输入流中,然后调用addInputStream()方法。addInputStream()主要是创建一个资源类,然后设置名称,字节,并且把这个资源给deployment实体-activity与bpmn文件
public DeploymentBuilder addInputStream(String resourceName, InputStream inputStream) {
if (inputStream==null) {
throw new ActivitiIllegalArgumentException("inputStream for resource '"+resourceName+"' is null");-activity与bpmn文件
}
byte[] bytes = IoUtil.readInputStream(inputStream, resourceName);
ResourceEntity resource = new ResourceEntity();
resource.setName(resourceName);
resource.setBytes(bytes);
deployment.addResource(resource);
return this;
}
public DeploymentBuilder addClasspathResource(String resource) {
InputStream inputStream = ReflectUtil.getResourceAsStream(resource);
if (inputStream==null) {
throw new ActivitiIllegalArgumentException("resource '"+resource+"' not found");
}
return addInputStream(resource, inputStream);
}
所以也可以直接调用addInputStream(String resourceName, InputStream inputStream)进行文件的部署。
注意:单独部署一个bpmn文件,png会在底层BpmnDeployer中分解出来,并且保存到数据库中。
如果一个部署中涉及到多个文件,我们可以打包一起部署,例如方法addZipInputStream(ZipInputStream zipInputStream),其实addZipInputStream会把这个包下面的所有文件逐一找出来,然后创建资源类,设置到deployment实体中。-activity与bpmn文件
public DeploymentBuilder addZipInputStream(ZipInputStream zipInputStream) {
try {
ZipEntry entry = zipInputStream.getNextEntry();
while (entry != null) {
if (!entry.isDirectory()) {
String entryName = entry.getName();
byte[] bytes = IoUtil.readInputStream(zipInputStream, entryName);
ResourceEntity resource = new ResourceEntity();
resource.setName(entryName);
resource.setBytes(bytes);
deployment.addResource(resource);
}
entry = zipInputStream.getNextEntry();
}
} catch (Exception e) {
throw new ActivitiException("problem reading zip input stream", e);
}
return this;
}
下面说说.bar文件怎么打包:
(1)把文件都拷到同一目录下面
(2)对diagrams文件夹进行打包
diagrams.zip
(3)修改文件的扩展名diagrams.bar
其实一切很简单...