Можно ли использовать DataSourceTransactionManager для сохранения ORM вместо HibernateTransactionManager?



Я отлаживаю наше веб-приложение. Он настроен для создания компонента DataSourceTransactionManager, а также компонента HibernateTransactionManager при запуске. Это не преднамеренно, но вызвано зависимостью от третьей стороны. Эффект, по-видимому, благоприятный. То, что я вижу через отладку, заключается в том, что когда мы сохраняем объект через Дао на основе Hibernate - вызывается DataSourceTransactionManager, а не HibernateTransactionManager (бобы оба называются "transactionManager"). То Весенний Джавадок подразумевает (я думаю, перечитывая его сейчас), что это хорошо для местных ресурсов - это наша ситуация. Т. е. его не распространяется наша среда, основанная.



Мой вопрос - есть ли какие-либо негативные последствия от неиспользования HibernateTransactionManager для сохранения на основе ORM. Я могу изменить конфигурацию, чтобы сделать HibernateTransactionManager используемым через квалификатор в аннотации @Transactional на нашем DAOs.



Все отлично работает в простом модульном тесте, интеграции но меня больше волнует масштабирование до полного объема производства, когда у нас будут тысячи пользователей и высокий уровень параллелизма.



ТИА,
надеюсь, это не слишком туманно.



Весна 3.0.x кстати.



Это весной 3.1 docs.




Раздел 11.9 "решения общих проблем".



Используйте правильную реализацию PlatformTransactionManager, основанную на
ваш выбор транзакционных технологий и требований.


576   1  

1 ответ:

Это показалось бы мне неправильным и вызовет проблемы. Без диспетчера hibernate txn все вызовы, выполняемые в HibernateOperations, будут находиться вне транзакции и в отдельном сеансе, возможно, с использованием автоматической фиксации. Таким образом, может показаться, что все в порядке, когда возникает ошибка, вы можете обнаружить, что изменения, которые вы ожидали бы отката, не являются.

Попробуйте проверить

  • начать Тран
  • сохранить что-то
  • бросок исключение
  • commit

Проверьте, появляется ли "что-то" в БД или нет.

Другой проверкой будет

  • начать Тран
  • загрузить что-нибудь
  • доступ к отношению к другому объекту из чего-либо и доступ к свойству (не pk) этого связанного объекта

Вы можете обнаружить, что последний вызов вызывает исключение, поскольку сеанс не был открыт из-за нагрузки, потому что заключающий txn не управляется диспетчером hibernate txn.

Comments

    Ничего не найдено.