Activiti5 開發介紹1

Activiti5是一款基於java的輕量級工作流引擎。支持BPMN2.0,其依賴的jar非常少,只依賴mybatis。上手迅速,功能豐富,對於一般的工作流應用都可以滿足,廢話少說,進入正題。

 

一、搭建開發環境

1、安裝jdk5+

2、安裝eclipse

3、安裝eclipse BPMN designer plugin,地址:http://activiti.org/designer/update/

4、下載Activiti5,地址:http://activiti.org/download.html

5、建立項目,添加jar包:

activation-1.1.jar

activiti-engine-5.9.jar

activiti-spring-5.9-sources.jar

activiti-spring-5.9.jar

aopalliance-1.0.jar

commons-dbcp-1.4.jar

commons-email-1.2.jar

commons-lang-2.4.jar

commons-logging-1.1.1.jar

commons-pool-1.3.jar

livetribe-jsr223-2.0.6.jar

mail-1.4.1.jar

mybatis-3.0.6.jar

spring-aop-3.0.3.RELEASE.jar

spring-asm-3.0.3.RELEASE.jar

spring-beans-3.0.3.RELEASE.jar

spring-context-3.0.3.RELEASE.jar

spring-core-3.0.3.RELEASE.jar

spring-expression-3.0.3.RELEASE.jar

spring-jdbc-3.0.3.RELEASE.jar

spring-orm-3.0.3.RELEASE.jar

spring-test-3.0.3.RELEASE.jar

spring-tx-3.0.3.RELEASE.jar

 6、安裝數據庫,可以選擇以下一種,

Activiti database type Versions tested Example JDBC URL Notes
h2 1.2.132 jdbc:h2:tcp://localhost/activiti Default configured database
mysql 5.1.11 jdbc:mysql://localhost:3306/activiti?autoReconnect=true Tested using mysql-connetor-java database driver
oracle 10.2.0 jdbc:oracle:thin:@localhost:1521:xe  
postgres 8.4 jdbc:postgresql://localhost:5432/activiti  
db2 DB2 9.7 using db2jcc4 jdbc:db2://localhost:50000/activiti [EXPERIMENTAL]
mssql 2008 using JDBC jtds-1.2.4 jdbc:jtds:sqlserver://localhost:1433/activiti [EXPERIMENTAL]

7、加入相應的數據庫驅動jar包,以及數據源支持。


OK,到這裏,開發環境已經搭建完成,下面進入開發階段。


二、開發概述使用Activiti5和Spring集成。

1、編寫配置文件,activiti-conf.xml
<beans xmlns="http://www.springframework.org/schema/beans" 
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                           http://www.springframework.org/schema/tx      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

  <bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
    <property name="driverClass" value="org.h2.Driver" />
    <property name="url" value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />
    <property name="username" value="sa" />
    <property name="password" value="123456" />
  </bean>

  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
  </bean>
  
  <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
    <property name="dataSource" ref="dataSource" />
    <property name="transactionManager" ref="transactionManager" />
    <property name="databaseSchemaUpdate" value="true" />  <!-- 是否更新數據庫結構,如果表不存在,啓動時會自動創建 -->
    <property name="jobExecutorActivate" value="false" />  
  </bean>
  
  <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
    <property name="processEngineConfiguration" ref="processEngineConfiguration" />
  </bean>


2、使用BPMN設計器,編寫"demo.bpmn20.xml"流程定義文件

3、運行代碼:


	public static void main(String args[]) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("activiti-conf.xml");    //初始化spring上下文
		ProcessEngine processEngine = (ProcessEngine) ctx.getBean("processEngine"); 		//獲得Activiti主接口
		System.out.println("processEngine name :" + processEngine.getName());
		RepositoryService repositoryService = processEngine.getRepositoryService(); 		//獲得資源操作接口
		RuntimeService runtimeService = (RuntimeService) processEngine.getRuntimeService();	//獲得運行時操作接口(大多操作流程實例)
		TaskService taskService = processEngine.getTaskService();							//獲得任務操作接口
		IdentityService identityService = processEngine.getIdentityService();				//獲得身份操作接口(用戶和用戶組)
		HistoryService historyService = processEngine.getHistoryService();			//獲得歷史查詢接口
		FormService formService = processEngine.getFormService();					//獲得表單數據綁定接口
		ManagementService managementService = processEngine.getManagementService();	//獲得管理接口
		
		Deployment deployment = repositoryService.createDeployment().addClasspathResource("demo.bpmn20.xml").deploy();//部署流程定義
		System.out.print("發佈流程定義成功!" + "  Id=" + deployment.getId() + ", Name=" + deployment.getName());
	}

如果執行成功,說明Activiti已經於spring成功集成。

同時,數據庫中會產生相應的表。


4、表說明

RE:RepositoryService接口所操作的表
ACT_RE_DEPLOYMENT
部署流程定義時需要被持久化保存下來的信息
ACT_RE_PROCDEF  流程定義數據表

ID:IdentityService接口所操作的表
ACT_ID_INFO 用戶擴展信息表
ACT_ID_MEMBERSHIP 用戶與分組對應信息表
ACT_ID_GROUP 用戶組信息 
ACT_ID_USER 用戶信息

RU:運行時表 - RuntimeService
ACT_RU_VARIABLE 運行時流程變量表 
ACT_RU_TASK 任務節點表 
ACT_RU_JOB 定時任務表 
ACT_RU_IDENTITYLINK 任務參與者表。主要存儲任務節點與參與者的相關信息
ACT_RU_EXECUTION 流程執行路徑信息

HI:歷史數據表,HistoryService
ACT_HI_PROCINST 歷史流程實例表
ACT_HI_ATTACHMENT 歷史附件表 
ACT_HI_COMMENT 歷史註釋表 
ACT_HI_DETAIL 歷史詳情表 
ACT_HI_TASKINST 歷史任務實例表
ACT_HI_ACTINST 歷史執行路徑信息 

GE:全局數據
ACT_GE_BYTEARRAY 二進制數據表:流程定義圖片和xml、Serializable的變量
ACT_GE_PROPERTY 屬性數據表。存儲整個流程引擎級別的數據


注:由於Activiti會在任務或者流程結束時,刪除其所在的運行時數據,存入歷史數據表。所以保證了運行時表小且快。不會有性能問題。


5、涉及到的名詞,對應類,解釋

流程定義:ProcessDefinition類,也就是我們用設計器生成的xml文件,Activiti將根據流程定義產生流程實例。

流程實例:ProcessInstance類,是一個完整的流程表示。

流程執行路徑:Execution類, 表示流程的執行實例。

任務節點:Task類,有很多這裏不一一介紹

參與者:User,參與人


注:如果同一個流程定義被髮布多次,那麼Activiti將默認採用最新版本。


注: Activiti中關於 流程實例 和 流程執行實例 的區別

ProcessInstance是流程實例,Execution是流程的一個執行實例。一個流程在併發分支的情況下,會產生多個執行實例,一個Execution也可以分出多個Execution

又有:ProcessInstance extends Execution,說明ProcessInstance也是一個Execution,

Execution的 Parent Execution可能是一個ProcessInstance,所以,在流程沒有併發分支的情況下ProcessInstance與Execution是相同的。

三、接口介紹

RepositoryService :流程定義發佈、查詢、管理相關操作的接口

//查詢所有已發佈信息
List<Deployment> ds = repositoryService.createDeploymentQuery().list();

// 查詢所有最新版本的流程定義
List<ProcessDefinition> pds = repositoryService.createProcessDefinitionQuery().latestVersion().list();  

//發佈流程定義
DeploymentBuilder builder = repositoryService.createDeployment();
builder = builder.addClasspathResource(definitionResource);
Deployment deployment = builder.deploy();

未完,待續-----

 

發佈了17 篇原創文章 · 獲贊 3 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章