java - Java EE 到底是什么?

标签 java jakarta-ee

Java EE 为年轻的 Java 开发人员提供了一种“神秘的面纱”——我一直在努力提升自己,但收效甚微。

困惑源于:

  • Java EE 似乎既是一个库又是一个平台 - 有多种方法可以“获取”Java EE 库,通常来自 Oracle 的 Java EE SDK 下载等。但是,除非您的代码正在运行或可以访问 Java EE 应用程序服务器(例如 JBoss、GlassFish、Tomcat 等),否则 Java EE 库将无法工作,也无法编译。为什么?库不能在应用程序服务器环境之外运行吗?为什么我需要像 JBoss 这样庞大的东西来编译简单的代码来发送电子邮件?

  • 为什么 Java EE 库不是“标准”并包含在常规 JVM 下载和/或 SDK 中?

  • 当标准 Java 真的只有两种主要风格(Oracle JVM/SDK | OpenJDK JVM/JDK)时,为什么会有这么多 Java EE 产品?

  • Java EE 能做哪些标准 Java 做不到的事情?

  • 使用标准 Java 可以做什么而 Java EE 无法做到?

  • 开发人员何时决定他们“需要”Java EE?

  • 开发人员何时决定不需要 Java EE?

  • 为什么 Java EE 库版本与标准 Java 库版本不同步(Java EE 6 与 Java 7)?

谢谢你帮我清除鞭笞!

最佳答案

为什么库不能在应用服务器环境之外运行?

其实他们可以。大多数库可以直接独立使用(在 Java SE 中)或包含在 .war 中(实际上几乎总是 Tomcat)。 Java EE 的某些部分(如 JPA)在其各自的规范中有明确的部分,说明它们应如何工作和在 Java SE 中使用。

如果有的话,这里所涉及的与其说是应用服务器环境本身,不如说是所有其他库的存在以及将它们结合起来的集成代码。

因此,对于所有类,注释只会被扫描一次,而不是每个库(EJB、JPA 等)都会一遍又一遍地扫描。也正因为如此,CDI 注释可以应用于 EJB bean,并且可以将 JPA 实体管理器注入(inject)其中。

为什么我需要像 JBoss 这样庞大的东西来编译简单的代码来发送电子邮件?

这个问题有几个问题:

  1. 对于编译,您只需要 API jar,Web 配置文件小于 1MB,完整配置文件略多于 1MB。
  2. 为了运行,你显然需要一个实现,但“大规模”是夸大其词。例如,OpenJDK 大约 75MB,而 TomEE(一个包含邮件支持的 Web Profile 实现)只有 25MB。即使是 GlassFish(一个 Full Profile 实现)也只有 53MB。
  3. Mail 在 Java SE(以及 Tomcat)以及独立的 mail.jar and activation.jar 上都可以正常工作。 .

为什么 Java EE 库不是“标准”并包含在常规 JVM 下载和/或 SDK 中?

Java EE 在某种程度上是第一次尝试将已经庞大的 JDK 拆分成更易于管理和下载的 block 。人们已经在提示图形类(AWT、Swing)和小程序在 JRE 中,而他们所做的只是在 headless 服务器上运行一些命令。然后你还想在标准 JDK 中包含所有 Java EE 库?

随着模块化支持的最终发布,我们将拥有一个小型基础 JRE,其中包含许多可作为包单独安装的东西。也许有一天,现在构成 Java EE 的许多甚至所有类也将是这样的包。时间会证明一切。

当标准 Java 真的只有两种主要风格(Oracle JVM/SDK | OpenJDK JVM/JDK)时,为什么会有这么多 Java EE 产品?

Java SE 不仅有两种风格。至少有 IBM JDK、之前的 BEA JDK(JRocket,由于收购而被合并到 Oracle/Sun 中)、各种其他开源实现和大量用于嵌入式的实现。

Java SE 和 EE 成为规范背后的原因是许多供应商和组织都可以实现它,从而鼓励竞争并降低供应商锁定的风险。

C 和 C++ 编译器确实没有什么不同,在这些编译器中有许多竞争产品,而且都遵循 C++ 标准。

为什么 Java EE 库版本与标准 Java 库版本不同步(Java EE 6 与 Java 7)

Java EE 建立在 Java SE 之上,因此落后。虽然版本确实对应。 Java EE 5 需要 Java SE 5。Java EE 6 需要 Java SE 6,依此类推。只是大多数情况下,Java SE X 是最新的,Java EE X-1 是最新的。

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

相关文章:

java - 为什么 webappclassloader 没有被垃圾回收?

java - 既可选又可为空的 JAXB 元素

java - 从当前文件夹运行java类

java - 使用 EJB 异步方法的正确方法

java - 何时取消引用 java web mvc 中的对象

Java:随机生成不相交的圆(卡在 while 循环中)

java - 如何在具有两个场景的 JavaFXML Controller 中初始化圆形对象的双数组?

jakarta-ee - 多少 EJB 太多了?

java - 单击电子邮件激活链接时如何登录用户?(JSF 2.0)

java - 库中的 slf4j 似乎忽略了我的 log4j2 配置