2012-08-07 73 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