1

ここで構築しているSpring-GWTアプリケーションに特有の問題があります。UTF-8をサポートしないWE8ISO8859P1文字セットでエンコードされたOracleDBがあります。したがって、AL32UTF8文字セットで新しいDBを構築しています。残念ながら、DBAは既存のDBを新しいDBに移行することを望んでおらず、英語のデータについては古いDBに、ラテン語のデータについては新しいDBに到達する必要があります。

メソッド/クラスレベルで@Transactionalアノテーションがあり、sessionFactoryがDAOに注入されて休止状態に接続します。ユーザーがラテン語を選択したときにこれらを再利用したい

@Transactional(changeThisDynamically)

つまり、注入されたTransactionManagerとSessionFactoryは、ユーザーがラテン語/英語を切り替えるときにAjax呼び出しを介して動的に変化する必要があります。

これはできますか?これを解決するための最良のアプローチは何ですか?

考え直してみると、BeanのApplicationContextAwareを作成してこれをdaoに設定することで、ラテン語のセッションファクトリを取得できましたが、これは良いアプローチですか?そして、TransactionManagerで何をしますか?

ありがとう、

4

1 に答える 1

1

ご協力ありがとうございます。私が本当に必要としていたのは「AbstractRoutingDataSource」でした-私は次のようにしてこれを修正しました

    <bean id="dataSource" class="com.myPackage.CustomRoutingDataSource">
   <property name="targetDataSources">
      <map key-type="com.myPackage.DBLocaleEnum">
         <entry key="English" value-ref="defaultDataSource"/>
         <entry key="Spanish" value-ref="latinDataSource"/>
      </map>
   </property>
   <property name="defaultTargetDataSource" ref="defaultDataSource"/>
</bean>

public class CustomRoutingDataSource extends AbstractRoutingDataSource {

@Override
protected Object determineCurrentLookupKey() {

    DBLocaleEnum localeType = LocaleContextHolder.getLocaleType();
    return localeType;
}

リターンタイプのdetermineCurrentLookupKeyメソッドは、使用するデータソースを決定するのに役立ちます。

于 2011-12-06T12:01:50.603 に答える