@Urukhayy

Нужно ли в Hibernate для транзакций выделять отдельный поток?

1. Нужно ли в Hibernate для транзакций выделять отдельный поток?
2. Если загружался объект через session.load, а потом этот объект перестал использоваться, Hibernate будет держать его кэш? Нужно ли удалять ненужные объекта из кэша?
3. Можно ли использовать CRUD-функции Hibernate через одну транзакцию на всё приложение? Или каким способом можно минимизировать открытие/закрытие транзакций?
  • Вопрос задан
  • 392 просмотра
Пригласить эксперта
Ответы на вопрос 1
@bromzh
Drugs-driven development
Если ты используешь EJB, то все запросы от ORM к БД оборачиваются в транзакцию, если тип в persistence-unit добавить аттрибут transaction-type="JTA. Иначе транзакциями вручную будешь рулить. Достаточно лишь получить транзакцию, ну и начать/закоммитить/сделать роллбек. Менеджер транзакций уже настроен. Если не используешь EJB, а обходишься спрингом, то в нём есть свой менеджер трнзакций, хз, надо ли его отдельно конфигурить.
Вот эти самые менеджеры транзакций и менеджеры ресурсов и рулят потоками, пулами соединений и т.д. Он сам отслеживает любые попытки обращения к БД и оборачивает в транзакцию (если есть запущенная транзакция, при чём неважно, запустил ты её сам, или сервер приложений это сделал за тебя). Эти менеджеры поддерживают как локальные, так и распределённые транзакции, и, при этом, всё потокобезопасно.

Если не используешь JPA и EntityManager, только Hibernate, то можно взять реализацию менеджера транзакций, например Atomikos, сконфигурить и создать его ручную, а потом так же вручную запускать транзакции.

Использовать 1 транзакцию на всё приложение глупо. Пропадёт многопоточность (ведь 1 транзакцию нельзя к нескольким потокам привязать), да и много действий внутри 1 транзакции делать плохо.

В общем, нужно использовать всё с умом. Если нужны транзакции - используй. Только правильно: в 1 транзакции должно быть 1 логическая операция.

PS Ах да, если я не ошибаюсь, то количество потоков зависит больше от менеджера ресурсов, а не от менеджера транзакций. Ресурсами же могут быть, например, БД, а могут и сообщения JMS. Как настроишь DataSource, так и будет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект
22 нояб. 2024, в 21:44
50000 руб./за проект