之前一直以为集成Activit很麻烦,实际上非常简单。
说麻烦,也确实麻烦,因为试了很多方法,都没能成功。
说简单,是因为找对了相关资料。参考资料:JFinal集成Activiti流程引擎(不使用Spring)
主要说下具体步骤吧。主要只要三步就好了。
第一步,导入activiti相关的jar包。(这里没导入数据源相关的包,因为之前jfinal中已经使用了druid)
这个之前资料没有详细介绍。下面截图中的jar包是我自己慢慢加jar试验出来的。之后使用发现缺包在继续加。
第二步,启动activiti引擎。使用插件的方式启动activiti。
package com.xpl.jfinal.plugin;
import javax.sql.DataSource;
import org.activiti.engine.FormService;
import org.activiti.engine.HistoryService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.ManagementService;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.apache.log4j.Logger;
import com.jfinal.plugin.druid.DruidPlugin;
import com.xpl.util.ConfigUtil;
public class ActivitiPlugin extends DruidPlugin{
private static final Logger logger = Logger.getLogger("");
public ActivitiPlugin(String url, String username, String password) {
super(url, username, password);
}
private static ProcessEngine processEngine = null;
private static ProcessEngineConfiguration processEngineConfiguration = null;
private boolean isStarted = false;
@Override
public boolean start(){
try {
createProcessEngine();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
}
@Override
public boolean stop() {
ProcessEngines.destroy();
isStarted = false;
return true;
}
private Boolean createProcessEngine() {
// System.out.println("开始启动流程引擎.......");
if (isStarted) {
return true;
}
processEngineConfiguration = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
// conf.setDatabaseSchema("cwbase35_9999");//针对oracle数据库
processEngineConfiguration.setDataSource(getDataSource())
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.setDbHistoryUsed(true);
processEngineConfiguration.setTransactionsExternallyManaged(true); // 使用托管事务工厂
// conf.setTransactionFactory(new ActivitiTransactionFactory());
processEngine = processEngineConfiguration.buildProcessEngine();
isStarted = true;
//开启流程引擎
// System.out.println("启动流程引擎成功.......");
logger.info("流程引擎启动成功!");
return isStarted;
}
@Override
public DataSource getDataSource() {
DataSource dc = super.getDataSource();
if(dc == null){
super.start();
dc = super.getDataSource();
}
return dc;
}
// 开启流程服务引擎
public static ProcessEngine buildProcessEngine() {
if (processEngine == null){
if (processEngineConfiguration != null) {
processEngine = processEngineConfiguration.buildProcessEngine();
}
}
return processEngine;
}
public static FormService getFormService(){
return processEngine == null ? null : processEngine.getFormService();
}
public static HistoryService getHistoryService(){
return processEngine == null ? null : processEngine.getHistoryService();
}
public static IdentityService getIdentityService(){
return processEngine == null ? null : processEngine.getIdentityService();
}
public static ManagementService getManagementService(){
return processEngine == null ? null : processEngine.getManagementService();
}
public static RepositoryService getRepositoryService(){
return processEngine == null ? null : processEngine.getRepositoryService();
}
public static RuntimeService getRuntimeService(){
return processEngine == null ? null : processEngine.getRuntimeService();
}
public static TaskService getTaskService(){
return processEngine == null ? null : processEngine.getTaskService();
}
public static void main(String[] args) {
System.out.println("开始启动流程引擎.......");
try{
ProcessEngineConfiguration conf = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration();
// conf.setDatabaseSchema("cwbase35_9999");
ActivitiPlugin ap = new ActivitiPlugin(ConfigUtil.getValue("activiti.jdbcUrl")
,ConfigUtil.getValue("activiti.user"), ConfigUtil.getValue("activiti.password"));
conf.setDataSource(ap.getDataSource())
.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE)
.setDbHistoryUsed(true);
conf.setTransactionsExternallyManaged(true); // 使用托管事务工厂
// conf.setTransactionFactory(new ActivitiTransactionFactory());
ProcessEngine processEngine = conf.buildProcessEngine();
//开启流程引擎
System.out.println("启动流程引擎成功.......");
}catch (RuntimeException e) {
e.printStackTrace();
}finally {
System.out.println("结束.......");
}
}
}
第三步,注册插件。JFinalConfig实现类中注册插件。
/**
* 配置插件
*/
public void configPlugin(Plugins me) {
//配置主数据库
//.....
//activiti流程引擎注册
me.add(new ActivitiPlugin(PropKit.get("activiti.jdbcUrl")
,PropKit.get("activiti.user"), PropKit.get("activiti.password")));
}