一、简介
Activiti是一个开源的工作流引擎,它实现了BPMN 2.0规范,可以发布设计好的流程定义,并通过api进行流程调度。Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这些服务,开发人员能够构建出功能丰富、轻便且高效的 BPM 应用程序。
总所周知,Activiti的创始人也就是JBPM(也是一个优秀的BPM引擎)的创始人,从Jboss离职后开发了一个新的BPM引擎:Activiti。所以,Activiti有很多地方都有JBPM的影子。对比两者,无非都是获取流程引擎,然后得到相应的服务接口,从而通过服务接口实现对应的服务!思想理念几乎一致!
二、核心类
ProcessEngineConfiguration:
public static final String DB_SCHEMA_UPDATE_FALSE = "false";
public static final String DB_SCHEMA_UPDATE_CREATE_DROP = "create-drop";
public static final String DB_SCHEMA_UPDATE_TRUE = "true";
protected String processEngineName = ProcessEngines.NAME_DEFAULT;
protected int idBlockSize = 100;
protected String history = HistoryLevel.AUDIT.getKey();
protected boolean jobExecutorActivate;
protected String mailServerHost = "localhost";
protected String mailServerUsername; // by default no name and password are provided, which
protected String mailServerPassword; // means no authentication for mail server
protected int mailServerPort = 25;
protected boolean useSSL = false;
protected boolean useTLS = false;
protected String mailServerDefaultFrom = "activiti@localhost";
protected String databaseType;
protected String databaseSchemaUpdate = DB_SCHEMA_UPDATE_FALSE;
protected String jdbcDriver = "org.h2.Driver";
protected String jdbcUrl = "jdbc:h2:tcp://localhost/activiti";
protected String jdbcUsername = "sa";
protected String jdbcPassword = "";
protected String dataSourceJndiName = null;
protected boolean isDbIdentityUsed = true;
protected boolean isDbHistoryUsed = true;
protected HistoryLevel historyLevel;
protected int jdbcMaxActiveConnections;
protected int jdbcMaxIdleConnections;
protected int jdbcMaxCheckoutTime;
protected int jdbcMaxWaitTime;
protected boolean jdbcPingEnabled = false;
protected String jdbcPingQuery = null;
protected int jdbcPingConnectionNotUsedFor;
protected int jdbcDefaultTransactionIsolationLevel;
protected DataSource dataSource;
protected boolean transactionsExternallyManaged = false;
protected String jpaPersistenceUnitName;
protected Object jpaEntityManagerFactory;
protected boolean jpaHandleTransaction;
protected boolean jpaCloseEntityManager;
流程引擎配置,通过其源码可以看出默认使用的数据库是h2,持久化实现使用的Mybatis,通过Get/Set来设置数据库
@Test
public void test01(){
ProcessEngineConfiguration configuration=ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
//设置数据库连接信息
configuration.setJdbcDriver("com.mysql.jdbc.Driver");
configuration.setJdbcPassword("root");
configuration.setJdbcUsername("root");
configuration.setJdbcUrl("jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=UTF-8");
//设置数据库创建规则,是先删除在创建
configuration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
ProcessEngine processEngine =configuration.buildProcessEngine();
System.out.println(processEngine);
}
ProcessEngine:
public interface ProcessEngine extends EngineServices {
public static String VERSION = "5.13";
String getName();
void close();
}
流程引擎,继承EngineService接口。Activiti的一切服务都是基于流程引擎进行的,这和JBPM没有什么区别。
EngineService:
public interface EngineServices {
RepositoryService getRepositoryService();
RuntimeService getRuntimeService();
FormService getFormService();
TaskService getTaskService();
HistoryService getHistoryService();
IdentityService getIdentityService();
ManagementService getManagementService();
}
ProcessEngine的父类,ProcessEngine获取的一切服务其实都是通过该接口进行获取的;通过该接口可以获取Activiti的封装的各种服务接口!
三、各类服务
RepositoryService:
Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如BPMN2.0 XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的Repository中。RepositoryService提供了对 repository的存取服务。简单的来说,通过该接口,可以实现流程部署
RuntimeService:
在Activiti中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。RuntimeService提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
TaskService:
在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
IdentityService:
Activiti中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的Task。IdentityService提供了对Activiti 系统中的用户和组的管理功能。
ManagementService:
ManagementService提供了对Activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于Activiti系统的日常维护。
HistoryService:
HistoryService用于获取正在运行或已经完成的流程实例的信息,与RuntimeService中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
四、总体流程
1、通过activiti.cfg.xml来拿到数据库连接的信息,创建一个默认的流程引擎
2、流程引擎获取getRepositoryService,然后创建createDeployment然后加载bpmn文件和png图片,部署一个流程
3、部署好流程之后,通过流程引擎获取getRuntimeService,然后启动流程实例
4、如果需要其他的服务,通过流程引擎获取对应的服务接口,调用对应的接口方法即可!