休眠、Spring 和 JTA 支持

Hibernate, Spring and JTA support

我正在构建一个与域相关的网络应用程序,其中 200-500 个用户(请求)每秒仅保存数据。 我选择 spring、Hibernate、Jboss。但是当我了解 Spring 和 Hibernate 集成时,spring 文档一次又一次地提到一些 JTA 术语。

所以现在提问。

  1. 我读了一些关于 JTA 的东西,但有点困惑,这个 JTA 是分布式事务的意思吗? 如果以上问题的答案是肯定的,那么什么是分布式事务? 对我来说,分布式事务——在不同机器上执行的事务。 (这可能吗?意味着为什么交易会在不同的机器上发生,因为它们只是工作单元)

  2. 为什么休眠 Spring 关心 JTA(任何实时示例)。

  3. 如果我有休眠模式,我为什么要关心 JTA?(如果我的数据库在远程位置(而不是在本地),那么我应该关心,对吧?但是为什么?(请解释)

  4. JTA 如何帮助实现良好的性能?

  5. 什么是 JTA 和 NON-JTA 事务?

提前致谢,请帮帮我,我对这些技术有点陌生和困惑。再次感谢。

关于您的问题:

  1. Java Transaction API (JTA) 支持单个应用程序中的分布式事务(即使一个应用程序服务器中的多个 EAR 或 WARs 在技术上仍然是一个应用程序,因为只有服务所有 EAR 或 WAR 的服务器的一个实例)。粗略地说,分布式事务是一种以原子方式跨多个企业信息系统 (EIS) 实现理论上无限数量的操作的机制 - 所有操作或 none 适用,而不仅仅是一些。

    你对分布式事务的理解不太正确。这与可能涉及不同的机器这一事实无关,而是归结为涉及多个 EIS。

    假设您有两个数据库,每个数据库都有一个 持久性单元(在 JPA 中)。现在您在应用程序中执行一些工作。从您的应用程序的角度来看,它只是一个工作单元,但对于您的数据库而言,它是每个工作单元。这通常在应用程序服务器中使用 JTA 进行协调。

  2. Hibernate 和 Spring 关心 JTA,因为两者都只是使开发人员能够高效开发应用程序的框架。

    有关示例,请参见上面的示例。如果 Hibernate 和 Spring 阻碍了分布式事务,相信我,这些项目会因为缺少用户而死掉。

  3. 如果你只有一个数据库,你不需要真正关心 JTA,因为那样使用 "NON-JTA" 个事务就足够了,这些事务是 本地资源(其中 resource 表示您的数据库,local 表示仅限于您的数据库)。

  4. JTA 无助于以任何方式获得良好的性能。它只是一种在一个应用程序中管理分布式事务的规范。

  5. 我想你现在已经知道这个问题的答案了。 ;)