2012-08-07 110 views
0

在我的web應用程序中,我使用Spring3, hibernate3與事務管理器通過註釋直到現在這個應用程序有single dataSource所以單個sessionFactory如何使用多數據源管理事務管理器和sessionFactory數據源

現在因爲這是移動到多租戶具有單獨 DB的seprate租戶。目前,我正在通過ThreadLocal管理所有租戶信息,每個請求具有db憑證以及dataSource。

但是,當所有這些動態選擇的數據源需要支持事務管理器時,主要問題出現了。所以下面

是我的問題:

1. How to update Transaction Manager as per request when dataSource changes ? 
2. If I also maintain SessionFactory for each tenant as manageing dataSource but how to update Transaction Manager for each sessionFactory ? 

注:我不能定義在XML文件中這些數據源,因爲沒有預定義的租戶。

請幫我... :(...

回答

0
@Bean(name="transactionManager1") 
    public HibernateTransactionManager hibernateTransactionManager(SessionFactory sessionFactory1){ 
     HibernateTransactionManager transactionManager1 = new HibernateTransactionManager(sessionFactory); 
     return transactionManager1;  
    } 


    @Bean(name="transactionManager2") 
    public HibernateTransactionManager hibernateTransactionManager(SessionFactory sessionFactory2){ 
     HibernateTransactionManager transactionManager2 = new HibernateTransactionManager(sessionFactory); 
     return transactionManager2;  
    } 



    <aop:config> 
    <aop:advisor pointcut="execution(* ....)" advice-ref="transactionAdvice1"/> 
</aop:config> 

<tx:advice id="transactionAdvice1" transaction-manager="transactionManager1"> 
    <tx:attributes> 
     <tx:method ..../>      
    </tx:attributes> 
</tx:advice> 

    <aop:config> 
    <aop:advisor pointcut="execution(* ....)" advice-ref="transactionAdvice2"/> 
</aop:config> 

<tx:advice id="transactionAdvice1" transaction-manager="transactionManager2"> 
    <tx:attributes> 
     <tx:method ..../>      
    </tx:attributes> 
</tx:advice>  
+0

嘿Nandkumar,因爲我已經告訴我不能與基於XML的配置去事務管理,因爲我不知道有多少數據源我必須做到這一點 我認爲(不知道對或錯),將只有一個事務管理器配置在XMl **中,並且爲此將會動態更新dataSource(根據需要)對每個新請求。 是那種類型的東西是poss隨着春天。 – 2012-08-08 03:16:06