2016-10-03 81 views
0

我有一個使用兩個不同數據源的Grails 3.1.5應用程序。我的意圖是在這兩個數據源之間使用兩階段提交/ XA事務。我宣佈他們application.yml爲:如何配置grails使用單個事務管理器來處理多個數據源?

dataSources: 
    dataSource: 
     dialect: "org.hibernate.dialect.Oracle10gDialect" 
     jmxExport: false 
     jndiName: "java:/applicationUserDS" 
    other: 
     dialect: "org.hibernate.dialect.Oracle10gDialect" 
     jmxExport: false 
     jndiName: "java:/otherUserDS" 
     name: "other" 

然而,當我運行的JBoss EAP 6內的應用程序,我注意到,春天正在嘗試使用ChainedTransactionManager因爲有多個事務管理豆類:ChainedTransactionManagerPostProcessor.getTransactionManagerBeanNames(registry)回報[transactionManager, transactionManager_other]

有沒有辦法配置grails/spring啓動,以便它只創建一個事務管理器並將它用於兩個數據源?

回答

1

您可以覆蓋指定transactionManager豆使用的事務管理器中grails-app/conf/spring/resources.groovy

您將需要配置一個org.springframework.transaction.jta.JtaTransactionManager和配置設置hibernate.transaction.jta.platformorg.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform

你可能還必須設置hibernate.current_session_context_classorg.springframework.orm.hibernate5.SpringJtaSessionContext

+0

那些是我添加到application.yml性質,或別的地方? ......當你「配置一個JtaTransactionManager」時,你的意思是添加這些屬性還是涉及更多?我在網上搜索時很難找到配置這個的具體步驟。 – GreenGiant

+0

我還困惑的是,[文檔](http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/transaction/jta/JtaTransactionManager.html)似乎以表明JBoss不需要特定於供應商的JtaTransactionManager子類:「對於典型的JTA事務,只需要一個普通的JtaTransactionManager定義,可以跨所有Java EE服務器移植,不需要配置特定於服務器的TransactionManager查找這種JTA用法。「 – GreenGiant

+0

在'grails-app/conf/application.yml'中配置'hibernate.transaction.jta.platform'和'hibernate.current_session_context_class'是 –

相關問題