Activiti5.10簡易教程一java
一搭建環境mysql
1.1 JDK 6+sql
activiti 運行在版本 6 以上的 JDK 上。轉到 Oracle Java SE 下載頁面,點擊按鈕「下載 JDK 」。網頁中也有安裝說明。要覈實安裝是否成功,在命令行上運行 java – version 。將打印出安裝的 JDK 的版本。數據庫
1.2 Ant 1.8.1+apache
從 Ant[http://ant.apache.org/bindownload.cgi] 下載頁面下載最新穩定版的 Ant 。解壓文件,確保其 bin 文件夾在操做系統的 path 下。在命令行上運行 ant – versioneclipse
來檢查 Ant 是否安裝成功。成功將打印安裝的 Ant 版本。maven
1.3 Eclipse 3.7+編輯器
從 Eclipse 的下載頁面下載 Eclipse Classic( 或 Eclipse JEE) 版的 eclipse 。解壓下載的文件,而後就能夠運行 eclipse 路徑下的 eclipse 文件了。測試
下載地址: http://www.eclipse.org/downloads/packages/release/indigo/sr2 ui
1.4 Activiti -eclipse designer 插件安裝
在安裝 Activiti -eclipse designer 插件前先安裝 maven 插件, m2e(eclipse) 插件在 Install New SoftWare 安裝時會出現些問題,按如下步驟安裝便可。
1.4.1 先安裝 GEF 插件
maven 插件安裝的時候會依賴這個插件,在 Eclipse -> help -> Install New SoftWare 中安裝, update site: http://download.eclipse.org/tools/gef/updates/interim/
1.4.2 安裝 SVN 插件
在 Eclipse -> help -> Install New SoftWare 中安裝, update site: http://subclipse.tigris.org/update_1.6.x
1.4.3 安裝 Maven 插件
方式一 :在線安裝
在 Eclipse -> help -> Install New SoftWare 中安裝, update site: http://nexus.tesla.io:8081/nexus/content/sites/m2e.extras/m2e/1.5.0/N/LATEST/
順便 eclipse m2e 支持 site : http://www.eclipse.org/m2e/download/
如在線安裝不成功,報 [the selected did not contain any resources that can run on server maven project] 錯誤,建議採用方式二安裝。
方式二 :本地安裝
下載 maven 和 eclipse-maven3-plugin 插件( eclipse-maven3-plugin 爲本人 CSDN 上傳)
Maven site: http://ant.apache.org/bindownload.cgi
eclipse-maven3-plugin site: http://download.csdn.net/detail/yangyi22/5663245
在 eclipse 目錄下創建 myplugins 目錄,將 eclipse-maven3-plugin 解壓後文件複製進去,創建 links 目錄,新建 maven.link 文件(名字隨意取)添加文本:
path=…/eclipse/myplugins/maven ,即讓 eclipse 啓動時去尋找 myplugins 中的插件,如本人安裝的路徑: path=D:/Java~coding~site /eclipse[indigo-jee]/eclipse/myplugins/maven
1.4.4 最後安裝 Activiti -eclipse designer
打開 Help à Install New Software 。在以下面板中,點擊 Add 按鈕,而後填入下列字段:l Name : Activiti BPMN 2.0 designer
l Location : http://activiti.org/designer/update/
安裝成功後,新建 activiti 項目,視圖以下:
安裝 m2eclipse 插件後,重啓 Eclipse ,如提示 :
Eclipse is running in a JRE, but a JDK is required
Some Maven plugins may not work when importing projects or updating source folders.
須要修改 eclipse.ini 文件,新增一項配置
-vm 配置項必須在– vmargs 配置項前,是由於執行到 -vmargs 配置項已經選擇了一個默認的 JVM 了。
因此在– vmargs 前面加上這一句 :
-vm
C:/Program Files/Java/jdk1.6.0_20/bin/javaw.exe
二開始 activiti 5.10 的第一個 demo
2.1 創建 activiti-demo 工程,選擇 Activiti Project
建立成功後的項目:
給 activiti-demo 項目添加 activiti 依賴包,項目右鍵 Build Path->Configure Build Path->libraries -> Add External Jars 選中 …\activiti-5.10\setup\files\dependencies\libs 下全部包添加便可。
2.2 將 activiti-demo 工程的數據庫整合爲 MySQL
將 …\activiti-5.10\setup\build\activiti-cfg 目錄下的 activiti.cfg.xml 配置文件複製到項目 src\main\resources 目錄下,修改數據庫配置以下:
<!-- Database configurations -->
< property name = "jdbcUrl"
value = "jdbc:mysql://localhost:3306/test?autoReconnect=true" />
< property name = "jdbcDriver"
value = "com.mysql.jdbc.Driver" />
< property name = "jdbcUsername" value = "root" />
< property name = "jdbcPassword" value = "root" />
<!-- Database configurations -->
< property name = "databaseSchemaUpdate" value = "true" />
<!-- job executor configurations -->
< property name = "jobExecutorActivate" value = "false" />
2.3 設計 activiti-demo 工程的流程
在該項目的 src/main/resource/diagrams 下右鍵建立 Activiti diagram ,文件名爲: DemoProcess.bpmn 。
-->
此時進入 Activiti Diagram Editor ,在空白處點一下,下邊屬性欄中設置 id 和 name , id 就是這個流程的 key ,後邊啓動流程的時候使用到。
注意: Activiti 5.8 升級到 5.9 之後, xxx.bpmn20.xml 和 xxx.png 已不默認生成,僅僅是生成 xxx.bpmn 文件, xxx.bpmn 中的定義內容就如 xxx.bpmn20.xml 同樣。
另外,快捷菜單:「 Create deployment artifacts 」和「 Import BPMN20 file 」,在 5.9 之後去掉了。
如需設計完成流程後自動生成一個 png 圖片按以下處理
l 保存沒法生存 png 圖片按如下處理
Window –> Preferences -> Activiti ->Save 勾選便可
或者手動操做 : 用 Activiti Designer 打開 xxx.bpmn 文件,而後右鍵 選擇 Export Diagram... ,在彈出的對話框中設置圖片的參數便可,通常使用默認就能夠了。
在設計編輯器中保存 DemoProcess.bpmn 後的項目視圖以下:
測試類代碼 DemoProcessTest.java
package main.java;
import java.io.FileInputStream;
import java.util.List;
import org.activiti.engine.HistoryService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
/**
* Activiti 5.10 demo
* @author BruceQin
*
*/
public class DemoProcessTest {
// diagrams實際路徑
private static String realPath =
"D:\\Java~coding~site\\J2EE-IDE\\Workspace\\workspace[indigo-jee]" +
"\\activiti-demo\\src\\main\\resources\\diagrams";
public static void main(String[] args) throws Exception {
// 建立 Activiti流程引擎
ProcessEngine processEngine = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml")
.buildProcessEngine();
// 取得 Activiti 服務
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
// 部署流程定義
repositoryService
.createDeployment()
.addInputStream("DemoProcess.bpmn",new FileInputStream(realPath + "\\DemoProcess.bpmn"))
.addInputStream("DemoProcess.png", new FileInputStream(realPath + "\\DemoProcess.bpmn")) .deploy(); // 啓動流程實例 ProcessInstance instance = processEngine .getRuntimeService().startProcessInstanceByKey("DemoProcess"); String procId = instance.getId(); System.out.println("procId:"+ procId); // 得到第一個任務 TaskService taskService = processEngine.getTaskService(); List<Task> tasks = taskService.createTaskQuery().taskDefinitionKey("firstTask").list(); for (Task task : tasks) { System.out.println("Following task is: taskID -" +task.getId()+" taskName -"+ task.getName()); // 認領任務 taskService.claim(task.getId(), "testUser"); } // 查看testUser 如今是否可以獲取到該任務 tasks = taskService.createTaskQuery().taskAssignee("testUser").list(); for (Task task : tasks) { System.out.println("Task for testUser: " + task.getName()); // 完成任務 taskService.complete(task.getId()); } System.out.println("Number of tasks for testUser: " + taskService.createTaskQuery().taskAssignee("testUser").count()); // 獲取並認領第二個任務 tasks = taskService.createTaskQuery().taskDefinitionKey("secondTask").list(); for (Task task : tasks) { System.out.println("Following task is : taskID -" +task.getId()+" taskName -"+ task.getName()); taskService.claim(task.getId(), "testUser"); } //完成第二個任務結束結束流程 for (Task task : tasks) { taskService.complete(task.getId()); } // 覈實流程是否結束 HistoryService historyService = processEngine.getHistoryService(); HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult(); System.out.println("Process instance end time: " + historicProcessInstance.getEndTime()); }}