本文转自http://yy629.iteye.com/blog/671192
jbmp4.3 整合spring, 配置文件只注入processEngine 就没问题。
但是如果注入repositoryService , taskService等就会出现 Is there an unresolvable circular reference?
- <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
- <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
但注入repositoryService:
- <bean id="repositoryService" factory-bean="processEngine"
- factory-method="getRepositoryService" />
就报如下错误
Error creating bean with name 'repositoryService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public final org.jbpm.api.RepositoryService org.jbpm.pvm.internal.processengine.SpringProcessEngine$$EnhancerByCGLIB$$66ea6eb4.getRepositoryService()] threw exception; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'repositoryService': Requested bean is currently in creation: Is there an unresolvable circular reference?
分析原因是SpringProcessEngine.getRepositoryService会调用getBean的, 出现循环引用的错误
- // SpringProcessEngine中的方法, getRepositoryService,getTaskService,等都是最终调用这个方法的
- public <T> T get(Class<T> type) {
- String[] names = applicationContext.getBeanNamesForType(type);
- if (names.length >= 1) {
- if (names.length > 1 && log.isWarnEnabled()) {
- log.warn("Multiple beans for type " + type + " found. Returning the first result.");
- }
- return (T) applicationContext.getBean(names[0]); // 会出现循环引用错误
- }
- return super.get(type);
- }
解决方案就是
方法1就是
- <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />
- <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />
- <bean id="processEngineWireContext" factory-bean="processEngine" factory-method="getProcessEngineWireContext" />
- <bean id="repositoryService" factory-bean="processEngineWireContext" factory-method="get">
- <constructor-arg>
- <value type="java.lang.Class">org.jbpm.api.RepositoryService</value>
- </constructor-arg>
- </bean>
方法2就是在写个工厂类, 通过processEngineWireContext构造出一个工厂类, 工厂类中有getRepositoryService,getTaskService等方法
相关推荐
将 Activiti 集成到 Spring 中可以充分利用 Spring 的强大功能,实现流程定义、执行、监控等流程管理任务的灵活配置。 在集成 Activiti 和 Spring 时,首先需要确保项目中包含所有必要的 jar 包。这些 jar 包通常...
将jBPM4与Spring整合,可以充分利用Spring的依赖注入和管理能力,提升jBPM4的可维护性和灵活性。本文将详细介绍两种整合jBPM4与Spring的方法。 **方法一:基于Spring的Bean定义** 1. **配置jBPM4的数据源**:在...
5. **应用场景**:Spring与Activiti的整合广泛应用于企业管理、订单处理、审批流程、客户服务等领域,提供了一种图形化的方式定义和控制业务流程,使得非技术人员也能理解和调整流程。 6. **最佳实践**: - 使用...
在与Spring框架整合时,可以充分利用Spring的依赖注入和管理能力,提高应用的可维护性和灵活性。本篇文章将详细探讨Flowable如何与Spring进行整合,以及实现的七大接口自动注入的相关知识点。 1. **整合准备** 在...
1. 配置Spring:引入JBPM的库,并在Spring配置文件中声明流程管理相关的bean,如ProcessEngine、RepositoryService等。 2. 集成JBPM:通过Spring的JdbcTemplate或JPA实现数据库连接,配置jbpm-datasource.xml文件,...
接下来,我们需要配置 Activiti 的服务,如 RepositoryService、RuntimeService、TaskService 等,以便在 Spring 环境中使用: ```xml <bean id="repositoryService" factory-bean="processEngine" factory-method=...
在`JBPM5Spring`项目中,通常会有一个`spring-context.xml`配置文件,这里会定义数据源、事务管理器、jbpm的工作流服务等。例如,数据源配置可能如下: ```xml <bean id="dataSource" class="org.springframework....
创建或更新Spring配置文件(如 applicationContext.xml),在这里定义Jbpm所需的bean,如流程引擎工厂(ProcessEngineFactoryBean)、流程定义仓库(RepositoryService)、任务服务(TaskService)等。 2. **定义...
在Spring Boot应用中,你可以创建一个`@Configuration`类来配置Activiti的相关Bean,如`ProcessEngine`, `RepositoryService`, `RuntimeService`等。同时,使用`@EnableActiviti`注解开启Activiti支持。通过`@...
在企业级应用开发中,将 Activiti 集成到 Spring 框架中是非常常见的做法,因为 Spring 提供了丰富的功能和良好的企业级服务支持,能够帮助开发者更方便地管理流程实例。 在"activiti-engine-5.6 与 spring集成"这...
- 使用Spring的Context配置文件来声明和管理JBPM的相关bean,如SessionFactory、RepositoryService等。 - 实现工作流服务的接口,如监听器、服务任务等,以定制工作流行为。 - 利用Spring的AOP支持,为工作流的...
创建一个Spring配置类,配置Activiti的流程引擎,包括数据库连接、事务管理、历史服务等。 ```java @Configuration public class ActivitiConfig { @Autowired private DataSource dataSource; @Bean public ...
- 配置Spring:配置Spring上下文以加载Activiti的bean,如`ProcessEngine`、`RepositoryService`等。 - 创建流程定义:在`src`目录下的资源文件中,编写BPMN 2.0 XML文件定义工作流程。 - 启动流程:在Spring环境...
Spring配置文件中会配置Activiti的相关bean,如ProcessEngine、RepositoryService、RuntimeService等,用于启动流程、保存流程定义和执行流程实例。 3. `src/main/webapp`:可能包含Web应用的界面资源,如请假申请...
在本项目中,我们关注的是将 Activiti 与 SpringBoot 2.x 整合,并解决在集成过程中遇到的 SpringBootSecurity 禁用问题。首先,让我们深入了解一下这些技术及其整合的意义。 **Activiti** Activiti 是一个开源的...
Spring Activiti 是一个高度灵活且强大的工作流引擎,它与Spring框架紧密结合,为Java开发者提供...通过学习和理解这些代码,你可以掌握如何在实际项目中有效地利用Spring Activiti来实现高效、可维护的业务流程管理。
在Spring的配置文件(如`applicationContext.xml`)中,需要定义jBPM的相关bean,如流程引擎(`ProcessEngine`)、流程仓库(`RepositoryService`)、流程定义(`DeploymentService`)、流程实例(`RuntimeService`...
3. 初始化RepositoryService、RuntimeService、TaskService等核心服务,用于执行流程操作。 六、流程定义与部署 1. 使用Activiti提供的模型编辑工具(如Eclipse BPMN2插件),设计流程图。 2. 将流程定义文件(....
这种方式不仅使流程定义更加灵活,而且能够利用Spring的其他特性,如AOP、IoC等,提高代码的可维护性和复用性。同时,由于所有配置都在Spring容器中进行,整个系统的扩展性和可测试性也得到了显著提升。