java - Java EE 到底是什么?

标签 java jakarta-ee ejb

我从事 Java SE 已经有几年了,然后转向 Java EE。但是,我在理解 Java EE 的某些方面时遇到了一些麻烦。

  1. Java EE 只是一个规范吗?我的意思是:EJB 是 Java EE 吗?

  2. EJB/Spring 是 Java EE 的不同实现吗?

很抱歉,我很难理解 Java EE 是什么。

谁能解释一下 Java EE 是什么?还有 EJB?

最佳答案

(2022 年 2 月更新)

首先,“Java EE”自 2019 年 9 月起重命名为“Jakarta EE”,从版本 8 开始。历史上,“J2EE”一词也涵盖了 1.2 版,直到1.4.术语“Java EE”涵盖了版本 5 到 8。另见 Jakarta EE, History on Wikipedia .


Is Jakarta EE just a specification? What I mean is: Is EJB Jakarta EE?

Jakarta EE确实是一个抽象规范。任何人都愿意开发和提供工作 implementation的规范。 具体 实现是所谓的应用服务器,如 WildFly , TomEE , GlassFish , Liberty , WebLogic等等。还有一些 servlet 容器只实现了巨大的 Jakarta EE API 的 JSP/Servlet 部分,例如 Tomcat , Jetty等。

我们,Jakarta EE 开发人员,应该使用规范编写代码(即在我们的代码中导入 only jakarta.* 类,而不是实现特定的类,例如 org.jboss.wildfly.*com.sun.glassfish.* 等),然后我们就可以在任何实现上运行我们的代码(因此,在任何应用服务器上) )。如果您熟悉 JDBC,它与 JDBC 驱动程序的工作原理基本相同。另见 a.o. In simplest terms, what is a factory?

EJB 是 Jakarta EE 规范的一部分。看,it's in the Jakarta EE API .成熟的 Jakarta EE 应用服务器开箱即用地支持它,但简单的 JSP/Servlet 容器不支持。

另见:


Are EJB/Spring different implementations of Jakarta EE?

不,如上所述,EJB 是 Jakarta EE 的一部分。 Spring 是一个独立的框架,它替代并改进了 Jakarta EE 的许多部分。 Spring 不一定需要 Jakarta EE 才能运行。像 Tomcat 这样的基本 servlet 容器已经足够了。简单来说,Spring 是 Jakarta EE 的竞争对手。例如。 “Spring”(独立)竞争 EJB/JTA,Spring MVC 竞争 JSF/JAX-RS/MVC,Spring DI/IoC/AOP 竞争 CDI,Spring Security 竞争 JAAS/JASPIC 等。

在旧的 J2EE/EJB2 时代,EJB2 API 的实现和维护都很糟糕。 Spring 是 EJB2 的一个更好的替代品。但是从 EJB3 (Java EE 5) 开始,EJB API 基于从 Spring 中吸取的教训得到了很大改进。自 CDI (Java EE 6) 以来,没有真正的理由再次查看像 Spring 这样的另一个框架,以使开发人员更容易开发服务层。

只有当您使用 Tomcat 之类的基本 servlet 容器并且无法迁移到 Jakarta EE 服务器时,Spring 才更有吸引力,因为在 Tomcat 上安装 Spring 更容易。无法安装,例如Tomcat 上的 EJB 容器,无需修改服务器本身,您基本上就是在重新发明 TomEE。

另见:

关于java - Java EE 到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7295096/

相关文章:

java - 具有可变组数的正则表达式?

java - 如何将方法作为参数传递

java - 我如何从容器管理的事务提交中捕获异常?

java - 你能配置 Spring Controller 特定的 Jackson 反序列化吗?

java - 使用文件输入的 Junit 参数化测试

java - System.currentMillis 用于跟踪 java 中的过期项目

java - 无法在 Tomcat 8 上部署 war 文件

java - 我可以将 session bean 与其他注入(inject)的类一起重用吗?

java - 当交易超时时如何执行一些操作

java - 为什么 session bean这么称呼?