UserTransactionAdapter 与 UserTransactionImpl

UserTransactionAdapter vs UserTransactionImpl

spring是否包含 jta 实现?

我看到 class UserTransactionAdapter implements UserTransaction 但 javax.transaction.UserTransaction 不存在于任何 spring jar 中。

另一方面,javax.transaction.UserTransaction 存在于 jboss 运行时库中,但实现在 spring jar 中。另一个 UserTransaction(来自 jbossxts-4.17.21.Final-redhat-2.jar)实现:UserTransactionImpl 可以在 jbossxts-4.17.21.Final- 中找到jboss 模块文件夹中的 redhat-2.jar。

谁能给我解释一下?

不,Spring 没有自己的 JTA 实现。它有自己的事务管理基础设施,独立于 JTA API,但它有自己的 TransactionManager API 的实现,可以使用(委托给) 一个 JTA TransactionManager。他自己的事务还有其他的实现API比如Hibernate-、JDO-、JPA-、DataSource,但是他们都把事务管理的工作委托给了底层的事务基础设施。总而言之,您可以在您的应用程序中使用 Spring 事务管理基础结构,如果您的环境中有 JTA TransactionManager,则可以将其委托给 JTA,但 Spring 本身不提供 JTA TransactionManager实施。

Spring 在 UserTransactionAdapter class 中对 UserTransaction 的实现只是为了使 JTA TransactionManager 适应 UserTransaction接口,因为虽然 UserTransactionTransactionManager 接口的精确子集,但 TransactionManager 接口本身并不扩展 UserTransaction 接口。仅将其视为一个简单的助手class,除了将一个界面适配到另一个界面外,它什么都不做。

Does spring contains a jta implementation ?

没有

I see that class UserTransactionAdapter implements UserTransaction but javax.transaction.UserTransaction don't exists in any spring jar.

javax.transaction.UserTransaction是JTA规范的一个元素,换句话说它是一个标准API。 Spring 没有理由包含它。

In the other hand javax.transaction.UserTransaction exists in jboss runtime library

确实如此,因为 JBoss 是一个符合 JEE 的应用程序服务器,所以它包含 JEE 标准库(JTA、JPA、JMS 等)

but the implementation is in a Spring jar.

只是将UserTransaction映射到TransactionManager的语法糖而已,就是not intended for direct use in application code

And another UserTransaction (from jbossxts-4.17.21.Final-redhat-2.jar) implementation: UserTransactionImpl can be found in jbossxts-4.17.21.Final-redhat-2.jar in jboss modules folder.

作为 JBoss 实现 JTA 规范:它是 jboss UserTransaction 标准 API 的实现。

Can someone explain this to me ?

Spring提供统一的API以非常简单的方式处理不同的事务管理器。您只需对 Spring 说在配置中使用实现 X 或 Y。最后,spring 委托 真实 事务管理到您选择的实现。 (为了执行此委托,似乎在某些情况下 Spring 内部需要语法糖 'UserTransactionAdapter')