Подтвердить что ты не робот

Как использовать поддержку JTA в Tomcat 6 для Hibernate?

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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