如何在Tomcat 6中使用JTA支持Hibernate?

Eug*_*neP 22 java orm tomcat hibernate jta

他们建议在Java EE环境中使用JTA事务支持.

但是如何在Tomcat6中配置JTA以便Hibernate Session可以使用它呢?

从版本3.0.1开始,Hibernate添加了该SessionFactory.getCurrentSession()方法.最初,这假定使用JTA事务,其中JTA事务定义了当前会话的范围和上下文.鉴于众多独立JTA TransactionManager实现的成熟度,大多数(如果不是全部)应用程序应该使用JTA事务管理,无论它们是否部署到J2EE容器中.基于此,您需要使用基于JTA的上下文会话.

(Hibernate参考文档|架构.上下文会话)

Pas*_*ent 33

如果您希望在Tomcat中支持JTA,则需要使用独立的事务管理器,如Atomikos,JOTM,Bitronix,SimpleJTA,JBossTSGeronimoTM/Jencks.但老实说,如果你不打算跨多个资源处理事务,那么你就可以在没有JTA的情况下生活(如果你真的需要JTA,那就使用一个完整的应用程序服务器).


FRo*_*owe 6

如果您只是想使用SessionFactory.getCurrentSession(),可以在hibernate.cfg.xml中添加以下两行:

<property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
Run Code Online (Sandbox Code Playgroud)

这将为每个线程提供一个唯一的会话.由于servlet请求总是在一个线程内处理(假设您的代码不会生成新的代码),Session将为整个请求生效.

请勿忘记在请求后使用过滤器关闭会话!