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 这样庞大的东西来编译简单的代码来发送电子邮件?
这个问题有几个问题:
- 对于编译,您只需要 API jar,Web 配置文件小于 1MB,完整配置文件略多于 1MB。
- 为了运行,你显然需要一个实现,但“大规模”是夸大其词。例如,OpenJDK 大约 75MB,而 TomEE(一个包含邮件支持的 Web Profile 实现)只有 25MB。即使是 GlassFish(一个 Full Profile 实现)也只有 53MB。
- 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/