2011-09-06 31 views
0

我是新來的JTA,我想實現的JTA 2件。在商業方法JTA 2PC - 多數據源

我想如果FUN1失敗,則FUN3也應該,但它沒有發生。

@Transactional 
fun(){ 

testDao1.fun1(); 
testDao2.fun3(); 
} 

我有以下的事情。

  1. 創建數據源如.I有多個數據源

    <bean id="dataSource" class="org.apache.commons.dbcp.managed.BasicManagedDataSource" 
        destroy-method="close"> 
        <property name="driverClassName" value="org.postgresql.xa.PGXADataSource" /> 
        <property name="url" value="${database.interimws.email.url}" /> 
        <property name="username" value="${database.interimws.email.username}" /> 
        <property name="password" value="${database.interimws.email.password}" /> 
        <property name="defaultAutoCommit" value="false" />   
        <property name="maxActive" value="${database.maxactive}" /> 
        <property name="maxIdle" value="${database.maxidle}" /> 
        <property name="maxWait" value="${database.maxwait}" /> 
    </bean> 
    
  2. 具有持久性單元,其JTA類型的

  3. 創建使用上述DataSource和持久性單元 4.getting的entityAMangerFactory來自服務器的javax.transaction.TransactionManager和Usertransaction對象以及用於註釋的配置的spring jta

  4. 擁有註釋爲交易的業務類別。

+0

你在使用什麼服務器? – beny23

回答

0

確保您有參與兩階段落實的每個數據庫的XA型驅動程序;否則,它將無法工作。

你是如何測試的?你有模擬版本的DAO1引發異常嗎?

+0

感謝您的回覆。我使用oracle.jdbc.xa.client.OracleXADataSource和org.postgresql.xa.PGXADataSource。兩者都是XA類型 –

+0

非常好,謝謝澄清。 – duffymo

+0

當testDao1.fun1()falis testDao2.fun3()不回滾時,我沒有得到預期的結果..setting BasicManagedDataSource defaultAutoCommit = false。 –