`

利用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等方法 

分享到:
评论

相关推荐

    jbpm4.4基本语法

    1.jbpm对象 1.1 ProcessEngine对象 1.2 RepositoryService对象 1.3 ExcutionService对象 ......

    【JeeSpringCloud v3.2.4】后台权限管理系统+互联网云快速开发框架+微服务分布式代码生成

    代码生成前端界面、底层代码(spring mvc、mybatis、Spring boot、Spring Cloud、微服务的生成)、安全框架、视图框架、服务端验证、任务调度、持久层框架、数据库连接池、缓存框架、日志管理、IM等核心技术。...

    【JeeSpringCloud v3.2.4】后台权限管理系统+互联网云快速开发框架+微服务分布式代码生成.zip

    代码生成前端界面、底层代码(spring mvc、mybatis、Spring boot、Spring Cloud、微服务的生成)、安全框架、视图框架、服务端验证、任务调度、持久层框架、数据库连接池、缓存框架、日志管理、IM等核心技术。...

    jbpm4服务接口方法汇总

    RepositoryService reporsityService = processEngine.getRepositoryService(); ExecutionService executionService=processEngine.getExecutionService(); TaskService taskService=processEngine....

    activiti5.22 流程设计器集成到springboot项目中遇到的找不到各种service的问题

    集成设计器到springboot项目 在网上找了很多帖子都配置到项目中一直提示我的repositoryService啥的 也是郁闷了一会 后来才发现之前在普通三层项目里面都是在配置文件里面配置的 现在是直接一个类里面配置

    工作流中注入不了service

    activiti中想要注入自己的service 或者activiti的service

    JeeSpringCloud后台权限管理系统-其他

    代码生成前端界面、底层代码(spring mvc、mybatis、Spring boot、Spring Cloud、微服务的生成)、安全框架、视图框架、服务端验证、任务调度、持久层框架、数据库连接池、缓存框架、日志管理、IM等核心技术。...

    ActivitiDemo.rar

    activiti 工作流简单案例,流程引擎对象processEngine对象(所有操作都离不开引擎对象) 由流程引擎创建各个service,这些service是调用工作流23张表到服务 repositoryService--管理流程定义 runtimeService--执行...

    Activiti6.0教程例子下载

    RepositoryService提供了对 repository的存取服务。 3. RuntimeService:在Activiti中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。RuntimeService提供了启动流程、查询流程实例、设置获取...

    xmljava系统源码-Activiti:SpringBoot2.0&Activiti6.0

    RepositoryService: Activiti 中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据 ( 例如 BPMN2.0 XML 文件,表单定义文件,流程定义图像文件等 ),这些文件都存储在 Activiti 内建的 ...

    Activiti工作流面试相关知识

    Activiti 工作流面试相关知识 RepositoryService、RuntimeService、TaskService、HistoryService分别表示什么操作

    activiti部署中文乱码解决,亲测有效,替换三个文件

    activiti部署中文乱码解决,亲测有效, 1.activiti-webapp-explorer2\src\main\webapp\editor-app\i18n下en.json 2.activiti-webapp-explorer2\src\main\resources下 activiti-custom-context.xml ...

    activiti数据库设计.docx

    ACT_RE_*: 'RE'表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等)。 ACT_RU_*: 'RU'表示runtime,运行时表-RuntimeService。这是...

    repository.js:mPulseCloudTest存储库REST APIJavaScript(Node.js)包装器

    创建,读取,更新和删除存储库对象。 读取,写入和删除种子数据。 现在支持网络环境! 所有方法都遵循Node.js约定,该约定接受带有签名function(error, response)的回调。 还提供基于承诺的API(请参见下文)。 ...

    javaee三大框架整合宅急送项目lib包

    org.springframework.dao.DataIntegrityViolationException: could not delete: [org.jbpm.pvm.internal.model.ExecutionImpl#50001]; SQL [delete from JBPM4_EXECUTION where DBID_=? and DBVERSION_=?]; ...

    query-example:Camunda示例查询

    query-example:Camunda示例查询

    jbpm4.4学习笔记

    5.2RepositoryService 15 5.3ExecutionService 16 5.4TaskService 16 5.5ProcessDefinition 16 5.6ProcessInstance 16 5.7Execution 17 6 管理流程定义 18 6.1设计流程定义文档 18 6.1.1图片 18 6.1.2jpdl.xml文件 ...

    exo-sonar-rules:SonarQube 的第一个 eXo 自定义 Java 规则

    它检查没有调用 RepositoryService.getDefaultRepository()包装 mvn clean package这将在目标文件夹中生成一个 jar 文件。用法只需将 jar 文件复制到 SonarQube 安装的 /extensions/plugin 文件夹中。 注意:此示例...

    Activiti工作流笔记.chm

    5.2:RepositoryService 13 5.3:RuntimeService 14 5.4:TaskService 14 5.5:HistoryService 14 5.6:ProcessDefinition 14 5.7:ProcessInstance 14 5.8:Execution 14 6:HelloWorld程序(模拟流程的执行) 16 ...

Global site tag (gtag.js) - Google Analytics