解决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
java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin ** 调用中无效的参数
一、扩展SpringHelper,添加setSessionFactory,指定sessionfactory注入
- <!-- jbpm配置 cn.oecp.jbpm4.cfg.pvm.ProcessEngineFactoryBean上面已经定义-->
- <bean id="springHelper" class = "com.dawn.jbpm4.cfg.pvm.ProcessEngineFactoryBean" >
- <property name="jbpmCfg" value= "com/dawn/jbpm4/cfg/jbpm.cfg.xml" ></property>
- <property name="sessionFactory" >
- <ref local="sessionFactory-jbpm" />
- </property>
- </bean>
二、其他配置省略,修改了 jbpm.tx.spring.cfg.xml中 spring事务拦截方式,这一步很关键,保证在一个事务管理器内
三、配置jbpm完成,但是依然出现java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin ** 调用中无效的参数的错误
google了一圈,最后找到了答案,在配置数据源的时候,StandardXAPoolDataSource中要配置user和password,StandardXADataSource中也要配置user和password。真是好奇怪,搞了一天终于解决了。