为什么库不能在应用程序服务器环境之外运行?
其实他们可以。大多数库可以直接独立使用(在Java SE中),也可以包含在.war中(实际上几乎总是Tomcat)。Java EE的某些部分(例如JPA)在各自的规范中都有明确的部分,以指示它们应如何工作以及如何在Java SE中使用。
如果有的话,这里所涉及的并不是应用服务器环境本身,而是所有其他库的存在以及将它们结合在一起的集成代码。
因此,注释将只对您所有的类扫描一次,而不是对每个库(EJB,JPA等)进行一次又一次的扫描。也正因为如此,CDI批注可以应用于EJB bean,并且JPA实体管理器可以注入到它们中。
为什么我需要像JBoss这样庞大的功能来编译简单的代码来发送电子邮件?
这个问题有些错误:
- 对于编译,您只需要API jar,Web个人资料的大小低于1MB,完整个人资料的大小则超过1MB。
- 为了运行,您显然需要一个实现,但是“大量”夸大了事情。例如,OpenJDK约为75MB,而TomEE(包含邮件支持的Web Profile实现)仅为25MB。甚至GlassFish(完整配置文件的实现)也只有53MB。
- 使用独立的mail.jar和activation.jar,从Java SE(因此也从Tomcat)在Mail上运行良好。
为什么Java EE库不是“标准”的,而是包含在常规JVM下载和/或SDK中?
在某种程度上,Java EE是将已经庞大的JDK分成易于管理和下载的块的首次尝试之一。人们已经在抱怨,在无头服务器上运行某些命令时,图形类(AWT,Swing)和Applet在JRE中。然后,您还想将所有Java EE库都包含在标准JDK中吗?
随着模块化支持的最终发布,我们将只有一个小型的JRE,其中许多东西可以作为软件包单独安装。也许有一天,现在组成Java EE的许多甚至所有类也将成为此类软件包。时间会证明一切。
当实际上只有两种主要的标准Java(Oracle JVM / SDK | OpenJDK JVM / JDK)时,为什么会有那么多Java EE产品?
Java SE不仅有两种口味。至少有IBM JDK,以前的BEA(JRocket,由于收购而被合并到Oracle / Sun),各种其他开源实现以及大量嵌入式应用。
Java SE和EE之所以成为规范的原因是,许多供应商和组织都可以实施它,因此,它可以鼓励竞争并减轻供应商锁定的风险。
对于C和C ++编译器,这确实没有什么不同,在C和C ++编译器中,您有许多竞争产品,而且都遵循C ++标准。
为什么Java EE库版本与标准Java库版本不同步(Java EE 6与Java 7)
Java EE建立在Java SE之上,因此落后于Java。版本确实对应。Java EE 5需要Java SE5。JavaEE 6需要Java SE 6,依此类推。多数情况下,只有Java SE X是最新的,而Java EE X-1是最新的。