关于学习Activiti的过程:直接使用官方文档进行学习,希望会有好的效果。
一.首先是现在官方的包,在其中拿到activiti-explorer.war包,将其部署到tomcate下进行访问,看看需要新学习的是一个什么东东。了解一个大概,在这其中可以看看随意别人博客中写的对Activiti的理解。
二.进入学习:
介绍ProcessEngineConfiguration的初始化,首先可以将其写为一个activiti.cfg.xml的配置文件,配置其一系列的属性。当然这一切都可以在java中写一个类去初始化。当然我们还可以交给spring,依赖注入帮我们初始化。
1).java初始化如下:可以用不同的初始化类或者将配置信息放到(activiti.cfg.xml)进行初始化
/*ProcessEngineConfiguration.createProcessEngineConfigurationFromResourceDefault();
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource);
ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(String resource, String beanName);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream);
ProcessEngineConfiguration.createProcessEngineConfigurationFromInputStream(InputStream inputStream, String beanName);
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")
.setAsyncExecutorEnabled(true)
.setAsyncExecutorActivate(false)
.buildProcessEngine();
2).spring 配置如下:
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<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="asyncExecutorEnabled" value="true" />
<property name="asyncExecutorActivate" value="false" />
<property name="mailServerHost" value="mail.my-corp.com" />
<property name="mailServerPort" value="5025" />
</bean>
</beans>
三.构造ProcessEngine Bean(有多个类可以创建,适用于不同的环境中)
activiti.cfg,必须包含一个xml bean id“processEngineConfiguration” <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
org.activiti.engine.impl.cfg。StandaloneProcessEngineConfiguration:流程引擎中使用一个独立的方法。Activiti会照顾的事务。默认情况下,数据库才会在发动机启动时检查(和抛出异常,如果没有Activiti模式或模式版本是错误的)。
org.activiti.engine.impl.cfg。StandaloneInMemProcessEngineConfiguration:这是一个方便的类进行单元测试。Activiti会照顾的事务。默认使用一个H2内存数据库。时将创建和删除数据库引擎靴子和关闭。
当使用这个,可能不需要额外的配置(除了当使用例如作业执行器或邮件功能)。
org.activiti.spring.SpringProcessEngineConfiguration:当使用流程引擎中使用Spring的环境。有关更多信息,请参见Spring集成部分。
org.activiti.engine.impl.cfg。JtaProcessEngineConfiguration:使用引擎运行时在独立模式下,JTA事务。
四.数据库的配置:有两种方式初始化数据库信息,avtiviti会选择直接用jdbc ,支持的数据库有 h2 mysql oracle postgres db2 mssql
1).构建基于提供的数据源JDBC属性将会默认MyBatis连接池设置。下面的属性可以被设置为调整连接池(取自MyBatis文档):
jdbcMaxActiveConnections: 活动连接,连接池的数量最多可以包含在任何时间。默认的是10
jdbcMaxIdleConnections: 空闲连接,连接池的数量最多可以包含在任何时间。
jdbcMaxCheckoutTime: 以毫秒为单位的时间可以检查从连接池中连接之前,有力地回来了。默认是20000(20秒)。
jdbcMaxWaitTime: 这是低水平设置,使池中有机会打印日志的连接状态和re-attempt收购情况采取不同寻常的长(为了避免失败永远默默地如果池配置错误的)默认是20000(20秒)。
2).还有就是使用dataSource
<bean id="dataSource" class="org.apache.commons.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" />
...
两种方式都可以使用以下属性:
databaseType:一般不需要指定这个属性是自动从数据库连接元数据分析。应该只被指定,以防自动检测失败。可能的值:{ h2、mysql、甲骨文、postgres,该软件,db2 }。这个属性是必需的,当不使用默认的H2数据库。
这个设置将决定哪个创建/删除脚本将使用和查询。请查看受支持的数据库部分支持哪些类型的概述。
databaseSchemaUpdate:允许设置策略来处理流程引擎启动和关闭的数据库模式。
false(缺省值):检查DB模式对库的版本流程引擎时被创建并抛出一个异常,如果版本不匹配。
true:在构建流程引擎,执行检查和更新模式的性能
create-drop:创建模式时,流程引擎时被创建和滴模式流程引擎被关闭。
当然datasource可以选择jndi 使用如下:
1.将rest项目(也在下周的包内)activiti-webapp-explorer2/src/main/webapp/WEB-INF/activiti-standalone-context.xml 和 activiti-webapp-rest2/src/main/resources/activiti-context.xml 下的dbProperties 和 dataSource 这两个Bean删除 增加
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/activitiDB"/>
</bean>
接下来,我们需要添加上下文。xml文件包含默认H2配置。这些将由您的JNDI配置覆盖,如果它的存在。Activiti Explorer,替换文件activiti-webapp-explorer2 / src / main / webapp / meta - inf /上下文。xml包含以下:
<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休息webapp,添加activiti-webapp-rest2 / src / main / webapp / meta - inf /上下文。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需要用到的表
1.最简单的方法:1)activiti-engine jar添加到类路径中
2)添加一个合适的数据库驱动程序
3)添加一个Activiti配置文件(activiti.cfg.xml)到您的类路径,指向您的数据库(参见数据库配置部分)
4)执行DbSchemaCreate类的主要方法
2.也可以直接执行sql创建:Activiti的SQL DDL语句可以找到下载页面或在Activiti分布文件夹中,数据库中的子目录。脚本引擎也在jar(activiti-engine-x.jar),在包org/activiti/db/create(删除文件夹包含撤销语句)。
3.说明 1.引擎.引擎执行所需的表。必需的。
1.身份:表包含用户、组和会员的用户组。应该使用这些表是可选的,当使用附带的默认身份管理引擎。
2.历史:包含历史和审计信息的表。可选:不需要当历史级别被设置为空。请注意,这也将禁用某些功能(如评论任务)在历史数据库中存储数据。
4.表的含义
1. ACT_RE_ *:代表库。与此表前缀包含静态信息如流程定义和流程资源(图片、规则等)。
2. ACT_RU_ *:RU代表运行时。这些流程实例的运行时包含运行时数据的表,用户任务,变量,工作,等等。Activiti只存储运行时数据流程实例执行过程中,一个流程实例结束的时候和删除记录。这使运行时表小而快。
3. ACT_ID_ *:ID代表身份。这些表包含身份信息,如用户、团体等。
4. ACT_HI_ *:HI,代表历史。这些表包含历史数据,如过去的流程实例变量,任务等等。
5. ACT_GE_ *:一般数据,用于各种用例。
5.数据库升级问题:
<beans >
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- ... -->
<property name="databaseSchemaUpdate" value="true" /> <!-- 最好配置为false -->
<!-- ... -->
</bean>
</beans>
6. 从版本5.17.0 Activiti提供了一个异步执行程序以及作业执行器, ManagedJobExecutor 和 ManagedAsyncJobExecutor
7. Job executor 的激活
JobExecutor是一个组件,它管理几个线程火计时器(后来也异步消息)。对于单元测试场景,它是繁琐的处理多个线程。因此API允许查询(ManagementService.createJobQuery)和执行工作(ManagementService.executeJob)
通过API,这样的工作可以从内部控制执行单元测试。为了避免干涉作业执行器,它可以被关闭。 默认情况下,JobExecutor在流程引擎启动时被激活。如果不需要
<property name="jobExecutorActivate" value="false" />
8.Async executor 的激活
默认情况下,AsyncExecutor不启用和使用JobExecutor由于遗留原因。不过建议使用新的AsyncExecutor代替。可以通过定义两个属性
<property name="asyncExecutorEnabled" value="true" /> 启用异步执行器取代了旧的工作执行人
<property name="asyncExecutorActivate" value="true" /> 指示Activiti引擎启动异步执行器在启动时线程池。
9.可选的邮件服务配置 配置邮件服务器是可选的。在业务流程中Activiti支持发送电子邮件。发送一封电子邮件,一个有效的SMTP邮件服务器配置是必需的。看到电子邮件的任务配置选项
10.可选的历史配置 <property name="history" value="audit" />
11.暴露配置bean
12.部署缓存配置
1.根据实际情况设置:<property name="processDefinitionCacheLimit" value="10" />
2.实现 org.activiti.engine.impl.persistence.deploy.DeploymentCache
<property name="processDefinitionCache">
<bean class="org.activiti.MyCache" />
</property>
13.日志信息 如果没有实现jar添加,SLF4J将使用一个NOP-logger,不记录任何东西,除了一个警告,不会被记录。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
或者
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
</dependency>
14.配置日志的上下文映射 可以在log4j配置中添加
log4j.appender.consoleAppender.layout.ConversionPattern =ProcessDefinitionId=%X{mdcProcessDefinitionID}
executionId=%X{mdcExecutionId} mdcProcessInstanceID=%X{mdcProcessInstanceID} mdcBusinessKey=%X{mdcBusinessKey} %m%n"
15.事件处理器 org.activiti.engine.delegate.event.ActivitiEvent的子类型。事件暴露了(如果可用)类型,executionId,processInstanceId processDefinitionId。
1)事件监听的实现
public class MyEventListener implements ActivitiEventListener {
@Override
public 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());
}
}
@Override
public boolean isFailOnException() { //建议return false
// The logic in the onEvent method of this listener is not critical, exceptions
// can be ignored if logging fails...
return false;
}
}
或者可以使用 org.activiti.engine.delegate.event。BaseEntityEventListener:一个事件监听器的基类,它可以用来进行侦听实体相关的事件为一个特定类型的实体或实体。它隐藏了类型检查和提供了4种方法,
应该覆盖:onCreate(. .),onUpdate(. .)和onDelete(. .)创建一个实体时,更新或删除。进行所有其他实体相关的事件,onEntityEvent(. .)。
2)配置和设置
下面的代码片段添加一个事件监听器的配置通知派遣任何事件时,无论它的类型:
<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
...
<property name="eventListeners">
<list>
<bean class="org.activiti.engine.example.MyEventListener" />
</list>
</property>
</bean>
下面的代码片段添加一个事件监听器的配置,这是当工作执行成功或失败的通知:
<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>
3)添加侦听器在运行时 可以添加和删除额外的事件监听器引擎通过使用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);
4)添加侦听器过程定义
5)调度事件通过API
6)支持的事件类型 如下:对应org.activiti.engine.delegate.event.ActivitiEventType.的枚举
ENGINE_CREATED ENGINE_CLOSED ENTITY_CREATED ENTITY_INITIALIZED ENTITY_UPDATED ENTITY_DELETED ENTITY_SUSPENDED ENTITY_ACTIVATED 等
六. The Activiti API
1. 流程引擎API和服务
七.Spring 的集成
八.部署
九.BPMN 2.0介绍
十.BPMN 2.0的结构
十一.JPA
十二.History
十三.Activiti Explorer
十四.Activiti Modeler
十五.REST API
十六.CDI集成
十七.LDAP 集成
十八.模拟与Activiti-Crystalball(实验)
十九.工具JMX
Activiti
最新推荐文章于 2024-10-01 23:26:38 发布