首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 企业软件 > 行业软件 >

解决jbpm4.4和spring多数据源的有关问题【转】

2012-06-29 
解决jbpm4.4和spring多数据源的问题【转】采用官方的解决方案,在单数据源下没有问题,但是在多数据源下,我们

解决jbpm4.4和spring多数据源的问题【转】
采用官方的解决方案,在单数据源下没有问题,但是在多数据源下,我们采用jotm的jta事务,当在一个事务之内既有操作平台的服务,又有操作jbpm的服务时,控制台上打印一下警告和错误。更为奇怪的是,如果在一个事务里先执行jbpm的数据库操作,在执行其他的数据操作,没有问题,反过来却不行,一头雾水啊。难道jbpm搞不清楚是哪个sessionfactory了。经过Google和长时间的分析,解决了该问题,现把方案分享一下。?问题:Multiple Spring beans found for type interface org.hibernate.SessionFactory returning the first one found一、扩展SpringHelper,添加setSessionFactory,指定sessionfactory注入

?
  1. public class ProcessEngineFactoryBean extends SpringHelper {
  2. ?
  3. protected SessionFactory sessionFactory;
  4. ?
  5. public void setSessionFactory(SessionFactory sessionFactory) {
  6. this.sessionFactory = sessionFactory;
  7. }
  8. ?
  9. public ProcessEngine createProcessEngine() {
  10. processEngine = new ConfigurationImpl().springInitiated(
  11. applicationContext).setResource(jbpmCfg)
  12. .setHibernateSessionFactory(sessionFactory)
  13. .buildProcessEngine();
  14. return processEngine;
  15. }
  16. ?
  17. }

?

  1. <!-- jbpm配置 cn.oecp.jbpm4.cfg.pvm.ProcessEngineFactoryBean上面已经定义-->
  2. <bean id="springHelper" class="com.dawn.jbpm4.cfg.pvm.ProcessEngineFactoryBean">
  3. <property name="jbpmCfg" value="com/dawn/jbpm4/cfg/jbpm.cfg.xml"></property>
  4. <property name="sessionFactory">
  5. <ref local="sessionFactory-jbpm" />
  6. </property>
  7. </bean>
?

二、其他配置省略,修改了jbpm.tx.spring.cfg.xml中spring事务拦截方式,这一步很关键,保证在一个事务管理器内

?

?
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. ?
  3. <jbpm-configuration spring="enabled">
  4. ?
  5. <process-engine-context>
  6. ?
  7. <command-service name="newTxRequiredCommandService">
  8. <retry-interceptor />
  9. <environment-interceptor policy="requiresNew" />
  10. <spring-transaction-interceptor policy="requiresNew" />
  11. </command-service>
  12. ?
  13. <!-- Default command service has a Spring transaction interceptor-->
  14. <command-service name="txRequiredCommandService">
  15. <retry-interceptor />
  16. <environment-interceptor />
  17. <spring-transaction-interceptor transaction-manager="transactionManager-jbpm"/>
  18. </command-service>
  19. ?
  20. </process-engine-context>
  21. ?
  22. <transaction-context>
  23. <transaction type="spring" />
  24. <hibernate-session current="true" />
  25. </transaction-context>
  26. ?
  27. </jbpm-configuration>

三、配置jbpm完成,但是依然出现java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin ** 调用中无效的参数的错误

?

google了一圈,最后找到了答案,在配置数据源的时候,StandardXAPoolDataSource中要配置user和password,StandardXADataSource中也要配置user和password。真是好奇怪,搞了一天终于解决了。

热点排行