`

利用spring产生repositoryService 等服务对象遇到的问题

阅读更多

本文转自http://yy629.iteye.com/blog/671192

 

jbmp4.3 整合spring, 配置文件只注入processEngine 就没问题。 
但是如果注入repositoryService , taskService等就会出现 Is there an unresolvable circular reference? 

Xml代码  收藏代码
  1. <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />  
  2. <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />  



但注入repositoryService: 

Xml代码  收藏代码
  1. <bean id="repositoryService" factory-bean="processEngine"  
  2. 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的, 出现循环引用的错误 

Java代码  收藏代码
  1. // SpringProcessEngine中的方法, getRepositoryService,getTaskService,等都是最终调用这个方法的  
  2. public <T> T get(Class<T> type) {  
  3.   String[] names = applicationContext.getBeanNamesForType(type);  
  4.     
  5.   if (names.length >= 1) {  
  6.       
  7.     if (names.length > 1 && log.isWarnEnabled()) {  
  8.       log.warn("Multiple beans for type " + type + " found. Returning the first result.");  
  9.     }  
  10.       
  11.     return (T) applicationContext.getBean(names[0]); // 会出现循环引用错误  
  12.   }  
  13.   
  14.   return super.get(type);  
  15. }  



解决方案就是 

方法1就是 

Xml代码  收藏代码
  1. <bean id="springHelper" class="org.jbpm.pvm.internal.processengine.SpringHelper" />   
  2. <bean id="processEngine" factory-bean="springHelper" factory-method="createProcessEngine" />  
  3.   
  4. <bean id="processEngineWireContext" factory-bean="processEngine" factory-method="getProcessEngineWireContext" />  
  5.   
  6. <bean id="repositoryService" factory-bean="processEngineWireContext" factory-method="get">  
  7.   <constructor-arg>  
  8.    <value type="java.lang.Class">org.jbpm.api.RepositoryService</value>  
  9.   </constructor-arg>  
  10. </bean>  



方法2就是在写个工厂类, 通过processEngineWireContext构造出一个工厂类, 工厂类中有getRepositoryService,getTaskService等方法 

分享到:
评论

相关推荐

    activiti集成spring所有jar

    将 Activiti 集成到 Spring 中可以充分利用 Spring 的强大功能,实现流程定义、执行、监控等流程管理任务的灵活配置。 在集成 Activiti 和 Spring 时,首先需要确保项目中包含所有必要的 jar 包。这些 jar 包通常...

    jBPM4与Spring整合的2种方式

    将jBPM4与Spring整合,可以充分利用Spring的依赖注入和管理能力,提升jBPM4的可维护性和灵活性。本文将详细介绍两种整合jBPM4与Spring的方法。 **方法一:基于Spring的Bean定义** 1. **配置jBPM4的数据源**:在...

    spring 整合 activiti工作流 相关jar包

    5. **应用场景**:Spring与Activiti的整合广泛应用于企业管理、订单处理、审批流程、客户服务等领域,提供了一种图形化的方式定义和控制业务流程,使得非技术人员也能理解和调整流程。 6. **最佳实践**: - 使用...

    flowable整合Spring

    在与Spring框架整合时,可以充分利用Spring的依赖注入和管理能力,提高应用的可维护性和灵活性。本篇文章将详细探讨Flowable如何与Spring进行整合,以及实现的七大接口自动注入的相关知识点。 1. **整合准备** 在...

    spring2_struts2_jbpm3.2.rar_jbpm struts2_jbpm-demo_jbpm3 spring_

    1. 配置Spring:引入JBPM的库,并在Spring配置文件中声明流程管理相关的bean,如ProcessEngine、RepositoryService等。 2. 集成JBPM:通过Spring的JdbcTemplate或JPA实现数据库连接,配置jbpm-datasource.xml文件,...

    activiti-explorer 与spring整合

    接下来,我们需要配置 Activiti 的服务,如 RepositoryService、RuntimeService、TaskService 等,以便在 Spring 环境中使用: ```xml &lt;bean id="repositoryService" factory-bean="processEngine" factory-method=...

    JBPM5 Spring 例子

    在`JBPM5Spring`项目中,通常会有一个`spring-context.xml`配置文件,这里会定义数据源、事务管理器、jbpm的工作流服务等。例如,数据源配置可能如下: ```xml &lt;bean id="dataSource" class="org.springframework....

    jbpm4.3-spring2.5整合

    创建或更新Spring配置文件(如 applicationContext.xml),在这里定义Jbpm所需的bean,如流程引擎工厂(ProcessEngineFactoryBean)、流程定义仓库(RepositoryService)、任务服务(TaskService)等。 2. **定义...

    spring boot2.1.1.RELEASE集成Activiti 6实战编程

    在Spring Boot应用中,你可以创建一个`@Configuration`类来配置Activiti的相关Bean,如`ProcessEngine`, `RepositoryService`, `RuntimeService`等。同时,使用`@EnableActiviti`注解开启Activiti支持。通过`@...

    activiti-engine-5.6 与 spring集成

    在企业级应用开发中,将 Activiti 集成到 Spring 框架中是非常常见的做法,因为 Spring 提供了丰富的功能和良好的企业级服务支持,能够帮助开发者更方便地管理流程实例。 在"activiti-engine-5.6 与 spring集成"这...

    JBPM与Spring集成开发指南.docx

    - 使用Spring的Context配置文件来声明和管理JBPM的相关bean,如SessionFactory、RepositoryService等。 - 实现工作流服务的接口,如监听器、服务任务等,以定制工作流行为。 - 利用Spring的AOP支持,为工作流的...

    Spring整合Activiti7

    创建一个Spring配置类,配置Activiti的流程引擎,包括数据库连接、事务管理、历史服务等。 ```java @Configuration public class ActivitiConfig { @Autowired private DataSource dataSource; @Bean public ...

    Activiti入门篇之二 Spring 与Activiti的入门整合

    - 配置Spring:配置Spring上下文以加载Activiti的bean,如`ProcessEngine`、`RepositoryService`等。 - 创建流程定义:在`src`目录下的资源文件中,编写BPMN 2.0 XML文件定义工作流程。 - 启动流程:在Spring环境...

    Spring-activiti.rar

    Spring配置文件中会配置Activiti的相关bean,如ProcessEngine、RepositoryService、RuntimeService等,用于启动流程、保存流程定义和执行流程实例。 3. `src/main/webapp`:可能包含Web应用的界面资源,如请假申请...

    activiti-springboot.zip

    在本项目中,我们关注的是将 Activiti 与 SpringBoot 2.x 整合,并解决在集成过程中遇到的 SpringBootSecurity 禁用问题。首先,让我们深入了解一下这些技术及其整合的意义。 **Activiti** Activiti 是一个开源的...

    Spring-activiti代码

    Spring Activiti 是一个高度灵活且强大的工作流引擎,它与Spring框架紧密结合,为Java开发者提供...通过学习和理解这些代码,你可以掌握如何在实际项目中有效地利用Spring Activiti来实现高效、可维护的业务流程管理。

    spring3.2+jBPM6整合实例

    在Spring的配置文件(如`applicationContext.xml`)中,需要定义jBPM的相关bean,如流程引擎(`ProcessEngine`)、流程仓库(`RepositoryService`)、流程定义(`DeploymentService`)、流程实例(`RuntimeService`...

    lhr-spring-mvc-activiti

    3. 初始化RepositoryService、RuntimeService、TaskService等核心服务,用于执行流程操作。 六、流程定义与部署 1. 使用Activiti提供的模型编辑工具(如Eclipse BPMN2插件),设计流程图。 2. 将流程定义文件(....

    提前试用spring 集成 jbpm4

    这种方式不仅使流程定义更加灵活,而且能够利用Spring的其他特性,如AOP、IoC等,提高代码的可维护性和复用性。同时,由于所有配置都在Spring容器中进行,整个系统的扩展性和可测试性也得到了显著提升。

Global site tag (gtag.js) - Google Analytics