【发布时间】:2011-02-02 21:38:49
【问题描述】:
他们建议在 Java EE 环境中使用 JTA 事务支持。
但是如何在Tomcat6中配置JTA让Hibernate Session可以使用呢?
从 3.0.1 版本开始,Hibernate 添加了
SessionFactory.getCurrentSession()方法。最初,这假定使用 JTA 事务,其中 JTA 事务定义了当前会话的范围和上下文。鉴于众多独立 JTA TransactionManager 实现的成熟度,大多数(如果不是全部)应用程序都应该使用 JTA 事务管理,无论它们是否部署到 J2EE 容器中。基于此,您只需要使用基于 JTA 的上下文会话。
(Hibernate Reference Documentation | Architecture. Contextual Sessions)
【问题讨论】:
-
好的,我需要一个 JNDI 配置的 SessionFactory。现在,当我能够通过查找获得 SessionFactory 时,我需要配置 JTA。我的家庭课程使用 getCurrentSession() ,正如我在文档中看到的那样,这只适用于 JTA 配置的环境。此外,正如我已经提到的,几乎每个人都建议在 JEE 环境中使用 JTA。
-
不要仅仅因为有人告诉你需要它就使用 JTA。 JTA 非常复杂,在 99% 的情况下都是不必要的。没有它,Hibernate/JPA 也能正常工作。
-
好的,我需要一个 JNDI 配置的 SessionFactory。 为什么?
-
@Pascal Thivent 因为 Hibernate 开发人员在他们的文档中建议这样做。
-
@EugeneP 这是我倾向于在完全符合 Java EE 的服务器上使用的东西,但老实说,我从来没有找到一个好的理由(唯一的理由是当你运行 Hibernate作为 JMX 服务)。所以我可能会遗漏一些东西,但是将 SessionFactory 绑定到 HibernateUtil 类中的静态(和最终)变量对我来说是可以的(这是 Hibernate in Action 中针对 servlet 容器推荐的方法)。
标签: java hibernate tomcat orm jta