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

时间:2024.3.23

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

activiti的API
在activiti引擎中,你可以通过多种方式获取ProcessEngine对象,从ProcessEngine中获取各种服务对象,从而访问工作流/BPM方法。ProcessEngine和她的各种服务均为线程安全性服务。在整个项目中每一种服务仅需要保持一个引用。

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

RuntimeService runtimeService = processEngine.getRuntimeService();

RepositoryService repositoryService = processEngine.getRepositoryService();

TaskService taskService = processEngine.getTaskService();

ManagementService managementService = processEngine.getManagementService();

IdentityService identityService = processEngine.getIdentityService();

HistoryService historyService = processEngine.getHistoryService();

FormService formService = processEngine.getFormService();


针对ProcessEngine的说明:
ProcessEngine.getDefaultProcessEngine()在第一个被调用的时候初始化并创建一个流程引擎,在以后的调用中返回同一个引用的流程引擎对象。针对流程引擎中初始化方法为ProcessEngine.init().销毁方法的方法为ProcessEngine.destroy().

ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(inputStream).buildProcessEngine()创建工作流引擎,ProcessEngine见扫描所有的activiti.cfg.xml文件和activiti-context.xml文件。
异常策略:
在activiti中org.activiti.engine.ActivitiException类为所有异常的基类。ActivitiException为非检查性异常。例如:
**

* Called when the task is successfully executed.

* @param taskId the id of the task to complete, cannot be null.

* @throws ActivitiException when no taskexists with thegiven id.

*/

voidcomplete(String taskId);
其他异常类如下:
ActivitiWrongDbException:
Thrown when the Activiti engine discovers a mismatch between the database schema version and the engine version(schema版本和引擎版本不匹配报的错误).

ActivitiOptimisticLockingException:
Thrown when an optimistic locking occurs in the datastore caused by concurrent access of the same data entry.

ActivitiClassLoadingException:
Thrown when an class requested to load was not found or when error occurred while loading it (eg. JavaDelegates, TaskListeners, ...).
Activiti 的测试:
activiti的测试支持Junit3和Junit4的单元测试。在junit3的单元测试中,org.activit.engine.test.ActivitiTestCase必须被继承。在setup()方法中,流程引擎要初始化加载classpath下默认的activi.cfg.xml资源文件。针对不同的配置文件可能需要重新getConfigurationResource()方法。在ActivitiTestCase中可以使用org.activiti.engine.test.Deployment注解方法。
publicclass MyBusinessProcessTest extendsActivitiTestCase {

@Deployment

publicvoid testSimpleProcess() {

runtimeService.startProcessInstanceByKey("simpleProcess");

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

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

taskService.complete(task.getId());

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

}

}
在junit4中org.activiti.engine.test.ActivitiRule Rule被采用。通过ActivitiRule中getter方法获取相关的服务。在Junit4同样功能的单元测试如下:

public class MyBusinessProcessTest { @Rule public ActivitiRule activitiRule = new ActivitiRule(); @Test @Deployment public void ruleUsageExample() { RuntimeService runtimeService = activitiRule.getRuntimeService(); runtimeService.startProcessInstanceByKey("ruleUsage"); TaskService taskService = activitiRule.getTaskService(); Task task = taskService.createTaskQuery().singleResult(); assertEquals("My Task", task.getName()); taskService.complete(task.getId()); assertEquals(0, runtimeService.createProcessInstanceQuery().count()); } }

在web环境中流程引擎的使用:
由于processEngine是一个线程安全性的对象可以容易在多个线程中被共享。在web容器启动加载创建工作流引擎,在容器销毁销毁工作流引擎。可以ServletContextListener实现相关的功能。
publicclass ProcessEnginesServletContextListener implementsServletContextListener {

publicvoid contextInitialized(ServletContextEvent servletContextEvent) {

ProcessEngines.init();

}

publicvoid contextDestroyed(ServletContextEvent servletContextEvent) {

ProcessEngines.destroy();

}

}

Activiti提供模拟流程的API

PvmProcessDefinition processDefinition = new ProcessDefinitionBuilder() .createActivity("a") .initial() .behavior(new WaitState()) .transition("b") .endActivity() .createActivity("b") .behavior(new WaitState()) .transition("c") .endActivity() .createActivity("c") .behavior(new WaitState()) .endActivity() .buildProcessDefinition(); PvmProcessInstance processInstance = processDefinition.createProcessInstance(); processInstance.start(); PvmExecution activityInstance = processInstance.findExecution("a"); assertNotNull(activityInstance); activityInstance.signal(null, null); activityInstance = processInstance.findExecution("b"); assertNotNull(activityInstance); activityInstance.signal(null, null); activityInstance = processInstance.findExecution("c"); assertNotNull(activityInstance);

activiti中表达式
activiti使用UEL(Unified Expression Lanuage)标记解析配置文件中表达式。UEL是EE6特性。
activiti中Expressions支持两种方式:
1.Value expression:在activiti中DelegateExecution是在上下文中是使用“execution”在表达式上下文被使用的。所有在使用值表达式是,所有变量和spring的beans使用execution将被隐藏,在表达式将不被执行。使用方法如下:
${myVar} ${myBean.myProperty}
2.Method expression:使用方法访问的方式。常用方式如下:
${printer.print()} ${myBean.addNewOrder(“orerName”)}
备注:在activiti中expression支持解析的类型为原始类型,beans,lists,arrays和maps


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


工作流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的学习总结(十二) activiti官方十分钟快速学习

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

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

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

工作流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的学习总结(四)Spring和Activiti的整合配置讲解

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

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

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

开源工作流activiti使用手册

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

activiti入门教程-基于Activiti5工作流实战企业协同OA办公系统

基于Activiti5工作流实战企业协同OA办公系统springdatajpauur前台组件一本课程是怎么样的一门课程全面介绍11课程的背景该课程的需求和设计来源于协同公司的OA办公系统从OA系统的需求分析数据...

用activiti 工作流 实现简单的请假 附带源码

用activiti工作流实现简单的请假附带源码用activiti工作流实现简单的请假附带源码新建一个Maven项目项目结构pomxmlhtmlviewplaincopy1ltspangtprojectxmlns...

工作流Activiti的学习总结(九)Activiti手工执行的应用(ReceiveTask实现方式)

工作流模拟的业务情景如下1用户到银行转账业务2银行工作人员查询用户余额3银行工作人员帮助用户转账手工触发执行是指执行到流程中某个个结点后流程暂时停止运行直到收到外部发送的信号以后才会继续向前推进这样情况可以更加...

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

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

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