在 J2EE 的初期,事务是如何处理的?

How transaction used to handle during initial days of J2EE?

虽然我学习 Java 差不多十年前,但我主要从事 C、C++ 和核心 Java(不是创建企业应用程序)的工作。现在,我已经开始在企业版工作。我对最初几天的工作方式有些怀疑。

我正在尝试了解 Web 应用程序过去是如何工作的。据我了解,用于创建 Web 应用程序的主要技术是 Servlets/JSP(不考虑像 Spring MVC、struts 等更高层的抽象),部署在网络容器(Apache Tomcat)。

现在,使用这些,它将如何处理事务支持?据我了解,网络容器不支持事务。那么这是否意味着最初事务支持是通过显式编码实现的? (这里的事务我指的是数据库事务/分布式事务)。如果是这样,这会有多强大?

任何有助于理解这一点的信息都会有很大帮助。

确实,像 Tomcat 这样的准系统 servletcontainer 不支持任何形式的事务管理。您基本上有三个选择:

  1. 手动管理事务(可以在 JDBC、Hibernate 和 JPA 中完成)。
  2. 或者,使用 Spring。
  3. 或者,将 Tomcat 替换为真正的 Java EE 服务器,以便您可以使用 EJB/JTA。例如。 TomEE.

这不仅在“最初的 J2EE 时代”是正确的,而且现在仍然如此。只是,J2EE 的 EJB 2.x 是一个糟糕的 API,以至于 Spring 后来更受欢迎。由于 Java EE 5 (2006) EJB 3.x 根据从 Spring 中吸取的经验教训得到了很大改进,因此如果您有 EJB,就没有理由用 Spring 取代它在真正的 Java EE 服务器中可用。只有那些坚持 Tomcat(例如客户或托管限制)的人通常别无选择,只能 Spring 让交易管理变得轻而易举。

另请参阅:

  • What exactly is Java EE?