非spring项目集成Activiti流程引擎(如jfinal)

之前一直以为集成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")));
	}

猜你喜欢

转载自blog.csdn.net/xiaozaq/article/details/91038138