解决jbpm4.4和spring多数据源的有关问题【转】
解决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注入
?
- public class ProcessEngineFactoryBean extends SpringHelper {
- ?
- protected SessionFactory sessionFactory;
- ?
- public void setSessionFactory(SessionFactory sessionFactory) {
- this.sessionFactory = sessionFactory;
- }
- ?
- public ProcessEngine createProcessEngine() {
- processEngine = new ConfigurationImpl().springInitiated(
- applicationContext).setResource(jbpmCfg)
- .setHibernateSessionFactory(sessionFactory)
- .buildProcessEngine();
- return processEngine;
- }
- ?
- }
?
- <!-- 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事务拦截方式,这一步很关键,保证在一个事务管理器内
?
?
- <?xml version="1.0" encoding="UTF-8"?>
- ?
- <jbpm-configuration spring="enabled">
- ?
- <process-engine-context>
- ?
- <command-service name="newTxRequiredCommandService">
- <retry-interceptor />
- <environment-interceptor policy="requiresNew" />
- <spring-transaction-interceptor policy="requiresNew" />
- </command-service>
- ?
- <!-- Default command service has a Spring transaction interceptor-->
- <command-service name="txRequiredCommandService">
- <retry-interceptor />
- <environment-interceptor />
- <spring-transaction-interceptor transaction-manager="transactionManager-jbpm"/>
- </command-service>
- ?
- </process-engine-context>
- ?
- <transaction-context>
- <transaction type="spring" />
- <hibernate-session current="true" />
- </transaction-context>
- ?
- </jbpm-configuration>
三、配置jbpm完成,但是依然出现java.sql.SQLException: Cannot get connection for URL jdbc:oracle:thin ** 调用中无效的参数的错误
?
google了一圈,最后找到了答案,在配置数据源的时候,StandardXAPoolDataSource中要配置user和password,StandardXADataSource中也要配置user和password。真是好奇怪,搞了一天终于解决了。