0

私のWebアプリケーションではSpring3, hibernate3、アノテーションを介してトランザクションマネージャーで使用していますが、これまでこのアプリケーションにはsingle dataSource単一のアプリケーションがありますsessionFactory

現在、これは、個別のテナント用に個別のDBを備えたマルチテナントに移行します。現在、dbクレデンシャルとdataSourceを持つリクエストごとにThreadLocalを介してすべてのテナント情報を管理しています。

しかし、主な問題は、動的に選択されたすべてのdataSourceに対してTransactionManagerをサポートする必要がある場合に発生しました。

以下は私の質問です:

 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ファイルで定義することはできません。

私を助けてください ... :( ...

4

1 に答える 1

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>    
于 2012-08-07T11:20:25.913 に答える