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

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

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

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

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

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

如果您只想使用SessionFactory.getCurrentSession() ,只需将以下两行添加到hibernate.cfg.xml:

 org.hibernate.transaction.JDBCTransactionFactory thread 

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

请勿忘记在请求后使用filter关闭会话!