Динамически изменяющаяся фабрика сессий и Txm Manager для поддержки I18N - PullRequest
1 голос
/ 25 ноября 2011

У меня есть специфическая проблема здесь в приложении Spring-GWT, которое мы создаем. У нас есть оракул DB, закодированный в наборе символов WE8ISO8859P1, который не поддерживает UTF-8. Поэтому мы создаем новую БД в наборе символов AL32UTF8. К сожалению, администраторы баз данных не хотят переносить существующую базу данных в новую базу данных, и нам приходится обращаться к старой базе данных для английских данных и новой базе данных для латинских данных.

У нас есть аннотации @Transactional на уровне метода / класса, а sessionFactory внедряется в DAO для подключения к hibernate. Я хочу использовать их повторно, когда пользователь выбирает латиницу что-то вроде

@ транзакционный (changeThisDynamically)

Т.е. внедренные TransactionManager и SessionFactory должны динамически изменяться посредством вызова Ajax, когда пользователь переключается между латиницей / английским.

Можно ли это сделать? Каков наилучший подход для решения этой проблемы?

Подумав, я мог бы получить фабрику латиноамериканских сессий, сделав компонент ApplicationContextAware и установить его в dao, но разве это хороший подход? и что мне делать с TransactionManager?

Спасибо

1 Ответ

1 голос
/ 06 декабря 2011

Спасибо за вашу помощь. Что мне действительно нужно, так это «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;
}

Тип возвращаемого значения метода defineCurrentLookupKey помогает мне определить, какой источник данных мне следует использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...