【Activiti學習之一】Activiti入門

環境
  JDK1.7
  MySQL5.6
  Tomcat7
  Eclipse-Luna
  activiti 6.0html

1、概念
一、工做流(Workflow):是一系列相互銜接、自動進行的業務活動或任務。採用工做流軟件,使用者只需在電腦上填寫有關表單,會按照定義好的流程自動往下跑,下一級審批者將會收到相關資料,並能夠根據須要修改、跟蹤、管理、查詢、統計、打印等,大大提升了效率。
二、BPMN即業務流程建模與標註(Business Process Model and Notation,BPMN) ,描述流程的基本符號,包括這些圖元如何組合成一個業務流程圖(Business Process Diagram)。
BPMN是BPM及workflow的建模語言標準之一。java


三、Activiti是一個開源的工做流引擎,它實現了BPMN 2.0規範,能夠發佈設計好的流程定義,並經過api進行流程調度。mysql

2、Activiti 6.0 介紹
一、7大接口
RepositoryService:提供一系列管理流程部署和流程定義的API。
RuntimeService:在流程運行時對流程實例進行管理與控制。
TaskService:對流程任務進行管理,例如任務提醒、任務完成和建立任務等。
IdentityService:提供對流程角色數據進行管理的API,這些角色數據包括用戶組、用戶及它們之間的關係。
ManagementService:提供對流程引擎進行管理和維護的服務。
HistoryService:對流程的歷史數據進行操做,包括查詢、刪除這些歷史數據。
FormService:表單服務。web

二、28張表
(1)act_ge_ 通用數據表,ge是general的縮寫
(2)act_hi_ 歷史數據表,hi是history的縮寫,對應HistoryService接口
(3)act_id_ 身份數據表,id是identity的縮寫,對應IdentityService接口
(4)act_re_ 流程存儲表,re是repository的縮寫,對應RepositoryService接口,存儲流程部署和流程定義等靜態數據
(5)act_ru_ 運行時數據表,ru是runtime的縮寫,對應RuntimeService接口和TaskService接口,存儲流程實例和用戶任務等動態數據spring


2、官網示例
一、activiti-admin.war 用於管理web服務(登陸用戶/密碼:admin / admin,URL:http://localhost:8080/activiti-admin)
sql

二、activiti-app.war 用於測試示例web服務(登陸用戶/密碼:admin / test,URL:http://localhost:8080/activiti-app)
數據庫

三、activiti-rest.war Activiti提供的一組能夠直接操做工做流引擎的REST API接口服務(登陸用戶/密碼:kermit/kermit,URL:http://localhost:8080/activiti-rest/docs/#/)api

 

3、開發環境搭建服務器

一、安裝eclipse安裝activiti插件 app

插件地址:http://download.eclipse.org/modeling/emf/updates/releases/

安裝成功示意圖:

配置 建立流程後要保存流程設計圖

 

二、這裏使用傳統單體應用爲例,可使用maven,後面文章會有介紹。
建立java工程,將從官網下載的activiti-6.0.0.zip中libs目錄下的jar所有拷貝到工程中,並加載進去。

4、編寫第一個Activiti程序:請假流程
一、設計流程文件
使用*.bpmn或者*.bpmn20.xml

二、配置流程引擎
引入下面文件:activiti.cfg.xml,實質就是一個spring配置文件.

讀取默認配置文件:activiti.cfg.xml
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
讀取指定配置文件
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti1.xml");
讀取指定配置文件和配置bean
ProcessEngineConfiguration config = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("my-activiti2.xml", "test");

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!-- 流程引擎配置的bean -->
    <bean id="processEngineConfiguration"
        class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
        <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/act" />
        <property name="jdbcDriver" value="com.mysql.jdbc.Driver" />
        <property name="jdbcUsername" value="root" />
        <property name="jdbcPassword" value="123456" />
        <property name="databaseSchemaUpdate" value="true" />
        <property name="history" value="activity" />
        <property name="mailServerHost" value="smtp.163.com"></property>
        <property name="mailServerPort" value="25"></property>
        <property name="mailServerDefaultFrom" value="yangenxiong@163.com"></property>
        <property name="mailServerUsername" value="yangenxiong@163.com"></property>
        <property name="mailServerPassword" value="123456"></property>
    </bean>
</beans>

(1)定義了一個數據庫鏈接,這裏咱們使用mysql,注意要提早引入mysql jdbc依賴包,mysql裏建立數據庫:act,activiti能夠支持的關係型數據庫:MySQL、Oracle、PostgresSQL、DB二、MSSQL,默認使用內存數據庫H2

(2)databaseSchemaUpdate 有4個值:

false:false爲默認值,設置爲該值後,Activiti在啓動時,會對比數據庫表中保存的版本,若是沒有表或者版本不匹配時,將在啓動時拋出異常。
true:設置爲該值後,Activiti會對數據庫中全部的表進行更新,若是表不存在,則Activiti會自動建立。
create-drop:Activiti啓動時,會執行數據庫表的建立操做,在Activiti關閉時,執行數據庫表的刪除操做。
drop-create:Activiti啓動時,執行數據庫表的刪除操做在Activiti關閉時,會執行數據庫表的建立操做。

(3)Activiti 提供了 history 屬性對其進行配置
none:不保存任何的歷史數據,所以,在流程執行過程當中,這是最高效的。
activity:級別高於 none,保存流程實例與流程行爲,其餘數據不保存。
audit:除 activity 級別會保存的數據外,還會保存所有的流程任務及其屬性。audit爲 history 的默認值。
full:保存歷史數據的最高級別,除了會保存 audit 級別的數據外,還會保存其餘所有流程相關的細節數據,包括一些流程參數等。

(4)Activiti 支持郵件服務,當流程執行到某一個節點時,Activiti會根據流程文件配置(EmailTask),發送郵件到相應的郵箱。
mailServerHost:郵件服務器地址,非必填,默認值爲 localhost。
mailServerPort:SMTP 發送郵件服務器端口,默認值爲 25。
mailServerDefaultFrom: 非必填, 發送人的郵箱地址, 默認值爲 activiti@activiti.org。
mailServerUsername:郵箱登陸用戶名。
mailServerPassword:郵箱登陸密碼。
mailServerUseSSL:是否使用 SSL 協議通訊,默認爲 false。
mailServerUseTLS:是否使用 TLS 協議通訊,默認爲 false。

編寫java:

package com.wjy.act; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; public class FirstAct { public static void main(String[] args) { ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); //關閉引擎
 engine.close(); System.exit(0); } }

執行完成以後,看一下數據庫act裏建立了28張表.

三、請假流程示例
完整代碼:

package com.wjy.act; import org.activiti.engine.ProcessEngine; import org.activiti.engine.ProcessEngines; import org.activiti.engine.RepositoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.task.Task; public class FirstAct { public static void main(String[] args) { ProcessEngine engine = ProcessEngines.getDefaultProcessEngine(); // 存儲服務
        RepositoryService rs = engine.getRepositoryService(); // 運行時服務
        RuntimeService runService = engine.getRuntimeService(); // 任務服務
        TaskService taskService = engine.getTaskService(); //加載流程文件 一次能夠部署多個流程
        rs.createDeployment().addClasspathResource("vacation.bpmn").deploy(); //啓動流程 流程實例
        ProcessInstance pi = runService.startProcessInstanceByKey("myProcess"); // 普通員工完成請假的任務
        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("當前流程節點:" + task.getName()); taskService.complete(task.getId()); // 經理審覈任務
        task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("當前流程節點:" + task.getName()); taskService.complete(task.getId()); task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult(); System.out.println("流程結束後:" + task); //關閉引擎
 engine.close(); System.exit(0); } }

執行日誌:

03:26:47,741 [main] INFO  org.activiti.engine.ProcessEngines  - Initializing process engine using configuration 'file:/E:/workspace/sparkws/first-act/bin/activiti.cfg.xml'
03:26:47,743 [main] INFO  org.activiti.engine.ProcessEngines  - initializing process engine for resource file:/E:/workspace/sparkws/first-act/bin/activiti.cfg.xml 03:26:48,223 [main] INFO  org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl  - Found 1 auto-discoverable Process Engine Configurators 03:26:48,224 [main] INFO  org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl  - Found 1 Process Engine Configurators in total: 03:26:48,224 [main] INFO  org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl  - class org.activiti.management.jmx.JMXConfigurator (priority:10000) 03:26:48,224 [main] INFO  org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl  - Executing beforeInit() of class org.activiti.management.jmx.JMXConfigurator (priority:10000) 03:26:49,773 [main] INFO  org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl  - Found compatibility handler instance : class org.activiti.compatibility.DefaultActiviti5CompatibilityHandler 03:26:49,773 [main] INFO  org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl  - Executing configure() of class org.activiti.management.jmx.JMXConfigurator (priority:10000) 03:26:49,959 [main] INFO  org.activiti.engine.impl.db.DbSqlSession  - performing create on engine with resource org/activiti/db/create/activiti.mysql.create.engine.sql 03:26:49,960 [main] INFO  org.activiti.engine.impl.db.DbSqlSession  - Found MySQL: majorVersion=5 minorVersion=6
03:26:49,979 [jmxConnectorStarterThread] INFO  org.activiti.management.jmx.DefaultManagementAgent  - JMX Connector thread started and listening at: service:jmx:rmi:///jndi/rmi://PC-20190528ODKR:1099/jmxrmi/activiti
03:27:14,557 [main] INFO  org.activiti.engine.impl.db.DbSqlSession  - performing create on history with resource org/activiti/db/create/activiti.mysql.create.history.sql 03:27:14,558 [main] INFO  org.activiti.engine.impl.db.DbSqlSession  - Found MySQL: majorVersion=5 minorVersion=6
03:27:18,765 [main] INFO  org.activiti.engine.impl.db.DbSqlSession  - performing create on identity with resource org/activiti/db/create/activiti.mysql.create.identity.sql 03:27:18,765 [main] INFO  org.activiti.engine.impl.db.DbSqlSession  - Found MySQL: majorVersion=5 minorVersion=6
03:27:20,539 [main] INFO  org.activiti.engine.impl.ProcessEngineImpl  - ProcessEngine default created 03:27:20,603 [main] INFO  org.activiti.engine.ProcessEngines  - initialised process engine default 當前流程節點:write vacation 當前流程節點:Audit 流程結束後:null

表act_ge_bytearray會存儲部署的流程:


參考:
基於BPMN2.0的工做流(Workflow
BPMN2.0規範 
Activiti6簡明教程
Activiti官方用戶手冊 
相關軟件下載

相關文章
相關標籤/搜索