工作流Activiti的学习总结(二)activiti中ProcessEngine的创建和数据库表命名规则

时间:2024.4.20

工作流Activiti的学习总结(二)activiti中ProcessEngine的创建和数据库表命名规则

数据库表命名规则:

Activiti工作流引擎的数据库表中的表名称都是以 ACT_.第二部分两个字母表示表的类型。使用模糊匹配的方式说明表的类型匹配activiti的服务API. · ACT_RE_*: RE代表仓储(Repository).这种表前缀以“static”表示流程定义信息或者流程资源信息(如流程的图表和规则等).

· ACT_RU_*: RU标识为运行(Runtime)时表。包含流程实例,用户任务和变量任务等在运行时的数据信息。这些表只存储Activiti在流程实例运行执行的数据,在流程结束的时候从表中去除数据。从而保持运行时候数据的表的快速和小数据量.

· ACT_ID_*:ID标识为唯一(Identity)的。包含一些唯一的信息如用户,用户做等信息。

· ACT_HI_*:HI表示历史数据(History)表,包括过期的流程实例,过期的变量和过期的任务等。

· ACT_GE_*:GE表示公用(General data)的数据库表类型。

ProcessEngine接口中暴露了在BPMN和工作流中中所有操作的服务接口。 用户获取流程实例相关的各种运行时信息.

暴露服务用于操作人工操作的任务例如代办( claiming, completing and assigning tasks).

这个服务用于管理用户和用户组已经用户和用户组关系等的。

暴露引擎飞管理和主要操作。

:服务暴露过期流程实例等信息。

在工作流activiti流程引擎中可以通过activiti.cfg.xml配置。

ProcessEngineConfiguration配置一个流程引擎,在用户应用中创建一个流程引擎的可以通过多种方式:

1.基于默认的配置文件创建一个流程引擎:

ProcessEngine processEngine = ProcessEngineConfiguration

.createProcessEngineConfigurationFromResourceDefault() .buildProcessEngine();

2.在缺少配置文件创建一个流程引擎

ProcessEngine processEngine = ProcessEngineConfiguration

.createStandaloneProcessEngineConfiguration()

.buildProcessEngine();

3.获取一个默认的流程引擎

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine()

在工作流activiti的classpath路径中activiti.cfg.xml文件位于

activiti-5.6\setup\files\cfg.activiti\standalone中。

Spring的配置内容如下:

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/20xx/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="processEngineConfiguration"

class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">

<property name="jdbcUrl"

value="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000" />

<property name="jdbcDriver" value="org.h2.Driver" />

<property name="jdbcUsername" value="sa" />

<property name="jdbcPassword" value="" />

<property name="databaseSchemaUpdate" value="true" />

<property name="jobExecutorActivate" value="false" />

<property name="mailServerHost" value="mail.my-corp.com" /> <property name="mailServerPort" value="5025" />

</bean>

</beans>

备注:上面activiti.cfg.xml配置必须spring,但是activiti工作流对spring并不是必须的。

通过编程方式ProcessEngineConfiguration

1.使用配置文件 ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault(); ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource); ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName); ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream); ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);

2.无配置 文件创建方式

ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration

();

ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();

ProcessEngine processEngine =

ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration()

.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE)

.setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000")

.setJobExecutorActivate(true)

.buildProcessEngine();

org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration: 在独立方式运行的流程引擎使用。

Activiti需要使用事务对象。默认的情况下,在引擎启动的时候检查数据库将检查activiti的是否有schema和schema的版本是否正确.

org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration:

this is a convience class for unit testing purposes. Activiti will take care of the transactions. An H2 in-memory database is used by default. The database will be created and dropped when the engine boots and shuts down. When using this, probably no additional configuration is needed (except when using for example the job executor or mail capabilities). ( 测试环境中使用)

org.activiti.spring.SpringProcessEngineConfiguration:

To be used when the process engine is used in a Spring environment. See the Spring integration section for more information. (Spring环境中使用)

org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration:

([EXPERIMENTAL]) to be used when the engine runs in standalone mode, with JTA transactions.(JPA环境中使用)


第二篇:工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解


工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解

Spring和Activiti的整合:

在Spring和Activiti的整合中ProcessEngineFactoryBean成为了两者的整合点。ProcessEngineFactoryBean为org.activiti.spring.ProcessEngineFactoryBean。提供了ProcessEngine的配置和创建的功能。

<bean

id="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">

...

</bean>

<bean id="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean"> <property

name="processEngineConfiguration"ref="processEngineConfiguration"/> </bean>

如果在包含事物的activiti配置如下:

<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/20xx/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">

<!-- 采用spring的数据源类创建一个数据源 -->

<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=""/>

</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"/>

<!-- 设置数据库schema的更新方式 -->

<property name="databaseSchemaUpdate"value="true"/>

<!-- 是否启动jobExecutor -->

<property name="jobExecutorActivate"value="false"/>

</bean>

<!-- 创建一个流程引擎bean -->

<bean id="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean"> <property

name="processEngineConfiguration"ref="processEngineConfiguration"/> </bean>

<!-- 创建activiti提供的各种服务 -->

<!-- 工作流仓储服务 -->

<bean

id="repositoryService"factory-bean="processEngine"factory-method="getRepositoryService"/>

<!-- 工作流运行服务 -->

id="runtimeService"factory-bean="processEngine"factory-method="getRuntimeService"/>

<!-- 工作流任务服务-->

<bean

id="taskService"factory-bean="processEngine"factory-method="getTaskService"/>

<!-- 工作流历史数据服务-->

<bean

id="historyService"factory-bean="processEngine"factory-method="getHistoryService"/>

<!-- 工作流管理服务-->

<bean

id="managementService"factory-bean="processEngine"factory-method="getManagementService"/>

<!-- 工作流唯一服务 -->

<bean

id="IdentityService"factory-bean="processEngine"factory-method="getIdentityService"/>

...

工作流中Expressions的使用

在使用spring的SpringProcessEngineConfiguration时,如果没有beans属性表示所有bean都可以暴露给activiti的流程文件xml访问。如果配置beans但是没有配置map中bean信息,则没有暴露的bean。如果map中配置部分bean表示只是暴露部分bean给activiti使用。

<bean

id="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">

...

<property name="beans">

<map>

<entry key="printer"value-ref="printer"/>

</property>

</bean>

<bean id="printer"class="org.activiti.examples.spring.Printer"/>

暴露的bean可以在activiti的流程xml中使用。如下调用bean的方法

<bean id="printer" class="org.activiti.examples.spring.Printer" />

<definitions id="definitions"...>

<process id="helloProcess">

<startEvent id="start"/>

<sequenceFlow id="flow1"sourceRef="start"targetRef="print"/>

<serviceTask id="print"activiti:expression="#{printer.printMessage()}"/> <sequenceFlow id="flow2"sourceRef="print"targetRef="end"/>

<endEvent id="end"/>

</process>

</definitions>

public class Printer {

public void printMessage() {

System.out.println("hello world");

}

}

自动资源部署(Automatic resource deploy)

<bean

id="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration">

...

<property

name="deploymentResources"value="classpath*:/org/activiti/spring/test/autodeployment/autodeploy.*.bpmn20.xml"/>

</bean>

<bean id="processEngine"class="org.activiti.spring.ProcessEngineFactoryBean"> <property

name="processEngineConfiguration"ref="processEngineConfiguration"/>

</bean>

Spring和activit的整合测试

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration("classpath:org/activiti/spring/test/junit4/springTypicalUsageTest-context.xml")

public class MyBusinessProcessTest {

@Autowired

private RuntimeService runtimeService;

@Autowired

private TaskService taskService;

@Autowired

@Rule

public ActivitiRule activitiSpringRule;

@Test

@Deployment

public void simpleProcessTest() {

runtimeService.startProcessInstanceByKey("simpleProcess");

Task task = taskService.createTaskQuery().singleResult();

assertEquals("My Task", task.getName());

taskService.complete(task.getId());

assertEquals(0, runtimeService.createProcessInstanceQuery().count()); }

}

当在spring的配置中配置ActivitiRule时候,测试bean将自动被注入: <bean id="activitiRule"class="org.activiti.engine.test.ActivitiRule">

<property name="processEngine"ref="processEngine"/>

< /bean>


第三篇:工作流Activiti的学习总结(十二) activiti官方十分钟快速学习


根据activiti官方提供的 编写

1.财务部门填写月财务报告

2.股东审核月财务审计报告

流程图:

流程配置:

<;?xml version=";1.0"; encoding=";UTF-8";?>;

<;definitions xmlns=";/spec/BPMN/20100524/MODEL"; xmlns:xsi=";/2001/XMLSchema-instance";

xmlns:activiti=";http://activiti.org/bpmn";

xmlns:bpmndi=";/spec/BPMN/20100524/DI";

xmlns:omgdc=";/spec/DD/20100524/DC";

xmlns:omgdi=";/spec/DD/20100524/DI";

typeLanguage=";/2001/XMLSchema";

expressionLanguage=";/1999/XPath";

targetNamespace=";http://activiti.org/bpmn20";>;

<;process id=";financialReport"; name=";Monthly financial report reminder process";>;

<;startEvent id=";startevent1"; name=";月财务报告审核开始";>;<;/startEvent>; <;!-- 采用用户组为accountancy编写财务报告 -->;

<;userTask id=";usertask1"; name=";财务编写月财务报告"; activiti:candidateGroups=";accountancy";>;<;/userTask>;

<;userTask id=";usertask2"; name=";股东审核月财务审计报告"; activiti:candidateGroups=";management";>;<;/userTask>;

<;endEvent id=";endevent1"; name=";月财务报告审核结束";>;<;/endEvent>;

<;sequenceFlow id=";flow1"; name=";"; sourceRef=";startevent1"; targetRef=";usertask1";>;<;/sequenceFlow>;

<;sequenceFlow id=";flow2"; name=";"; sourceRef=";usertask1"; targetRef=";usertask2";>;<;/sequenceFlow>;

<;sequenceFlow id=";flow3"; name=";"; sourceRef=";usertask2"; targetRef=";endevent1";>;<;/sequenceFlow>;

<;/process>;

<;bpmndi:BPMNDiagram id=";BPMNDiagram_financialReport";>;

<;bpmndi:BPMNPlane bpmnElement=";financialReport"; id=";BPMNPlane_financialReport";>;

<;bpmndi:BPMNShape bpmnElement=";startevent1"; id=";BPMNShape_startevent1";>;

<;omgdc:Bounds height=";35"; width=";35"; x=";30"; y=";200";>;<;/omgdc:Bounds>;

<;/bpmndi:BPMNShape>;

<;bpmndi:BPMNShape bpmnElement=";usertask1"; id=";BPMNShape_usertask1";>;

<;omgdc:Bounds height=";55"; width=";105"; x=";125"; y=";190";>;<;/omgdc:Bounds>;

<;/bpmndi:BPMNShape>;

<;bpmndi:BPMNShape bpmnElement=";usertask2"; id=";BPMNShape_usertask2";>; <;omgdc:Bounds height=";55"; width=";105"; x=";290"; y=";190";>;<;/omgdc:Bounds>;

<;/bpmndi:BPMNShape>;

<;bpmndi:BPMNShape bpmnElement=";endevent1"; id=";BPMNShape_endevent1";>; <;omgdc:Bounds height=";35"; width=";35"; x=";455"; y=";200";>;<;/omgdc:Bounds>;

<;/bpmndi:BPMNShape>;

<;bpmndi:BPMNEdge bpmnElement=";flow1"; id=";BPMNEdge_flow1";>;

<;omgdi:waypoint x=";65"; y=";217";>;<;/omgdi:waypoint>;

<;omgdi:waypoint x=";125"; y=";217";>;<;/omgdi:waypoint>;

<;/bpmndi:BPMNEdge>;

<;bpmndi:BPMNEdge bpmnElement=";flow2"; id=";BPMNEdge_flow2";>;

<;omgdi:waypoint x=";230"; y=";217";>;<;/omgdi:waypoint>;

<;omgdi:waypoint x=";290"; y=";217";>;<;/omgdi:waypoint>;

<;/bpmndi:BPMNEdge>;

<;bpmndi:BPMNEdge bpmnElement=";flow3"; id=";BPMNEdge_flow3";>;

<;omgdi:waypoint x=";395"; y=";217";>;<;/omgdi:waypoint>;

<;omgdi:waypoint x=";455"; y=";217";>;<;/omgdi:waypoint>;

<;/bpmndi:BPMNEdge>;

<;/bpmndi:BPMNPlane>;

<;/bpmndi:BPMNDiagram>;

<;/definitions>;

编码如下:

package com.easyway.spring.activiti;

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.task.Task;

/**

* 根据activiti官方提供的 编写

* 1.财务部门填写月财务报告

* 2.股东审核月财务审计报告

*

*

* activiti提供的财务报告审核

* <;!-- 采用用户组为accountancy编写财务报告 -->;

* <;userTask id=";usertask1"; name=";财务编写月财务报告"; activiti:candidateGroups=";accountancy";>;<;/userTask>;

* <;!-- 采用用户组为management编写财务报告 -->;

* <;userTask id=";usertask2"; name=";股东审核月财务审计报告"; activiti:candidateGroups=";management";>;<;/userTask>;

*

* 备注:

* 默认的两个用户:

* <;pre>;

* 用户名 密码 用户组

Table 2.1. The demo users

UserId Password Security roles

kermit kermit admin

gonzo gonzo manager

fozzie fozzie user

* <;/pre>;

*

* @author longgangbai

*

* 2011-12-18 下午04:08:46

*/

public class CustomFinancialReportActiviti {

public static void main(String[] args) {

// Create Activiti process engine

//创建一个流程引擎对象

// ProcessEngine processEngine = ProcessEngineConfiguration

// .createStandaloneProcessEngineConfiguration()

// .buildProcessEngine();

//创建一个流程引擎对象(为了便于多册测试,修改 name=";databaseSchemaUpdate"; value=";create-drop"; 默认为ture)

ProcessEngine

processEngine=ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(";activiti.cfg.xml";).buildProcessEngine();

// Get Activiti services

//获取流程相关的服务

RepositoryService repositoryService =

processEngine.getRepositoryService();

RuntimeService runtimeService = processEngine.getRuntimeService();

// Deploy the process definition

//部署相关的流程配置

repositoryService.createDeployment()

.addClasspathResource(";diagrams/financialReport.bpmn20.xml";) .deploy();

// Start a process instance

//获取流程实例

String procId = runtimeService.startProcessInstanceByKey(";financialReport";).getId();

// Get the first task

TaskService taskService = processEngine.getTaskService(); //获取accountancy组可能要操作的任务

List<;Task>; tasks = taskService.createTaskQuery().taskCandidateGroup(";accountancy";).list(); for (Task task : tasks) {

System.out.println(";Following task is available for accountancy group: "; + task.getName());

//设置fozzie代办 claim it

taskService.claim(task.getId(), ";fozzie";);

}

// Verify Fozzie can now retrieve the task

//审核fozzie当前的获取的任务数量

tasks = taskService.createTaskQuery().taskAssignee(";fozzie";).list();

for (Task task : tasks) {

System.out.println(";Task for fozzie: "; + task.getName());

// Complete the task

//设置forzze完毕

taskService.complete(task.getId());

}

System.out.println(";Number of tasks for fozzie: ";

+

taskService.createTaskQuery().taskAssignee(";fozzie";).count());

// Retrieve and claim the second task

//管理者审核报告并让kermit代办

tasks = taskService.createTaskQuery().taskCandidateGroup(";management";).list(); for (Task task : tasks) {

System.out.println(";Following task is available for accountancy group: "; + task.getName());

taskService.claim(task.getId(), ";kermit";);

}

// Completing the second task ends the process

//完成报告

for (Task task : tasks) {

taskService.complete(task.getId());

}

// verify that the process is actually finished

//查询流程实例完成事件

HistoryService historyService = processEngine.getHistoryService(); HistoricProcessInstance historicProcessInstance =

historyService.createHistoricProcessInstanceQuery().processInstanceId(procId).singleResult();

System.out.println(";Process instance end time: "; + historicProcessInstance.getEndTime());

}

}

运行结果如下:

信息: ProcessEngine default created

2011-12-18 17:06:00 org.activiti.engine.impl.jobexecutor.JobAcquisitionThread run 信息: JobAcquisitionThread starting to acquire jobs

2011-12-18 17:06:00 org.activiti.engine.impl.bpmn.deployer.BpmnDeployer deploy 信息: Processing resource diagrams/financialReport.bpmn20.xml

2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes

信息: XMLSchema currently not supported as typeLanguage

2011-12-18 17:06:01 org.activiti.engine.impl.bpmn.parser.BpmnParse parseDefinitionsAttributes

信息: XPath currently not supported as expressionLanguage

Following task is available for accountancy group: 财务编写月财务报告 Task for fozzie: 财务编写月财务报告

Number of tasks for fozzie: 0

Following task is available for accountancy group: 股东审核月财务审计报告 Process instance end time: Sun Dec 18 17:06:01 CST 2011

更多相关推荐:
工作流Activiti的学习总结(十二) activiti官方十分钟快速学习

根据activiti官方提供的编写1财务部门填写月财务报告2股东审核月财务审计报告流程图流程配置ltxmlversionquot10quotencodingquotUTF8quotgtltdefinitions...

工作流Activiti的学习总结(三) activit数据库限制和数据库相关的配置

工作流Activiti的学习总结三activit数据库限制和数据库相关的配置数据库相关的配置在activiti中的持久化框架采用Ibatis3实现有两种方式定义activiti的数据库1通过jdbcproper...

工作流Activiti的学习总结(五) activiti的API和虚拟工作流测试

工作流Activiti的学习总结五activiti的API和虚拟工作流测试activiti的API在activiti引擎中你可以通过多种方式获取ProcessEngine对象从ProcessEngine中获取各...

工作流Activiti的学习总结(八)Activiti自动执行的应用

工作流activiti自动执行任务的开发应用工作流模拟某公司请假流程情景如下1开发人员请假流程如果开发人员请假如果请假天数小于3天组长批准人事批准即可请假2如果请假大约三天需要项目经理或者产品经理批准并且项目总...

工作流Activiti的学习总结(六)Antiviti的安装详细过程

工作流Activiti的学习总结六Antiviti的安装详细过程activiti56的安装项目中采用最新的Activiti版本为56GA的activitiREST方式访问相关的RESTWebService服务a...

工作流Activiti的学习总结(十一)Activiti5.6和Spring3.03整合

工作流模拟程序员面试过程情景如下1开发知识面试或者笔试2人事面试流程图流程配置Xml代码1ltxmlversionquot10quotencodingquotUTF8quotgt2ltdefinitionsxm...

activiti学习笔记:Activiti工作流教程 Activiti5 流程实例

activiti学习笔记Activiti工作流教程Activiti5流程实例觉得activiti设计得简单而强大尝试翻译一下他的10分钟入门指南10分钟入门指南通过一个非常简单的业务流程介绍一些基本的Activ...

工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解

工作流Activiti的学习总结(四)Spring和Activiti的整合配置讲解Spring和Activiti的整合:在Spring和Activiti的整合中ProcessEngineFactoryBean成…

开源工作流activiti使用手册

开源工作流ACTIVITI使用手册阿凡提集团信息部第1页共8页目录开源工作流ACTIVITI1使用手册1第一章ACTIVITI5安装步骤211ACTIVITI安装先决条件312ACTIVITI安装步骤3121解...

Activiti工作流引擎数据库表结构

Activiti工作流引擎数据库表结构数据库表的命名Acitiviti数据库中表的命名都是以ACT开头的第二部分是一个两个字符用例表的标识此用例大体与服务API是匹配的1ACTRERE表示repository带...

JavaScript对象学习总结

面向对象术语对象ECMA-262把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。严格来说,这意味着对象是无特定顺序的值的数组。尽管ECMAScript如此定义对象,但它更通用…

HTML5+JavaScript节课总结

河南理工大学HTML5JavaScript网页设计与网页特效制作作品设计说明文档20xx20xx学年第2学期课程名称作品题目学生姓名学号专业班级电信1303班联系电话指导教师20xx年7月5日目录1作品整体构思...

工作流activiti的学习总结(15篇)