2015-10-18 107 views
1

我在我的應用程序中使用了2個資源jms數據庫。我配置如下,我正在做一個簡單的測試,以便檢查系統中的中斷。可以彈簧事務管理器能夠管理2件事務嗎?

  1. 在數據庫中插入uuid。
  2. 將uuid作爲消息發送到jms隊列。
  3. 在遠程監聽器上收聽消息。
  4. 檢查uuid是否存在於數據庫中?

這是完全正常的代碼:https://github.com/ameyjadiye/mq-fury

這樣,我只是想確保數據總是出現在數據庫中時,遠程監聽器檢查它在分貝。

我在系統上運行1k條消息,並且所有工作都正常,截至目前,有沒有可能檢查可能會失敗?我不是明確地管理db事務,我需要在這裏做更多的設置嗎?

<bean id = "messageListenerContainer2" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory"/> 
    <property name="destinationName" value="real_queue"/> 
    <property name="messageListener" ref="jmsMessageListener2"/> 
    <property name="cacheLevel" value="1"/> 
    <property name="concurrency" value="5-5" /> 
    <property name="sessionTransacted" value="true"/> 
    <property name="transactionManager" ref="jmsTransactionManager"/> 
    </bean> 

    <bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    </bean> 
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <constructor-arg ref="dataSource"/> 
     </bean> 

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

      <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
      <property name="url" value="jdbc:mysql://192.168.0.102:3306/test" /> 
      <property name="username" value="root" /> 
      <property name="password" value="r00T" /> 
     </bean> 

這是春天的一個獨立的應用程序,試圖與ChainedTrnsactionManager但它使系統慢

+0

您需要配置'JTATransactionManager'才能使用2PC。也許這就是缺少的東西? – Augusto

+0

確實需要關於配置的更多信息嗎? –

回答

1

您的配置不貌似支持兩階段提交事務。當使用Spring作爲2PC的事務管理器時,您需要使用JtaTransactionManager,它可以在內部使用JTA容器(所有EE兼容服務器)或使用獨立事務管理器(如BitrionixAtomikos)提供的實際JTA事務管理器。舉個例子看看here

+0

它簡單的彈簧應用程序,不在任何EE服務器上部署,還有JTAtransactionManager與chainedTransactionManager不同? –

+0

@Arney Jadiye:從文檔:PlatformTransactionManager實現,編排事務創建,提交併回滾到代表列表。 **使用此實現假定導致事務回滾的錯誤通常發生在事務完成之前或提交最內部的PlatformTransactionManager **期間。 在JTA事務管理器/ 2PC中,錯誤可能發生在任何地方**,並且整個事務將被恢復。不想聽起來光​​顧,但要閱讀文檔。 – Augusto

+0

@Amey - 談到2PC,Spring並沒有全球交易的實際能力(又名XA交易)。外部JTA事務管理器已經完善了這種功能,並且Spring不打算重新發明輪子。如果您的應用程序未在EE服務器上運行,則需要使用外部TM。 – Shailendra