背景
最近在研究BPM, 發現了flowable這個框架.
用的版本是docker版本的flowable/all-in-one, 當時的鏡像版本是6.5.0.
爲了圖省事, docker run以後, 我把容器中的tomcat目錄全部複製出來了, 然後再配置下java的一些環境變量啥的(如果有就不用配置了), 就相當於全部安裝完了.
其中包括4個web應用:
- flowable-admin: 總控制檯
- flowable-idm: 身份認證(用戶, 用戶組, 權限)
- flowable-task: 流程, 任務處理
- flowable-modeler: 流程建模(流程模型創建, 表單, 應用程序, …)
拿來探索之後, 做了如下修改:
修改數據源爲mysql
上面介紹的4個web應用用的數據源都是H2, 此數據庫是完全基於內存的, 重啓tomcat數據就沒了.
所以改成mysql的方便做實驗, 不然每次都得重新創建/導入數據.
增加 mysql JNDI數據源
首先要創建一個數據庫(我這裏就叫flowable)
$ cat tomcat/conf/context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 省略... -->
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>
WEB-INF/web.xml
</WatchedResource>
<WatchedResource>
WEB-INF/tomcat-web.xml
</WatchedResource>
<WatchedResource>
${catalina.base}/conf/web.xml
</WatchedResource>
<Resources cachingAllowed="true" cacheMaxSize="100000" />
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!-- <Manager pathname="" /> -->
<!-- 這些是自己增加的 -->
<Resource auth="Container"
name="jdbc/flowableDS"
type="javax.sql.DataSource"
description="JDBC DataSource"
url="jdbc:mysql://localhost:3306/flowable?useUnicode=true&characterEncoding=utf8"
driverClassName="com.mysql.jdbc.Driver"
username="root"
password="******"
defaultAutoCommit="false"
initialSize="5"
maxWaitMillis="5000"
maxTotal="120"
maxIdle="5"/>
</Context>
使各個應用使用datasource jndi
然後在上述4個應用的對應配置文件中打開datasource的jndi配置.
如對modeler而言
$ cat tomcat/webapps/flowable-modeler/WEB-INF/classes/flowable-default.properties
spring.datasource.jndi-name=jdbc/flowableDS
配置好以後, 重新啓動tomcat, 會發現flowable數據庫中多了很多表出來, 說明配置成功了.
配置郵件服務
flowable支持郵件任務, 但是前提是要配置好郵件發送服務.
由於是task應用發郵件的, 所以改task應用的配置, 找到mail相關的, 改成合適的值:
$ cat tomcat/webapps/flowable-task/WEB-INF/classes/flowable-default.properties
flowable.mail.server.host=smtp.qq.com
flowable.mail.server.port=25
[email protected] # 我的qq郵箱
flowable.mail.server.password=xxx # qq郵箱現在需要什麼授權碼, 這個在qq郵箱設置頁可以獲得.
郵件任務測試
配置好上面的以後, 我製作了一個簡單的流程, 包括郵件任務, 測試可以發送成功.
上面是流程圖, 其中"發送郵件"是一個郵件任務. 其xml表示爲:
cat 模型-發送郵件.bpmn20.xml
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef">
<process id="model_send_mail" name="模型-發送郵件" isExecutable="true">
<startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent>
<userTask id="sid-4BF3E2A0-FFD8-4CA8-B008-61D781BBFDE2" name="輸入郵件內容等" flowable:candidateGroups="admin" flowable:formKey="model_send_mail" flowable:formFieldValidation="true">
<extensionElements>
<modeler:group-info-name-admin xmlns:modeler="http://flowable.org/modeler"><![CDATA[admin group]]></modeler:group-info-name-admin>
<modeler:activiti-idm-candidate-group xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-group>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow id="sid-4C9E3145-C9B1-4B3C-A9B3-6E9A85479223" sourceRef="startEvent1" targetRef="sid-4BF3E2A0-FFD8-4CA8-B008-61D781BBFDE2"></sequenceFlow>
<serviceTask id="sid-7A166748-2174-4F8E-AA4F-B7C4B9685D18" name="發送郵件" flowable:type="mail">
<extensionElements>
<flowable:field name="to">
<flowable:expression><![CDATA[${to}]]></flowable:expression>
</flowable:field>
<flowable:field name="from">
<flowable:expression><![CDATA[${from}]]></flowable:expression>
</flowable:field>
<flowable:field name="subject">
<flowable:expression><![CDATA[${subject}]]></flowable:expression>
</flowable:field>
<flowable:field name="text">
<flowable:expression><![CDATA[${content}]]></flowable:expression>
</flowable:field>
<flowable:field name="html">
<flowable:expression><![CDATA[${html}]]></flowable:expression>
</flowable:field>
</extensionElements>
</serviceTask>
<sequenceFlow id="sid-1B68CF6A-9A0E-4F93-8A65-1395A351933C" sourceRef="sid-4BF3E2A0-FFD8-4CA8-B008-61D781BBFDE2" targetRef="sid-7A166748-2174-4F8E-AA4F-B7C4B9685D18"></sequenceFlow>
<endEvent id="sid-04CBB505-2748-45C6-B942-04C3BAB802F4"></endEvent>
<sequenceFlow id="sid-AA574C01-41E8-4AAC-BF46-99F8860F414E" sourceRef="sid-7A166748-2174-4F8E-AA4F-B7C4B9685D18" targetRef="sid-04CBB505-2748-45C6-B942-04C3BAB802F4"></sequenceFlow>
</process>
</definitions>
啓動流程之後, 用戶填寫表單, 輸入收件人, 郵件主題等, 然後確定.
輸入的值會傳遞給郵件任務, 然後自動發郵件.
集成LDAP
vim tomcat/webapps/flowable-idm/WEB-INF/classes/flowable-default.properties
找到ldap相關配置
#
# LDAP
#
flowable.idm.ldap.enabled=true
flowable.idm.ldap.server=ldap://192.168.3.3
flowable.idm.ldap.port=389
flowable.idm.ldap.user=cn=admin,dc=example,dc=com
flowable.idm.ldap.password=xxxxxx
flowable.idm.ldap.base-dn=dc=example,dc=com
flowable.idm.ldap.user-base-dn=ou=Account,dc=example,dc=com
flowable.idm.ldap.group-base-dn=ou=Group,dc=example,dc=com
# 查找用戶, {0{爲uid, 根據實際情況書寫查詢條件
flowable.idm.ldap.query.user-by-id=(&(objectClass=inetOrgPerson)(uid={0}))
# 根據用戶全名來查找用戶
flowable.idm.ldap.query.user-by-full-name-like=(&(objectClass=inetOrgPerson)(|({0}=*{1}*)({2}=*{3}*)))
# 查找所有用戶
flowable.idm.ldap.query.all-users=(objectClass=inetOrgPerson)
# 查找用戶所屬的組, 這個沒配置出來, 可以忽略
flowable.idm.ldap.query.groups-for-user=(&(objectClass=posixGroup)(memberUid={0}))
# 列出所有組
flowable.idm.ldap.query.all-groups=(objectClass=posixGroup)
# 根據組id獲取組
flowable.idm.ldap.query.group-by-id=(&(objectClass=posixGroup)(cn={0}))
# 各個屬性取哪個字段
flowable.idm.ldap.attribute.user-id=uid
flowable.idm.ldap.attribute.first-name=cn
flowable.idm.ldap.attribute.last-name=sn
flowable.idm.ldap.attribute.email=mail
flowable.idm.ldap.attribute.group-id=cn
flowable.idm.ldap.attribute.group-name=cn
flowable.idm.ldap.attribute.group-type=cn
flowable.idm.ldap.cache.group-size=10000
flowable.idm.ldap.cache.group-expiration=180000
參考
https://jeesite.gitee.io/front/flowable/6.5.0/bpmn/index.html