Как использовать поддержку JTA в Tomcat 6 для Hibernate? - PullRequest
22 голосов
/ 31 марта 2010

Они рекомендуют использовать поддержку транзакций JTA в среде Java EE.

Но как настроить JTA в Tomcat6, чтобы Hibernate Session мог использовать его?

Начиная с версии 3.0.1, Hibernate добавил метод SessionFactory.getCurrentSession(). Первоначально предполагалось использование транзакций JTA, где транзакция JTA определяла как область действия, так и контекст текущего сеанса. Учитывая зрелость многочисленных автономных реализаций JTA TransactionManager, большинство, если не все приложения, должны использовать управление транзакциями JTA, независимо от того, развернуты они в контейнере J2EE или нет. Исходя из этого, JTA-контекстные сеансы - это все, что вам нужно.

( Справочная документация Hibernate | Архитектура. Контекстные сеансы )

Ответы [ 2 ]

33 голосов
/ 31 марта 2010

Если вам нужна поддержка JTA в Tomcat, вам нужно использовать автономный менеджер транзакций, такой как Atomikos , JOTM , Bitronix , SimpleJTA , JBossTS или GeronimoTM / Jencks . Но, честно говоря, если вы не собираетесь обрабатывать транзакции между несколькими ресурсами, вы можете жить без JTA (и если вам действительно нужна JTA, используйте полноценный сервер приложений).

6 голосов
/ 31 марта 2010

Если вы просто хотите использовать SessionFactory.getCurrentSession(), вы можете просто добавить следующие две строки в ваш hibernate.cfg.xml:

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>

Это даст вам уникальный сеанс для каждого потока. Поскольку запрос сервлета всегда обрабатывается в одном потоке (учитывая, что ваш код не порождает новые), сессия будет жить для всего запроса.

Не забудьте использовать фильтр, чтобы закрыть сеанс после запроса!

...