Java EE到底是什么?[已关闭]

2022-08-31 10:15:19

Java EE为年轻的Java开发人员提供了这个“神秘的裹尸布” - 我一直试图提升自己很长一段时间,但收效甚微。

混淆源于:

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

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

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

  • 一个人可以用Java EE做些什么,而他们不能用标准Java做什么?

  • 一个人可以用标准Java做什么,而他们不能用Java EE做什么?

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

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

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

感谢您帮助我清除鞭毛!


答案 1

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

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

如果有的话,这里的关键不在于应用程序服务器环境本身,而在于所有其他库的存在以及将它们结合在一起的集成代码。

因此,对于所有类,注释将仅扫描一次,而不是每个库(EJB,JPA等)本身执行此扫描。也正因为如此,CDI 注释可以应用于 EJB Bean,JPA 实体管理器可以注入到其中。

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

这个问题有一些问题:

  1. 对于编译,你只需要API jar,它对于Web配置文件小于1MB,对于完整配置文件,它略高于1MB。
  2. 对于运行,你显然需要一个实现,但“大规模”是夸大其词。例如,OpenJDK大约是75MB,TomEE(包含邮件支持的Web Profile实现)只有25MB。即使是GlassFish(完整配置文件实现)也只有53MB。
  3. Mail在Java SE(以及Tomcat)以及使用独立邮件.jar和激活.jar中运行良好。

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

在某种程度上,Java EE是将已经庞大的JDK拆分为更易于管理和下载的块的首批尝试之一。人们已经在抱怨图形类(AWT,Swing)和小程序在JRE内部,而他们所做的只是在无头服务器上运行一些命令。然后你还想把所有的Java EE库都包含在标准JDK中吗?

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

为什么有这么多的Java EE产品,而标准Java实际上只有两种主要风格(Oracle JVM/SDK |OpenJDK JVM/JDK)?

Java SE有两种以上版本。至少有IBM JDK,以前的BEA(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是最新的。


答案 2

以下是一些快速撰写的答案,可以回答您的问题...

  • 为什么 JavaEE 库在没有应用程序服务器的情况下无法运行?JavaEE提供的服务(容器管理事务,容器管理的依赖关系注入,计时器服务等)本质上涉及JavaEE兼容的应用程序服务器(例如:GlassFish,JBoss,WebSphere等)。因此,如果没有这样的容器,JavaEE库就没有用处。“为什么我需要像JBoss这样庞大的东西来编译简单的代码来发送电子邮件?”你没有。有一些方法可以在没有JavaEE的情况下发送电子邮件...但是如果你想用JavaEE的方式做到这一点,你需要一个JavaEE容器。

  • 为什么 JavaEE 库未包含在 JavaSE 下载中?许多库没有被包括在内的原因相同:这将是过度的。既然您甚至不能在没有应用程序服务器的情况下使用JavaEE库,那么为什么要费心去包含它们呢?如果开发人员安装应用程序服务器并决定使用 JavaEE,则应下载 JavaEE。

  • 为什么有这么多 JavaEE 产品?真的有“这么多”JavaEE产品吗?如果是这样,请列出其中的一些。更准确地说,我相信同一个API有多个实现

  • 使用JavaEE可以做些什么,而没有标准的Java就无法做到?很多。在没有 JavaEE 的情况下,您不能依赖应用程序服务器来管理事务或持久性上下文。在没有 JavaEE 的情况下,不能允许应用程序服务器管理 EJB 依赖注入。如果没有 JavaEE,则无法使用应用程序托管计时器服务。这个问题的答案应该使第一个问题的答案非常清楚......JavaEE提供的大多数服务都需要JavaEE容器。

  • 你能用 JavaSE 做些什么,而用 JavaEE 做不到呢?嗯......我不知道。

  • 开发人员何时决定需要 JavaEE?这个问题完全是主观的...但是,如果您需要JavaEE提供的任何服务,请开始考虑它。如果你不知道JavaEE是什么...你可能不需要它。

  • 开发人员何时决定他们不需要 JavaEE?请参阅上一个答案。

  • 为什么 JavaEE 库版本与 JavaSE 版本不同步?问得好。我不会假装知道如何回答它...但我想答案是:“因为它们不同步”。


推荐