我对在 Apache Tomcat 上的 Spring 框架内使用 JTA 有一些困惑,我希望有人能澄清,因为经过多次研究我似乎还没有找到正确的答案。
我正在使用 Spring Framework 开发一个在 Apache Tomcat 6 上运行的 Web 应用程序。
我在某处读到 Spring 确实支持 JTA,但它委托(delegate)给底层的 JavaEE 应用程序服务器。现在这就是我感到困惑的地方,因为我的 Tomcat 不是一个完整的 JavaEE 应用程序服务器——它只是一个 servlet 容器,而且我相信它不提供像完整的 JavaEE 应用程序服务器(Glassfish/Wildfly 等...)那样的 JTA 实现。
但是当我做类似下面的交易方面的事情时:
@Transactional
public class ServiceClassImpl implements ServiceInterface {
// code here that involves transactions e.g. calling DAO code
...
}
所以,我很困惑。希望有人赐教。
最佳答案
答案是:不。 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提供更多细节和Spring Boot可以轻松配置为在嵌入式 Tomcat 上运行 Atomikos 或 Bitronix 事务管理器。
关于java - Apache Tomcat 6 是否支持 JTA?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31634475/