Activiti的基本配置

合集下载

Activiti流程引擎对象及配置原理解析

Activiti流程引擎对象及配置原理解析

Activiti流程引擎对象及配置原理解析流程引擎对象和其配置对象都是activiti的核⼼对象⼀、activiti的简单使⽤流程activiti在⼯作时,⼀般有以下⼏个步骤:创建⼀个流程引擎配置对象ProcessEngineConfiguration对流程引擎进⾏配置通过流程引擎配置对象来获取流程引擎对象ProcessEngine通过流程引擎对象来部署流程图启动流程⼆、流程引擎配置对象ProcessEngineConfiguration的介绍activiti⽤ProcessEngineConfiguration对象来配置流程引擎。

ProcessEngineConfiguration类提供了多个创建该类对象的静态⽅法,可以读取相应的配置⽂件,返回ProcessEngineConfiguration实例。

通过该类中提供的getter和setter⽅法可以对流程引擎配置对象进⾏配置。

三、activiti配置⽂件的介绍activiti创建流程引擎配置对象时需要⼀个配置⽂件,<beans xmlns="/schema/beans"xmlns:context="/schema/context"xmlns:tx="/schema/tx"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans.xsd/schema/context /schema/context/spring-context-2.5.xsd/schema/tx /schema/tx/spring-tx-3.0.xsd"><!-- 配置使⽤默认bean名称的流程引擎配置对象 --><bean id="processEngineConfiguration"class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti_01"></property><property name="jdbcUsername" value="root"></property><property name="jdbcPassword" value="root"></property><property name="databaseSchemaUpdate" value="true"></property></bean></beans>仔细观察这个配置⽂件,这其实是⼀个spring的配置⽂件,在其中配置了⼀个ProcessEngineConfiguration类的bean,然后在代码中就可以读取这个配置⽂件,获取这个bean。

工作流引擎详解!工作流开源框架ACtiviti的详细配置以及安装和使用

工作流引擎详解!工作流开源框架ACtiviti的详细配置以及安装和使用

⼯作流引擎详解!⼯作流开源框架ACtiviti的详细配置以及安装和使⽤创建ProcessEngineActiviti流程引擎的配置⽂件是名为activiti.cfg.xml的XML⽂件.注意与使⽤Spring⽅式创建流程引擎是不⼀样的使⽤org.activiti.engine.ProcessEngines类,获得ProcessEngine:ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine()它会在classpath下搜索activiti.cfg.xml,并基于这个⽂件中的配置构建引擎<beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /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="" /><property name="mailServerPort" value="5025" /></bean></beans>配置⽂件中使⽤的ProcessEngineConfiguration可以通过编程⽅式创建,可以配置不同的bean idProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource);ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName); // 配置不同的bean id ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream);ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);如果不使⽤配置⽂件进⾏配置,就会基于默认创建配置ProcessEngineConfiguration.createXXX() ⽅法都会返回ProcessEngineConfiguration,后续可以调整成所需的对象. 在调⽤buildProcessEngine()后, 就会创建⼀个ProcessEngine:ProcessEngine processEngine = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration().setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE).setJdbcUrl("jdbc:h2:mem:my-own-db;DB_CLOSE_DELAY=1000").setJobExecutorActivate(true).buildProcessEngine();ProcessEngineConfiguration beanactiviti.cfg.xml必须包含⼀个id='processEngineConfiguration' 的bean<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">这个bean会⽤来构建ProcessEngine. 有多个类可以⽤来定义processEngineConfiguration. 这些类对应不同的环境,并设置了对应的默认值:org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration: 单独运⾏的流程引擎.Activiti会⾃⼰处理事务.默认数据库只在引擎启动时检测(如果没有Activiti的表或者表结构不正确就会抛出异常)org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration: 单元测试时的辅助类.Activiti会⾃⼰控制事务. 默认使⽤H2内存数据库,数据库表会在引擎启动时创建,关闭时删除.使⽤它时,不需要其他配置(除⾮使⽤job执⾏器或邮件功能)org.activiti.spring.SpringProcessEngineConfiguration: 在Spring环境下使⽤流程引擎org.activiti.engine.impl.cfg.JtaProcessEngineConfiguration: 单独运⾏流程引擎,并使⽤JTA事务数据库配置定义数据库配置参数基于数据库配置参数定义数据库连接配置jdbcUrl: 数据库的JDBC URLjdbcDriver: 对应不同数据库类型的驱动jdbcUsername: 连接数据库的⽤户名jdbcPassword: 连接数据库的密码基于JDBC参数配置的数据库连接会使⽤默认的MyBatis连接池,配置MyBatis连接池:jdbcMaxActiveConnections: 连接池中处于被使⽤状态的连接的最⼤值.默认为10jdbcMaxIdleConnections: 连接池中处于空闲状态的连接的最⼤值jdbcMaxCheckoutTime: 连接被取出使⽤的最长时间,超过时间会被强制回收. 默认为20000(20秒)jdbcMaxWaitTime: 这是⼀个底层配置,让连接池可以在长时间⽆法获得连接时, 打印⼀条⽇志,并重新尝试获取⼀个连接.(避免因为错误配置导致沉默的操作失败) 默认为20000(20秒)使⽤javax.sql.DataSource配置Activiti的发布包中没有这些类, 要把对应的类放到classpath下<bean id="dataSource" class="mons.dbcp.BasicDataSource" ><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/activiti" /><property name="username" value="activiti" /><property name="password" value="activiti" /><property name="defaultAutoCommit" value="false" /></bean><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><property name="dataSource" ref="dataSource" />...</bean>⽆论使⽤JDBC还是DataSource,都可以设置下⾯的配置:databaseType:⼀般不⽤设置,因为可以⾃动通过数据库连接的元数据获取只有⾃动检测失败时才需要设置.可能的值有:{h2,mysql,oracle,postgres,mssql,db2}如果没使⽤默认的H2数据库就必须设置这项.这个配置会决定使⽤哪些创建/删除脚本和查询语句databaseSchemaUpdate: 设置流程引擎启动和关闭时如何处理数据库表false:默认, 检查数据库表的版本和依赖库的版本,如果版本不匹配就抛出异常true: 构建流程引擎时,执⾏检查,如果需要就执⾏更新. 如果表不存在,就创建create-drop: 构建流程引擎时创建数据库表,关闭流程引擎时删除这些表JNDI数据库配置在默认情况下,Activiti的数据库配置会放在web应⽤的WEB-INF/classes⽬录下的db.properties⽂件中. 这样做⽐较繁琐,因为要⽤户在每次发布时,都修改Activiti源码中的db.properties并重新编译war⽂件,或者解压缩war⽂件,修改其中的db.properties使⽤ JNDI(Java命名和⽬录接⼝) 来获取数据库连接,连接是由servlet容器管理的,可以在war部署外边管理配置. 与db.properties相⽐,它也允许对连接进⾏更多的配置JNDI的使⽤Activiti Explorer和Activiti Rest应⽤从db.properties转换为使⽤JNDI数据库配置:需要打开原始的Spring配置⽂件:activiti-webapp-explorer/src/main/webapp/WEB-INF/activiti-standalone-context.xmlactiviti-webapp-rest2/src/main/resources/activiti-context.xml删除dbProperties和dataSource两个bean,然后添加如下bean:<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"><property name="jndiName" value="java:comp/env/jdbc/activitiDB"/></bean>我们需要添加包含了默认的H2配置的context.xml⽂件如果已经有了JNDI配置,会覆盖这些配置.对应的配置⽂件activiti-webapp-explorer2/src/main/webapp/META-INF/context.xml:<?xml version="1.0" encoding="UTF-8"?><Context antiJARLocking="true" path="/activiti-explorer2"><Resource auth="Container"name="jdbc/activitiDB"type="javax.sql.DataSource"scope="Shareable"description="JDBC DataSource"url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000"driverClassName="org.h2.Driver"username="sa"password=""defaultAutoCommit="false"initialSize="5"maxWait="5000"maxActive="120"maxIdle="5"/></Context>如果是Activiti REST应⽤,则添加activiti-webapp-rest2/src/main/webapp/META-INF/context.xml:<?xml version="1.0" encoding="UTF-8"?><Context antiJARLocking="true" path="/activiti-rest2"><Resource auth="Container"name="jdbc/activitiDB"type="javax.sql.DataSource"scope="Shareable"description="JDBC DataSource"url="jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1"driverClassName="org.h2.Driver"username="sa"password=""defaultAutoCommit="false"initialSize="5"maxWait="5000"maxActive="120"maxIdle="5"/></Context>最后删除Activiti Explorer和Activiti Rest两个应⽤中不再使⽤的db.properties⽂件JNDI的配置JNDI数据库配置会因为使⽤的Servlet container不同⽽不同Tomcat容器中的JNDI配置如下:JNDI资源配置在CATALINA_BASE/conf/[enginename]/[hostname]/[warname].xml(对于Activiti Explorer来说,通常是在CATALINA_BASE/conf/Catalina/localhost/activiti-explorer.war) 当应⽤第⼀次发布时,会把这个⽂件从war中复制出来.所以如果这个⽂件已经存在了,需要替换它.修改JNDI资源让应⽤连接mysql⽽不是H2:<?xml version="1.0" encoding="UTF-8"?><Context antiJARLocking="true" path="/activiti-explorer2"><Resource auth="Container"name="jdbc/activitiDB"type="javax.sql.DataSource"description="JDBC DataSource"url="jdbc:mysql://localhost:3306/activiti"driverClassName="com.mysql.jdbc.Driver"username="sa"password=""defaultAutoCommit="false"initialSize="5"maxWait="5000"maxActive="120"maxIdle="5"/></Context>Activiti⽀持的数据库h2: 默认配置的数据库mysqloraclepostgresdb2mssql创建数据库表创建数据库表的⽅法:activiti-engine的jar放到classpath下添加对应的数据库驱动把Activiti配置⽂件(activiti.cfg.xml)放到classpath下,指向你的数据库执⾏DbSchemaCreate类的main⽅法SQL DDL语句可以从Activiti下载页或Activiti发布⽬录⾥找到,在database⼦⽬录下.脚本也包含在引擎的jar中:activiti-engine-x.jar在org/activiti/db/create包下,drop⽬录⾥是删除语句- SQL⽂件的命名⽅式如下:[activiti.{db}.{create|drop}.{type}.sql]type 是:- engine:引擎执⾏的表,必须- identity:包含⽤户,群组,⽤户与组之间的关系的表.这些表是可选的,只有使⽤引擎⾃带的默认⾝份管理时才需要- history:包含历史和审计信息的表,可选的.历史级别设为none时不会使⽤. 注意这也会引⽤⼀些需要把数据保存到历史表中的功能数据库表名理解Activiti的表都以ACT_开头, 第⼆部分是表⽰表的⽤途的两个字母标识.⽤途和服务的API对应ACT_RE_*: RE表⽰repository. 这个前缀的表包含了流程定义和流程静态资源ACT_RU_*: RU表⽰runtime. 这些是运⾏时的表,包含流程实例,任务,变量,异步任务等运⾏中的数据. Activiti只在流程实例执⾏过程中保存这些数据,在流程结束时就会删除这些记录.这样运⾏时表可以⼀直很⼩速度很快ACT_ID_*: ID 表⽰identity. 这些表包含⾝份信息. ⽐如⽤户,组等等ACT_HI_*: HI 表⽰history. 这些表包含历史数据. ⽐如历史流程实例, 变量,任务等等ACT_GE_*: 通⽤数据. ⽤于不同场景下数据库升级在执⾏更新之前要先使⽤数据库的备份功能备份数据库默认情况下,每次构建流程引擎时都会进⾏版本检测.这⼀切都在应⽤启动或Activiti webapp启动时发⽣.如果Activiti发现数据库表的版本与依赖库的版本不同,就会抛出异常对activiti.cfg.xml配置⽂件进⾏配置来升级:<beans ... ><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!-- ... --><property name="databaseSchemaUpdate" value="true" /><!-- ... --></bean></beans>然后,把对应的数据库驱动放到classpath⾥.升级应⽤的Activiti依赖,启动⼀个新版本的Activiti指向包含旧版本的数据库,将databaseSchemaUpdate设置为true,Activiti会⾃动将数据库表升级到新版本当发现依赖和数据库表版本不通过时,也可以执⾏更新升级DDL语句也可以执⾏数据库脚本,可以在Activiti下载页找到启⽤Job执⾏器JobExecutor是管理⼀系列线程的组件,可以触发定时器(包含后续的异步消息).在单元测试场景下,很难使⽤多线程.因此API允许查询Job(ManagementService.createJobQuery) 和执⾏Job(ManagementService.executeJob),因此Job可以在单元测试中控制, 要避免与job执⾏器冲突,可以关闭它默认,JobExecutor在流程引擎启动时就会激活. 如果不想在流程引擎启动后⾃动激活JobExecutor,可以设置<property name="jobExecutorActivate" value="false" />配置邮件服务器Activiti⽀持在业务流程中发送邮件,可以在配置中配置邮件服务器配置SMTP邮件服务器来发送邮件配置历史存储Activiti可以配置来定制历史存储信息<property name="history" value="audit" />表达式和脚本暴露配置默认情况下,activiti.cfg.xml和Spring配置⽂件中所有bean 都可以在表达式和脚本中使⽤如果要限制配置⽂件中的bean的可见性,可以通过配置流程引擎配置的beans来配置ProcessEngineConfiguration的beans是⼀个map.当指定了这个参数,只有包含这个map中的bean可以在表达式和脚本中使⽤.通过在map中指定的名称来决定暴露的bean配置部署缓存因为流程定义的数据是不会改变的,为了避免每次使⽤访问数据库,所有流程定义在解析之后都会被缓存默认情况下,不会限制这个缓存.如果想限制流程定义缓存,可以添加如下配置<property name="processDefinitionCacheLimit" value="10" />这个配置会把默认的HashMap缓存替换成LRU缓存来提供限制. 这个配置的最佳值跟流程定义的总数有关,实际使⽤中会具体使⽤多少流程定义也有关也可以注⼊⾃定义的缓存实现,这个bean必须实现org.activiti.engine.impl.persistence.deploy.DeploymentCache接⼝<property name="processDefinitionCache"><bean class="org.activiti.MyCache" /></property>类似的配置有knowledgeBaseCacheLimit和knowledgeBaseCache, 它们是配置规则缓存的.只有流程中使⽤规则任务时才⽤⽇志从Activiti 5.12开始,所有⽇志(activiti,spring,,mybatis等等)都转发给slf4j允许⾃定义⽇志实现引⼊Maven依赖log4j实现,需要添加版本<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId></dependency>使⽤Maven的实例,忽略版本<dependency><groupId>org.slf4j</groupId><artifactId>jcl-over-slf4j</artifactId></dependency>映射诊断上下⽂Activiti⽀持slf4j的MDC功能, 如下的基础信息会传递到⽇志中记录:流程定义ID: mdcProcessDefinitionID流程实例ID: mdcProcessInstanceID分⽀ID: mdcexecutionId默认不会记录这些信息,可以配置⽇志使⽤期望的格式来显⽰它们,扩展通常的⽇志信息. ⽐如,通过log4j配置定义会让⽇志显⽰上⾯的信息:yout.ConversionPattern =ProcessDefinitionId=%X{mdcProcessDefinitionID}executionId=%X{mdcExecutionId}mdcProcessInstanceID=%X{mdcProcessInstanceID} mdcBusinessKey=%X{mdcBusinessKey} %m%n"当系统进⾏⾼风险任务,⽇志必须严格检查时,这个功能就⾮常有⽤,要使⽤⽇志分析的情况事件处理Activiti中实现了⼀种事件机制,它允许在引擎触发事件时获得提醒为对应的事件类型注册监听器,在这个类型的任何时间触发时都会收到提醒:可以添加引擎范围的事件监听器,可以通过配置添加引擎范围的事件监听器在运⾏阶段使⽤API添加event-listener到特定流程定义的BPMN XML中所有分发的事件,都是org.activiti.engine.delegate.event.ActivitiEvent的⼦类.事件包含type,executionId,processInstanceId和processDefinitionId. 对应的事件会包含事件发⽣时对应上下⽂的额外信息事件监听器实现实现事件监听器要实现org.activiti.engine.delegate.event.ActivitiEventListener.下⾯监听器的实现会把所有监听到的事件打印到标准输出中,包括job执⾏的事件异常:public class MyEventListener implements ActivitiEventListener {@Overridepublic void onEvent(ActivitiEvent event) {switch (event.getType()) {case JOB_EXECUTION_SUCCESS:System.out.println("A job well done!");break;case JOB_EXECUTION_FAILURE:System.out.println("A job has failed...");break;default:System.out.println("Event received: " + event.getType());}}@Overridepublic boolean isFailOnException() {// The logic in the onEvent method of this listener is not critical, exceptions// can be ignored if logging fails...return false;}}isFailOnException(): 决定了当事件分发时onEvent(..) ⽅法抛出异常时的⾏为返回false,会忽略异常返回true,异常不会忽略,继续向上传播,迅速导致当前命令失败当事件是⼀个API调⽤的⼀部分时(或其他事务性操作,⽐如job执⾏), 事务就会回滚当事件监听器中的⾏为不是业务性时,建议返回falseactiviti提供了⼀些基础的实现,实现了事件监听器的常⽤场景可以⽤来作为基类或监听器实现的样例org.activiti.engine.delegate.event.BaseEntityEventListener:这个事件监听器的基类可以⽤来监听实体相关的事件,可以针对某⼀类型实体,也可以是全部实体隐藏了类型检测,并提供了三个需要重写的⽅法:onCreate(..)onUpdate(..)onDelete(..)当实体创建,更新,或删除时调⽤对于其他实体相关的事件,会调⽤onEntityEvent(..)事件监听器的配置安装把事件监听器配置到流程引擎配置中,会在流程引擎启动时激活,并在引擎启动过程中持续⼯作eventListeners属性需要org.activiti.engine.delegate.event.ActivitiEventListener的队列通常,我们可以声明⼀个内部的bean定义,或使⽤ref引⽤已定义的bean.下⾯的代码,向配置添加了⼀个事件监听器,任何事件触发时都会提醒它,⽆论事件是什么类型:<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">...<property name="eventListeners"><list><bean class="org.activiti.engine.example.MyEventListener" /></list></property></bean>为了监听特定类型的事件可以使⽤typedEventListeners属性它需要⼀个map参数map的key是逗号分隔的事件名或单独的事件名map的value是org.activiti.engine.delegate.event.ActivitiEventListener队列下⾯的代码演⽰了向配置中添加⼀个事件监听器,可以监听job执⾏成功或失败:<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">...<property name="typedEventListeners"><map><entry key="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE" ><list><bean class="org.activiti.engine.example.MyJobEventListener" /></list></entry></map></property></bean>分发事件的顺序是由监听器添加时的顺序决定的⾸先,会调⽤所有普通的事件监听器(eventListeners属性),按照它们在list中的次序然后,会调⽤所有对应类型的监听器(typedEventListeners属性),对应类型的事件被触发运⾏阶段添加监听器通过API:RuntimeService, 在运⾏阶段添加或删除额外的事件监听器:/*** Adds an event-listener which will be notified of ALL events by the dispatcher.* @param listenerToAdd the listener to add*/void addEventListener(ActivitiEventListener listenerToAdd);/*** Adds an event-listener which will only be notified when an event occurs, which type is in the given types.* @param listenerToAdd the listener to add* @param types types of events the listener should be notified for*/void addEventListener(ActivitiEventListener listenerToAdd, ActivitiEventType... types);/*** Removes the given listener from this dispatcher. The listener will no longer be notified,* regardless of the type(s) it was registered for in the first place.* @param listenerToRemove listener to remove*/void removeEventListener(ActivitiEventListener listenerToRemove);运⾏阶段添加的监听器引擎重启后就消失流程定义添加监听器特定流程定义添加监听器:监听器只会监听与这个流程定义相关的事件以及这个流程定义上发起的所有流程实例的事件监听器实现:可以使⽤全类名定义引⽤实现了监听器接⼝的表达式配置为抛出⼀个message,signal,error的BPMN事件监听器执⾏⾃定义逻辑下⾯代码为⼀个流程定义添加了两个监听器:第⼀个监听器会接收所有类型的事件,它是通过全类名定义的第⼆个监听器只接收作业成功或失败的事件,它使⽤了定义在流程引擎配置中的beans属性中的⼀个bean<process id="testEventListeners"><extensionElements><activiti:eventListener class="org.activiti.engine.test.MyEventListener" /><activiti:eventListener delegateExpression="${testEventListener}" events="JOB_EXECUTION_SUCCESS,JOB_EXECUTION_FAILURE" /></extensionElements>...</process>对于实体相关的事件,也可以设置为针对某个流程定义的监听器,实现只监听发⽣在某个流程定义上的某个类型实体事件.下⾯的代码演⽰了如何实现这种功能:第⼀个例⼦:⽤于监听所有实体事件第⼆个例⼦:⽤于监听特定类型的事件<process id="testEventListeners"><extensionElements><activiti:eventListener class="org.activiti.engine.test.MyEventListener" entityType="task" /><activiti:eventListener delegateExpression="${testEventListener}" events="ENTITY_CREATED" entityType="task" /></extensionElements>...</process>entityType⽀持的值有:attachmentcommentexecutionidentity-linkjobprocess-instanceprocess-definitiontask监听抛出BPMN事件另⼀种处理事件的⽅法是抛出⼀个BPMN事件:只针对与抛出⼀个activiti事件类型的BPMN事件, 抛出⼀个BPMN事件,在流程实例删除时,会导致⼀个错误下⾯的代码演⽰了如何在流程实例中抛出⼀个signal,把signal抛出到外部流程(全局),在流程实例中抛出⼀个消息事件,在流程实例中抛出⼀个错误事件.除了使⽤class或delegateExpression, 还使⽤了throwEvent属性,通过额外属性,指定了抛出事件的类型<process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="signal" signalName="My signal" events="TASK_ASSIGNED" /></extensionElements></process><process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="globalSignal" signalName="My signal" events="TASK_ASSIGNED" /></extensionElements></process><process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="message" messageName="My message" events="TASK_ASSIGNED" /></extensionElements></process><process id="testEventListeners"><extensionElements><activiti:eventListener throwEvent="error" errorCode="123" events="TASK_ASSIGNED" /></extensionElements></process>如果需要声明额外的逻辑,是否抛出BPMN事件,可以扩展activiti提供的监听器类:在⼦类中重写isValidEvent(ActivitiEvent event), 可以防⽌抛出BPMN事件.对应的类是:org.activiti.engine.impl.bpmn.helper.MessageThrowingEventListenerorg.activiti.engine.test.api.event.SignalThrowingEventListenerTestorg.activiti.engine.impl.bpmn.helper.ErrorThrowingEventListener流程定义监听器注意点事件监听器只能声明在process元素中,作为extensionElements的⼦元素.监听器不能定义在流程的单个activity下delegateExpression中的表达式⽆法访问execution上下⽂,这与其他表达式不同(⽐如gateway).它只能引⽤定义在流程引擎配置的beans属性中声明的bean, 或者使⽤spring(未使⽤beans属性)中所有实现了监听器接⼝的spring-bean使⽤监听器的class属性时,只会创建⼀个实例.监听器实现不会依赖成员变量,是多线程安全的当⼀个⾮法的事件类型⽤在events属性或throwEvent中时,流程定义发布时就会抛出异常(会导致部署失败)如果class或delegateExecution由问题:类不存在,不存在的bean引⽤,或代理类没有实现监听器接⼝在流程启动时抛出异常在第⼀个有效的流程定义事件被监听器接收时所以要保证引⽤的类正确的放在classpath下,表达式也要引⽤⼀个有效的实例通过API分发事件Activiti我们提供了通过API使⽤事件机制的⽅法,允许触发定义在引擎中的任何⾃定义事件建议只触发类型为CUSTOM的ActivitiEvents.可以通过RuntimeService触发事件:/*** Dispatches the given event to any listeners that are registered.* @param event event to dispatch.** @throws ActivitiException if an exception occurs when dispatching the event or when the {@link ActivitiEventDispatcher}* is disabled.* @throws ActivitiIllegalArgumentException when the given event is not suitable for dispatching.*/void dispatchEvent(ActivitiEvent event);⽀持的事件类型引擎中每个事件类型都对应org.activiti.engine.delegate.event.ActivitiEventType中的⼀个枚举值事件名称事件描述事件类型ENGINE_CREATED监听器监听的流程引擎已经创建,准备好接受API调⽤ActivitiEvent ENGINE_CLOSED监听器监听的流程引擎已经关闭,不再接受API调⽤ActivitiEvent ENTITY_CREATED创建了⼀个新实体,实体包含在事件中ActivitiEntityEventENTITY_INITIALIZED 创建了⼀个新实体,初始化也完成了.如果这个实体的创建会包含⼦实体的创建,这个事件会在⼦实体都创建/初始化完成后被触发,这是与ENTITY_CREATED的区别ActivitiEntityEventENTITY_UPDATED更新了已存在的实体,实体包含在事件中ActivitiEntityEvent ENTITY_DELETED删除了已存在的实体,实体包含在事件中ActivitiEntityEvent ENTITY_SUSPENDED暂停了已存在的实体,实体包含在事件中.会被ProcessDefinitions,ProcessInstances和Tasks抛出ActivitiEntityEventENTITY_ACTIVATED激活了已存在的实体,实体包含在事件中.会被ProcessDefinitions,ProcessInstances和Tasks抛出ActivitiEntityEvent JOB_EXECUTION_SUCCESS作业执⾏成功,job包含在事件中ActivitiEntityEventJOB_EXECUTION_FAILURE作业执⾏失败,作业和异常信息包含在事件中ActivitiEntityEvent ActivitiExceptionEventJOB_RETRIES_DECREMENTED因为作业执⾏失败,导致重试次数减少.作业包含在事件中ActivitiEntityEvent TIMER_FIRED触发了定时器,job包含在事件中ActivitiEntityEventJOB_CANCELED取消了⼀个作业.事件包含取消的作业.作业可以通过API调⽤取消,任务完成后对应的边界定时器也会取消,在新流程定义发布时也会取消ActivitiEntityEventACTIVITY_STARTED⼀个节点开始执⾏ActivitiActivityEvent ACTIVITY_COMPLETED⼀个节点成功结束ActivitiActivityEvent ACTIVITY_SIGNALED⼀个节点收到了⼀个信号ActivitiSignalEventACTIVITY_MESSAGE_RECEIVED ⼀个节点收到了⼀个消息.在节点收到消息之前触发,收到后,会触发ACTIVITY_SIGNAL或ACTIVITY_STARTED, 这会根据节点的类型:边界事件,事件⼦流程开始事件ActivitiMessageEventACTIVITY_ERROR_RECEIVED ⼀个节点收到了⼀个错误事件.在节点实际处理错误之前触发, 事件的activityId对应着处理错误的节点.这个事件后续会是ACTIVITY_SIGNALLED或ACTIVITY_COMPLETE, 如果错误发送成功的话ActivitiErrorEventUNCAUGHT_BPMN_ERROR抛出了未捕获的BPMN错误.流程没有提供针对这个错误的处理器.事件的activityId为空ActivitiErrorEventACTIVITY_COMPENSATE⼀个节点将要被补偿.事件包含了将要执⾏补偿的节点id ActivitiActivityEvent VARIABLE_CREATED创建了⼀个变量.事件包含变量名,变量值和对应的分⽀或任务(如果存在)ActivitiVariableEvent VARIABLE_UPDATED更新了⼀个变量.事件包含变量名,变量值和对应的分⽀或任务(如果存在)ActivitiVariableEvent VARIABLE_DELETED删除了⼀个变量.事件包含变量名,变量值和对应的分⽀或任务(如果存在)ActivitiVariableEvent TASK_ASSIGNED任务被分配给了⼀个⼈员.事件包含任务ActivitiEntityEventTASK_CREATED创建了新任务.它位于ENTITY_CREATE事件之后.当任务是由流程创建时,这个事件会在TaskListener执⾏之前被执⾏ActivitiEntityEventTASK_COMPLETED 任务完成.它会在ENTITY_DELETE事件之前触发.当任务是流程⼀部分时,事件会在流程继续运⾏之前, 后续事件将是ACTIVITY_COMPLETE,对应着完成任务的节点ActivitiEntityEventTASK_TIMEOUT任务已超时.在TIMER_FIRED事件之后,会触发⽤户任务的超时事件,当这个任务分配了⼀个定时器的时候ActivitiEntityEventPROCESS_COMPLETED流程已结束.在最后⼀个节点的ACTIVITY_COMPLETED事件之后触发.当流程到达的状态,没有任何后续连线时,流程就会结束ActivitiEntityEvent MEMBERSHIP_CREATED⽤户被添加到⼀个组⾥.事件包含了⽤户和组的id ActivitiMembershipEvent MEMBERSHIP_DELETED⽤户被从⼀个组中删除.事件包含了⽤户和组的id ActivitiMembershipEventMEMBERSHIPS_DELETED 所有成员被从⼀个组中删除.在成员删除之前触发这个事件,所以他们都是可以访问的.因为性能⽅⾯的考虑,不会为每个成员触发单独的MEMBERSHIP_DELETED事件ActivitiMembershipEvent引擎内部所有ENTITY_* 事件都是与实体相关的,实体事件与实体的对应关系:[ENTITY_CREATED],[ENTITY_INITIALIZED],[ENTITY_DELETED]:AttachmentCommentDeploymentExecutionGroupIdentityLinkJobModelProcessDefinitionProcessInstanceTaskUserENTITY_UPDATED:AttachmentDeploymentExecutionGroupIdentityLinkJobModelProcessDefinitionProcessInstanceTaskUserENTITY_SUSPENDED, ENTITY_ACTIVATED:ProcessDefinitionProcessInstanceExecutionTask注意只有同⼀个流程引擎中的事件会发送给对应的监听器如果有很多引擎在同⼀个数据库运⾏,事件只会发送给注册到对应引擎的监听器.其他引擎发⽣的事件不会发送给这个监听器,⽆论实际上它们运⾏在同⼀个或不同的JVM中对应的事件类型都包含对应的实体.根据类型或事件,这些实体不能再进⾏更新(⽐如,当实例以被删除).可能的话,使⽤事件提供的EngineServices来以安全的⽅式来操作引擎.即使如此,也要⼩⼼的对事件对应的实体进⾏更新,操作没有对应历史的实体事件,因为它们都有运⾏阶段的对应实体。

Activiti7基本架构与使用步骤(一)

Activiti7基本架构与使用步骤(一)

Activiti7基本架构与使⽤步骤(⼀)感觉跟activiti6差不多,不过7中删除了两个service(IdentityService、FormService),反⽽⼜多了两个表。

这⾥所有输出的信息都是以后可以放在前端⾥的信息。

1.Activiti的架构说明ProcessEngineConfiguration类,主要作⽤是加载activiti.cfg.xml配置⽂件ProcessEngine类作⽤是帮助我们可以快速得到各个Service接⼝,并且可以⽣成activiti的⼯作环境 25张表⽣成Service接⼝作⽤:可以快速实现数据25张表的操作。

RepositoryService RuntimeService TaskService HistoryService2.⽤BPMN的ActivitiDesigner插件绘制流程定义图3.部署流程定义⽅式⼀:单个⽂件(bpmn⽂件,png⽂件)/*** 流程定义的部署* 影响的activiti表有哪些* act_re_deployment 部署信息* act_re_procdef 流程定义的⼀些信息* act_ge_bytearray 流程定义的bpmn⽂件以及png⽂件*/public class ActivitiDeployment {// 流程定义部署public static void main(String[] args){//1.创建ProcessEngine对象ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();//2.得到RepositoryService实例RepositoryService repositoryService = processEngine.getRepositoryService();//3.进⾏部署Deployment deployment = repositoryService.createDeployment()//创建Deployment对象.addClasspathResource("diagram/holiday.bpmn")//添加bpmn⽂件.addClasspathResource("diagram/holiday.png")//添加png⽂件.name("请假申请单流程").deploy();//部署//4.输出部署的⼀些信息System.out.println(deployment.getName());System.out.println(deployment.getId());}}⽅式⼆:先将bpmn⽂件和png⽂件压缩成zip⽂件。

activiti入门

activiti入门

activiti⼊门最近项⽬有个⼯作流的需求,从头开始学⼀下activiti,记录⼀些问题。

1.去官⽹下载activiti7.0或者使⽤maven下载,并在idea中下载activiBPM流程插件2.创建⼀个普通的maven依赖,添加activiti、mysql、mybatis、连接池、junit等jar包。

推荐使⽤相关配置如下:<properties><activiti.version>7.0.0.Beta1</activiti.version></properties><dependencies><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>${activiti.version}</version></dependency><!--<dependency>--><!--<groupId>org.activiti</groupId>--><!--<artifactId>activiti-json-converte</artifactId>--><!--<version>${activiti.version}</version>--><!--</dependency>--><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>${activiti.version}</version></dependency><!--<dependency>--><!--<groupId>org.activiti</groupId>--><!--<artifactId>activiti-cloud-services</artifactId>--><!--<version>${activiti.version}</version>--><!--</dependency>--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version></dependency><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.32</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.28</version></dependency></dependencies>有两个依赖下不下来,先不管它,后⾯再填坑3.在resource下配置log4j,activiti.cfg.xml配置⽂件(<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"><!--配置数据库相关--><!--数据库驱动--><property name="jdbcDriver" value="com.mysql.jdbc.Driver"/><!--数据库连接--><property name="jdbcUrl" value="jdbc:mysql:///activiti"/><!--数据库⽤户名和密码--><property name="jdbcUsername" value="root"/><property name="jdbcPassword" value="root"/><!--activiti数据库表在⽣成时的策略--><!--true表⽰数据库中存在相应的表就直接使⽤,不存在则创建--><property name="databaseSchemaUpdate" value="true"/></bean>),注意bean的id和配置⽂件的名称都不能修改。

Activiti下载安装和环境配置教程

Activiti下载安装和环境配置教程

Activiti环境配置1.发环境·Jdk1.8或以上版本·Mysql5及以上的版本·Tomcat8.5·IDEA注意:activiti的流程定义工具件可以在IDEA下,也可以在Eclipse工具下2.Activiti环境们使用:Activiti7.0.0.Beta1默认支持spring52.1下载activiti7Activiti下载:/download.html,Maven的依赖如下:<dependencyManagement><dependencies><dependency><groupId>org.activiti</groupId><artifactId>activiti-dependencies</artifactId><version>7.0.0.Beta1</version><scope>import</scope><type>pom</type></dependency></dependencies></dependencyManagement>Database:activiti运行需要有数据库的支持,支持的数据库有:h2,mysql,oracle,postgres,mssql,db2。

2.2流程设计器IDEA下在IDEA的File菜单中找到子菜单”Settings”,后面们再选择左侧的“plugins”菜单,如下图所示:此时们就可以搜索到actiBPM件,它就ActivitiDesigner的IDEA版本,们击Install。

好后,页面如下:提示需要重启idea,击重启。

重启完成后,再次打Settings下的Plugins(件列表),击右侧的Installed(已的件),在列表中看到actiBPM,就说明已经成功了,如下图所示:。

activiti配置调用业务方法

activiti配置调用业务方法

activiti配置调用业务方法Activiti是一款流程引擎,可作为业务流程处理的一部分。

Activiti不仅可在流程定义中配置业务逻辑,还可调用外部的业务服务。

在Activiti中配置业务方法的核心概念是Delegate和ServiceTask。

Delegate 是Java类,它实现了执行特定任务的接口。

ServiceTask是Activiti流程定义中的一种元素,它指定了要执行的任务,包括要调用哪个Delegate类。

有两种方法可以在Activiti中配置业务方法:手动编写Delegate类或使用工具生成代理类。

1. 手动编写Delegate类实现Delegate接口的最简单方法是创建一个类,扩展org.activiti.engine.delegate.JavaDelegate接口。

JavaDelegate有一个execu()方法,可以在此方法中执行必要的逻辑。

下面的例子演示了如何实现JavaDelegate接口。

public class MyDelegate implements JavaDelegate {public void execute(DelegateExecution execution) throws Exception {System.out.println("Testing delegate for Activiti!");}}要在Activiti的流程定义中使用此Delegate类,需要添加一个Service Task元素。

Service Task元素定义了要执行的任务以及要使用的Delegate类。

下面的例子演示了如何在流程定义中配置ServiceTask元素。

<serviceTask id="serviceTask1" name="Service Task"activiti:class="com.activiti.MyDelegate"></serviceTask>上面的流程定义演示了如何使用MyDelegate类在Service Task中配置activiti:class属性。

activiti基础环境搭建

使用maven创建activiti项目基础配置项目组最近的项目使用到了activiti工作流,到处查找了一些资料后,初步完成任务。

但是我所做的事只是在搭好的环境中调用接口和方法操作,因此自己尝试着也从搭建环境入手,以下是成功实现以后的记录。

实现目标:成功创建activiti相关的24张表并进行简单操作。

使用环境:eclipse4.4.1、tomcat7、jdk1.7、mysql5.6.25、maven3.2.5maven导入依赖包的配置:<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>activitiTest</groupId><artifactId>activitiTest</artifactId><packaging>war</packaging><version>0.0.1-SNAPSHOT</version><name>activitiTest Maven Webapp</name><url></url><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>5.16</version><scope>test</scope></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-converter</artifactId><version>5.16</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-model</artifactId><version>5.16</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-bpmn-layout</artifactId><version>5.16</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency></dependencies><build><finalName>activitiTest</finalName></build></project>activiti主配置文件activiti.cfg.xml连接数据库创建引擎的配置:<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd"><bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneInMemProcessEngineConfiguration"><property name="databaseType" value="mysql"></property><property name="jdbcDriver" value="com.mysql.jdbc.Driver" ></property><property name="jdbcUrl" value="jdbc:mysql://192.168.0.33:3306/activititest?useUnicode=true&amp;characterEncoding=u tf8" ></property><property name="jdbcUsername" value="root" ></property><property name="jdbcPassword" value="123456" ></property><property name="databaseSchemaUpdate" value="true" /><property name="jobExecutorActivate" value="false"/><property name="history" value="full"/></bean></beans>java测试代码:package activitiTest;import java.io.InputStream;import java.util.zip.ZipInputStream;import org.activiti.engine.ProcessEngine;import org.activiti.engine.ProcessEngines;public class ActTest {public void actDeployement() {ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("actTest1.zip");ZipInputStream zipInputStream = new ZipInputStream(inputStream);processEngine.getRepositoryService().createDeployment().name("activiti测试").addZipInputStream(zipInputStream).deploy();}}项目结构:启动测试代码后数据库表如下:参考文档:/docs/activiti/index.html#configuration。

Activiti工作流数据库表结构

Activiti数据表结构目录1ACTIVITI数据库表结构 ----------------------------------------------------------------------------------------------- 21.1数据库表名说明 ------------------------------------------------------------------------------------------------ 21.2数据库表结构---------------------------------------------------------------------------------------------------- 31.2.1Activiti数据表清单: ---------------------------------------------------------------------------------------- 31.2.2表名:ACT_GE_BYTEARRAY (通用的流程定义和流程资源)-------------------------------- 31.2.3表名:ACT_GE_PROPERTY (系统相关属性) ----------------------------------------------------- 41.2.4表名:ACT_HI_ACTINST (历史节点表) ------------------------------------------------------------ 51.2.5表名:ACT_HI_ATTACHMENT (附件信息)-------------------------------------------------------- 61.2.6表名:ACT_HI_COMMENT (历史审批意见表)-------------------------------------------------- 61.2.7表名:ACT_HI_DETAIL (历史详细信息)----------------------------------------------------------- 71.2.8表名:ACT_HI_IDENTITYLINK (历史流程人员表) ---------------------------------------------- 81.2.9表名:ACT_HI_PROCINST(历史流程实例信息)核心表---------------------------------------- 81.2.10表名:ACT_HI_TASKINST(历史任务流程实例信息)核心表------------------------------ 91.2.11表名:ACT_HI_VARINST(历史变量信息) ------------------------------------------------------ 91.2.12表名:ACT_ID_GROUP(用户组表) ------------------------------------------------------------ 101.2.13表名:ACT_ID_INFO (用户扩展信息表) ---------------------------------------------------- 101.2.14表名:ACT_ID_MEMBERSHIP(用户用户组关联表) -------------------------------------- 111.2.15表名:ACT_ID_USER(用户信息表) ------------------------------------------------------------ 111.2.16表名:ACT_RE_DEPLOYMENT(部署信息表)------------------------------------------------ 121.2.17表名:ACT_RE_MODEL (流程设计模型部署表) ----------------------------------------------- 121.2.18表名:ACT_RE_PROCDEF (流程定义表) ---------------------------------------------------- 131.2.19表名:ACT_RU_EVENT_SUBSCR (运行时事件) ------------------------------------------------- 141.2.20表名:ACT_RU_EXECUTION (运行时流程执行实例) ----------------------------------- 151.2.21表名:ACT_RU_IDENTITYLINK(身份联系) --------------------------------------------------- 151.2.22表名:ACT_RU_JOB(运行中的任务)---------------------------------------------------------- 161.2.23表名:ACT_RU_TASK(运行时任务数据表) ------------------------------------------------------ 161.2.24表名:ACT_RU_VARIABLE(运行时流程变量数据表) ----------------------------------------- 17 2ACTIVITI中主要对象的关系 -------------------------------------------------------------------------------------- 181Activiti数据库表结构1.1数据库表名说明Activiti工作流总共包含23张数据表,所有的表名默认以“ACT_”开头。

activiti工作流基础方法

activiti工作流基础方法
Activiti是一个基于Java的工作流引擎,它提供了一套丰富的API来支持工作流的定义、部署、运行和管理。

以下是Activiti工作流的一些基础方法:
1. 部署流程定义:使用Deployment API可以将BPMN 流程定义文件部署到Activiti引擎中。

部署完成后,可以获取到流程定义的ID,并使用该ID 进行流程实例的创建。

2. 创建流程实例:使用ProcessInstance API可以创建一个新的流程实例。

在创建流程实例时,需要指定流程定义的ID、流程的起始节点ID以及其他相关参数。

3. 启动流程实例:一旦流程实例创建成功,可以使用Start API启动流程实例。

启动后,流程将按照定义的流程逻辑开始执行。

4. 执行任务:在流程执行过程中,会涉及到多个任务节点的处理。

使用Task API可以获取当前任务节点的相关信息,并进行任务的处理。

5. 完成任务:完成任务节点后,需要使用Task API将任务状态更新为已完成。

同时,根据流程定义中的规则,可能会自动创建新的任务节点或者触发其他事件。

6. 查询流程实例:使用ProcessInstance API可以查询指定ID的流程实例的状态信息,包括当前节点、历史记录等。

7. 查询任务:使用Task API可以查询指定ID的任务节点信息,包括任务状态、处理人等。

8. 删除流程实例:当流程实例执行完毕或者需要终止流程时,可以使用Delete API删除流程实例。

以上是Activiti工作流的一些基础方法,它们提供了对流程定义、部署、执行和管理的全面支持,可以帮助您轻松实现工作流的自动化和管理。

activiti 数据库表结构

activiti 数据库表结构
Activiti是一个BPMN(Business Process Management Notation)工作流引擎,使用关系数据库存储流程定义、执行过程和用户任务等信息。

Activiti的数据库包括以下表结构:
1. ACT_RE_*:这些表包含流程定义(repository)信息,包括流程定义的描述、版本、流程定义图等。

2. ACT_RU_*:这些表包含运行时(runtime)的流程实例信息,比如正在执行的流程实例、用户任务、定时器等。

这些表是Activiti的核心,主要用于执行和控制流程。

3. ACT_HI_*:这些表包含历史(history)数据,主要用于记录流程的执行历史,例如流程实例状态的变化、用户任务的完成情况等。

4. ACT_ID_*:这些表包含标识(identity)信息,包括用户、用户组、角色等。

5. ACT_GE_*:这些表包含常用的公共数据,例如任务的执行日志、异步任务的锁定等。

以上是Activiti数据库表结构的主要内容,不同版本的Activiti可能会有所差异。

在使用Activiti的过程中,需要在关系数据库中创建相应的表结构,并在Activiti
配置文件中指定数据库连接信息。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

工作流的定义Activiti的介绍Activiti的基本配置Activiti数据库表介绍什么是工作流(WorkFlow)工作流(Workflow),就是通过计算机对业务流程自动化执行管理。

它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。

比如员工请假,就是由:员工申请、主管审批、人事确认等工作流程组成,在软件系统中这套流程就被看作一个工作流。

各种企业和事业机构都有可能用到工作流,如:关键业务:订单、报价处理、采购处理、合同审核、客户电话处理、供应链管理等行政管理:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。

人事管理:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。

财务相关:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等。

客户服务:客户信息管理、客户投诉、请求处理、售后服务管理等。

特殊服务:ISO系列对应流程、质量管理对应流程、产品数据信息管理、贸易公司报关处理、物流公司货物跟踪处理等各种通过表单逐步手工流转完成的任务均可应用工作流软件自动规范地实施。

什么是ActivitiActiviti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术实现。

创始人Tom Baeyens是JBoss jBPM的项目架构师,以及另一位架构师Joram Barrez,一起加入到创建Alfresco这项首次实现Apache开源许可的BPMN 2.0引擎开发中来。

Activiti是一个独立运作和经营的开源项目品牌,并将独立于Alfresco开源ECM系统运行。

Activiti 将是一种轻量级,可嵌入的BPM引擎,而且还设计适用于可扩展的云架构。

Activiti将提供宽松的Apache 许可2.0,以便这个项目可以广泛被使用,同时促进Activiti BPM引擎和BPMN 2.0的匹配,该项目现正由OMG通过标准审定。

加入Alfresco Activiti项目的是VMware的SpringSource分支,Alfresco的计划把该项目提交给Apache基础架构,希望吸引更多方面的BPM专家和促进BPM的创新。

Activiti的基本配置开发环境:IDEA + Maven + Activiti6.01、Idea安装Activiti插件打开Idea 选择File->settings->plugings->点击选择Browse repositories然后在搜索框输入:actiBPM,看到如下窗体,未安装的情况下会出现Install按钮,点击按钮安装插件,然后重启Idea。

2、点击File->New->Project选择Maven项目(IDEA和Maven的配置可以参考:https:///article/a3a3f811cd5f0b8da2eb8abf.html)在Maven的项目模板中选择webapp,创建项目3、引入相关的包,activiti的数据库操作由mybatis实现,还需要依赖spring框架进行配置,数据库这里我们使用MySQL以及c3p0连接池。

在pom.xml的dependencies中添加:<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.40</version></dependency><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.11.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>4.3.11.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.3.11.RELEASE</version></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency><!-- https:///artifact/org.activiti/activiti-engine --> <dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>6.0.0</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring</artifactId><version>6.0.0</version></dependency>4、添加配置文件,在项目的resources文件中添加配置文件:1、配置log4j日志文件log4j.propertieslog4j.rootLogger=INFO,Console#Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderyout=org.apache.log4j.PatternLayoutyout.ConversionPattern=%-5p - %m%n2、Activiti的核心配置文件:activiti.cfg.xml,注意:这个文件名会由Activiti框架自动识别,所以不要写错。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans.xsd/schema/context/schema/context/spring-context.xsd"><!-- 配置数据库连接池--><bean id="dataSource" class="boPooledDataSource"><property name="driverClass" value="com.mysql.jdbc.Driver"/><propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/act?useUnicode=true&amp;characterEncodin g=UTF-8&amp;useSSL=true"/><property name="user" value="root" /><property name="password" value="123456"/></bean><!-- 配置事务管理--><beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- Activiti的配置--><beanid="processEngineConfiguration"class="org.activiti.spring.SpringProcessEngineConfiguration"><property name="dataSource" ref="dataSource"/><property name="transactionManager" ref="transactionManager"/><property name="databaseSchemaUpdate" value="true"/></bean><!--配置工厂,用于创建流程引擎id必须为processEngine--><bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"><propertyname="processEngineConfiguration" ref="processEngineConfiguration"/> </bean></beans>Activiti数据库表介绍单元测试:1、在项目的src目录上右键->New->Directory添加test目录,2、点击test目录右键选择Mark Directory As--> Test Source Directory3、添加单元测试类ActivitiTest/*** 工作流单元测试*/public class ActivitiTest {@Testpublic void testInitActiviti(){//获得流程引擎,自动读取activiti.cfg.xml中的配置ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();}}4、运行单元测试,会在MySQL的act数据库中创建23张表所有表都是以act开头, ACT_RE_*: 'RE'表示repository。

相关文档
最新文档