Activiti工作流框架:ProcessEngines.getDefaultProcessEngine()为null解决方案

可能原因1:Activiti的配置文件名称或路径出错

通过如下方法获取的流程引擎对象,需要保证Activiti配置文件名称为"activiti.cfg.xml"并且位于classpath下(可参考Activiti源码)。
// 创建流程引擎
 ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
如图所示为java project的目录结构,按照某些教程把activiti.cfg.xml放在了新建的resource文件夹下,但是resource并不是资源文件夹也是会出错,这时应该右键resource文件夹->build path->use as source folder指定为资源目录(右上角出现"#"图案)。

Activiti工作流框架:ProcessEngines.getDefaultProcessEngine()为null解决方案_第1张图片

可能原因2:jar包缺失

只简单添加了 activiti/libs 目录下的所有jar包以及log4j、slf4j相关包

缺少mysql驱动包
缺少spring-beans、spring-core相关包
缺少mybatis相关包
缺少commons-xxx相关包
缺少juel相关包
缺少jackson相关包
...
建议将 activiti/wars/中的某个war包解压,导入其中lib下的所有Jar包,缺少包会报ClassNotFoundException,再根据情况添包。附上lib图:

Activiti工作流框架:ProcessEngines.getDefaultProcessEngine()为null解决方案_第2张图片

其它原因:配置文件内容有误或没有事先建立配置文件指向的数据库(数据库服务要开启)

(1)在activiti.cfg.xml配置文件中,添加了 去掉该属性试试。
(2)检查databaseSchemaUpdate配置是否与数据库表存在冲突?

测试源代码

package com.bo.activiti;

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.activiti.engine.task.Task;

public class First {
	public static void main(String[] args){
		// 创建流程引擎
 		ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//		ProcessEngine processEngine = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource("activiti.cfg.xml").buildProcessEngine();
		System.out.println(processEngine);
		// 得到流程存储服务组件
		RepositoryService repositoryService = processEngine.getRepositoryService();
		// 得到运行时服务组件
		RuntimeService runtimeService = processEngine.getRuntimeService();
		// 获取流程任务组件
		TaskService taskService = processEngine.getTaskService();
		// 部署流程定义文件
		repositoryService.createDeployment().addClasspathResource("bpmn/first.bpmn").deploy();
		// 启动流程
		runtimeService.startProcessInstanceByKey("myProcess");
		// 查询第一个任务
		Task task = taskService.createTaskQuery().singleResult();
		System.out.println("第一个任务完成前,当前任务名称:"+task.getName());
		// 完成第一个任务
		taskService.complete(task.getId());
		// 查询第二个任务
		task = taskService.createTaskQuery().singleResult();
		System.out.println("第二个任务完成前,当前任务名称:"+task.getName());
		// 完成第二个任务(流程结束)
		taskService.complete(task.getId());
		task = taskService.createTaskQuery().singleResult();
		System.out.println("流程结束后,查找任务:" + task);
		
	}
}

流程定义配置文件:first.bpmn



  
    
    
    
    
    
    
    
  
  
    
      
        
      
      
        
      
      
        
      
      
        
      
      
        
        
      
      
        
        
      
      
        
        
      
    
  

流程定义设计图:

Activiti工作流框架:ProcessEngines.getDefaultProcessEngine()为null解决方案_第3张图片

Activiti配置文件:



	
	
	
		
		
		
		
		
		
	
	

程序运行结果:

log4j:WARN No appenders could be found for logger (org.activiti.engine.ProcessEngines).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
org.activiti.engine.impl.ProcessEngineImpl@11e32b6
第一个任务完成前,当前任务名称:Expense Request
第二个任务完成前,当前任务名称:Handle Request
流程结束后,查找任务:null

程序运行后数据库自动生成的28张表:

Activiti工作流框架:ProcessEngines.getDefaultProcessEngine()为null解决方案_第4张图片



你可能感兴趣的:(Activiti)