### Activiti工作流详解
#### 一、简介
**Activiti**是一款开源的工作流引擎,用于简化业务流程的实现和管理。它支持基于BPMN 2.0标准的流程定义,并提供了强大的API来集成到各种Java应用程序中。Activiti不仅能够处理复杂的业务流程,还具备良好的扩展性和灵活性。
#### 二、架构概述
Activiti的核心架构由以下几个部分组成:
1. **Engine (核心引擎)**:负责执行流程实例和任务。
2. **Repository (存储库)**:存储流程定义和资源文件。
3. **Runtime (运行时)**:跟踪正在执行的流程实例。
4. **History (历史)**:保存已完成流程实例的历史数据。
5. **Task Service (任务服务)**:处理用户任务的创建、查询和管理。
6. **Form Service (表单服务)**:处理表单数据和表单提交。
#### 三、组件解析
- **Engine**: 这是Activiti的核心组件,负责解析流程定义并根据定义中的指令执行流程。
- **Repository**: 存储流程定义文件(通常为.bpmn或.xml格式)和相关的资源文件。
- **Runtime**: 跟踪当前正在执行的流程实例的状态。
- **History**: 记录已完成的流程实例的信息,方便进行审计和分析。
- **Task Service**: 处理用户任务,包括任务的分配、完成等操作。
- **Form Service**: 处理表单数据,支持动态生成表单和收集表单数据。
#### 四、与jBPM5的比较
- **设计理念**: Activiti强调简单易用,而jBPM5更侧重于提供丰富的特性。
- **性能**: Activiti在性能上进行了优化,适用于高并发场景。
- **社区支持**: 两者都有活跃的社区,但Activiti可能在某些方面更为活跃。
- **API**: Activiti提供了简洁的API,易于集成和开发。
#### 五、目录结构及环境要求
- **JDK版本**: JDK6+。
- **构建工具**: Ant1.8.1+。
- **Maven**: 配合JDK版本选择合适的Maven版本。
#### 六、配置文件
- **Acitiviti配置文件**: 主要包含数据库连接信息、流程定义路径等。
- **Maven配置**: 包括依赖管理和构建脚本等。
#### 七、HelloWorld示例
以一个简单的请假流程为例,展示如何配置和启动Activiti:
1. **数据库配置**: 在`db.properties`文件中设置数据库连接信息。
```properties
db=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/activiti?characterEncoding=utf8&serverTimezone=UTC
jdbc.username=root
jdbc.password=root
```
2. **使用JNDI配置**: 若要将ActivitiExplorer和ActivitiRest应用从`db.properties`转换为使用JNDI数据库配置,需要修改Spring配置文件(`activiti-webapp-explorer2/src/main/webapp/WEB-INF/activiti-standalone-context.xml` 和 `activiti-webapp-rest2/src/main/resources/activiti-context.xml`),并添加如下配置:
```xml
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/activitiDB"/>
</bean>
```
3. **context.xml文件**: 添加包含默认H2配置的`context.xml`文件,覆盖原有的数据库配置。例如,对于ActivitiExplorer应用:
```xml
<Context antiJARLocking="true" path="/activiti-explorer2">
<Resource auth="Container"
name="jdbc/activitiDB"
type="javax.sql.DataSource"
scope="Shareable"
description="JDBCDataSource"
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>
```
4. **删除db.properties**: 可以考虑删除不再使用的`db.properties`文件。
5. **JNDI配置**: JNDI数据库配置因Servlet容器的不同而异。以Tomcat为例,配置文件位于`$CATALINA_BASE/conf/[enginename]/[hostname]/[warname].xml`。
#### 八、总结
通过上述步骤,我们了解了Activiti的基本架构、组件以及如何进行简单的配置。Activiti以其高性能和易用性,在业务流程管理领域占据了一席之地。无论是初学者还是有经验的开发者,都可以轻松地利用Activiti来实现自己的业务流程需求。
评论0
最新资源