Flowable CMMN 使用过程
Flowable 案例模型 CaseModelDefinition docker方式部署Flowable-UI环境
一、简介
本篇文章仅是记录个人使用 Flowable Case Model 过程中的情况。
文档详细可查阅 Flowable 官方文档
二、概念
什么是Case Model,个人理解:它是可以解决某个领域问题的模型;例如:用户模块、购物模块、财务管理、年审等业务场景;也可以简单理解为一堆功能的集合体,然后通过准入条件和退出条件来甄别是否执行业务作业(PlanItem Instance)。
三、术语与结构
框架设定上允许使用行业标准XML来定义流程,那么我们可以先看下整个案例模型定义的结构是怎么样的?它由哪些标签组成?
案例模型(CaseModel)也可以称为案例模型定义(CaseModelDefinition)由它创建出来的XML文件后缀名为 .cmmn.xml
├─Case
│ └─CasePlanModel
│ ├─Criteria
│ ├─Event
│ ├─PlanItem
│ ├─Milestone
│ ├─Stage
│ │ ├─PlanItem
│ │ ├─Criteria
│ │ ├─Task
│ │ ├─Milestone
│ │ └─ExtensionElements
│ └─Task
文件内容大致上的结构分层类似酱紫的!
- 一个案例定义是拥有一个或者多个案例计划模块;
- 每个案例计划模块包含有多个计划项(PlanItem)、而每个计划项是可以设置准入条件和退出条件的;
- 而像阶段(stage)、各类任务(Task)、里程牌(Milestone)、事件(Event)它们都可以作为一个计划项;
- 因此假设启动一个案例定义来获得一个案例实例(CaseInstance)之后,你通过查询就会得到好多个计划项实例(PlanItemInstance)
- 如果你查看一份XML文件,在同一层级结构上你会看到这样的结构内容
<planitem id="planItem2" name="Stock Stage" definitionref="stock_stage">
<exitcriterion id="sid-1E54860D-FDEF-464B-B16A-A924DE419A84" sentryref="sentry2"></exitcriterion>
</planitem>
<planitem id="planItem3" name="Stock And Order Milestone" definitionref="stockOrderMilestone"></planitem>
<sentry id="sentry2">
<planitemonpart id="sentryOnPart1" sourceref="planItem1">
<standardevent>complete</standardevent>
</planitemonpart>
<ifpart>
<condition></condition>
</ifpart>
</sentry>
<sentry id="sentry1">
<planitemonpart id="sentryOnPart1" sourceref="planItem1">
<standardevent>complete</standardevent>
</planitemonpart>
</sentry>
<stage id="stock_stage" name="Stock Stage">......</stage>
解读出来就类似于:我们先有一个计划项 绑定了一个计划项定义,然后下面是一个哨兵监听了这些计划项,控制它的出入或退出;最后查看下面的标签都是计划项定义(就是humanTask、stage、userEvent、milestone这些标签)
我发现这个结构分布是有顺序要求的,如果你打乱了很有可能是无法发布部署XML的,亲们可以自己尝试下哈。
上面提到的名词术语我们需要稍微记忆一下,方便理解后续的内容
官方图示
源代码服务类划分如上图,显示的是案例引擎提供的服务类,跟BPMN的类似的作用
- CmmnRepositoryService 提供管理案例定义和操作部署的服务
- CmmnRuntimeService 可以启动案例定义来产生一个新案例实例,检索和存储案例变量、查询案例实例详情和计划项列表;或者响应案例实例的各种等待状态,触发计划项等等操作
- CmmnTaskService 查询、分配给用户或组的任,创建新的独立任务;领取、受让并完成任务。
- CmmnHistoryService 收集的案例实例的所有历史数据;例如案例实例启动时间、谁执行了哪些任务、完成任务需要多长时间、每个案例实例遵循哪条路径,等等。
- CmmnManagementService 提供对有关数据库表的低级信息的访问,允许查询不同类型的作业并执行它们。
四、学习路线
- 配置项目环境 (SpringBoot 集成 Flowable 应用程序)
- 设计并发布部署一个案例模型定义
- 启动案例模型定义来创建案例实例
- 执行案例实例的计划项实例
五、配置项目环境 (SpringBoot 集成 Flowable 应用程序)
开发环境 我这里使用的 Docker compose 来部署基础环境,所以像MYSQL、Flowable-UI 都将会使用docker方式部署它。
5.1 环境要求
- Docker 和 Docker Compose 命令可用
- JDK 11+
- intellij IDEA 编译器
- Maven 3.8.0+
5.2 Docker Compose 安装基础环境
主要是部署了 MYSQL、Redis、Flowable-UI 应用容器哈!
在个人的工作目录新建配置文件 docker-compose.yml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql
command: [ "--max_connections=1000" ]
ports:
- "3306:3306"
#command: ["--log_bin_trust_function_creators=1"]
security_opt:
- seccomp:unconfined
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/config/my.cnf:/etc/mysql/my.cnf
- ./mysql/init:/docker-entrypoint-initdb.d
- ./mysql/log:/var/log/mysql
- ./mysql/mysql-files:/var/lib/mysql-files
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=root
- MYSQL_ALLOW_EMPTY_PASSWORD=no
- MYSQL_USER=nine
- MYSQL_PASS=password
networks:
- localhost-network
restart: always
redis:
image: redis:latest
container_name: redis
command: ["redis-server","/etc/redis/redis.conf"]
environment:
- TZ=Asia/Shanghai
#- ALLOW_EMPTY_PASSWORD=yes
#- REDIS_PASSWORD=password
#- REDIS_HOST=127.0.0.1
volumes:
- ./redis/data:/data
- ./redis/conf/redis.conf:/etc/redis/redis.conf
ports:
- 6379:6379
networks:
- localhost-network
restart: always
flowable-ui:
image: flowable/flowable-ui:6.7.2
container_name: flowable-ui
ports:
- 8087:8080
volumes:
- ./workflow/apps:/apps
- ./workflow/processes:/processes
- ./workflow/cases:/cases
- ./workflow/dmn:/dmn
- ./workflow/eventregistry:/eventregistry
- ./workflow/forms:/forms
- ./workflow/data:/data
- "./mysql/mysql-connector-j-8.0.33.jar:/app/WEB-INF/lib/mysql-connector-j-8.0.33.jar"
environment:
- server.forward-headers-strategy=framework
- spring_datasource_url=jdbc:mysql://mysql/docpal
- spring.datasource.username=root
- spring.datasource.password=root
- spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
- spring.jpa.show-sql=false
- spring.jpa.hibernate.ddl-auto=create
- flowable_app_resource-location=file:/apps/
- flowable_process-definition-location-prefix=file:/processes/
- flowable_cmmn_resource-location=file:/cases/
- flowable_dmn_resource-location=file:/dmn/
- flowable_eventregistry_resource-location=file:/eventregistry/
- flowable_form_resource-location=file:/forms/
- flowable_content_storage_root-folder=/data
- flowable.mail.server.host=mailhog
- flowable.mail.server.port=1025
- flowable.mail.server.username=
- flowable.mail.server.password=
- flowable.idm.app.admin.user-id=admin
- flowable.idm.app.admin.password=test
- flowable.idm.app.admin.first-name=Test
- flowable.idm.app.admin.last-name=Administrator
- flowable.idm.app.admin.email=test-admin@example-domain.tld
networks:
- localhost-network
depends_on:
- mysql
restart: always
volumes:
mysql:
elastic:
redis:
networks:
localhost-network:
name: localhost-network-1
启动 docker 容器列表
docker compose -f docker-compose.yml up -d
Flowable-UI启动之后,直接浏览器打开:http://localhost:8087/flowable-ui/idm/#/login
它的默认账号/密码 admin/test 登录成功。
Okay,暂时搞掂一丢丢!!!
更多推荐
所有评论(0)