Apache Tomcat 6 是否支持 JTA?

Does Apache Tomcat 6 support JTA?

我对在 Apache Spring 框架中使用 JTA 感到有些困惑 Tomcat 我希望有人会澄清,因为经过许多研究我似乎还没有找到正确的答案.

我正在使用 Spring 框架开发 Web 应用程序 运行 在 Apache Tomcat 6.

我在某处读到 Spring 确实支持 JTA,但它委托给底层 JavaEE 应用程序服务器。现在这就是我感到困惑的地方,因为我 Tomcat 不是完整的 JavaEE 应用程序服务器 - 它只是一个 servlet 容器,而且我相信它不像完整的 JavaEE 应用程序服务器那样提供 JTA 实现(Glassfish/Wildfly 等等...) 确实如此。

但是当我做类似下面的事情时,它的交易方面起作用了:

@Transactional
public class ServiceClassImpl implements ServiceInterface {
// code here that involves transactions e.g. calling DAO code
...
}

所以,我很困惑。希望有人赐教。

JTA 为您提供分布式事务支持,但如果 JTA 不可用,如 Tomcat,您仍然可以使用本地 JDBC 事务。

答案是:不。 Tomcat 6.x (7&8) 不提供开箱即用的 JTA,因为它们没有事务管理器,事务管理器需要作为单独的组件来监视多个资源(例如数据源)。

提到的答案 How to use JTA support in Tomcat 6 for Hibernate? 已经给出了可以与 Tomcat 一起使用的其他 JTA 事务管理器的列表。

Spring 通过平台事务管理器 (TM) 支持声明式事务管理,并提供一些实现(例如数据源),使 @Transactional 在没有额外 TM 的情况下在单个资源上工作。

Understanding the Spring Framework transaction abstraction provides more details and Spring Boot 可以轻松配置为 运行 嵌入式 Tomcat.

上的 Atomikos 或 Bitronix 事务管理器

是:-)

JTA 可以在 Tomcat 中使用,例如通过 https://www.atomikos.com

诀窍是使用组件化的 JTA 实现。

干杯