究竟什么是Java EE呢?

Sna*_*Doc 96 java java-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无法对Java EE做什么?

  • 使用标准Java可以用Java EE做些什么呢?

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

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

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

谢谢你帮我清理鞭子!

Arj*_*jms 38

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

实际上他们可以.大多数库可以直接单独使用(在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.jar和activation.jar, Mail在Java SE(以及Tomcat)中运行得非常好.

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

Java EE在某种程度上是首次尝试将已经很大的JDK拆分成更易于管理和下载的块.人们已经在抱怨图形类(AWT,Swing)和Applet都在JRE中,而他们所做的就是在无头服务器上运行一些命令.那么您还想在标准JDK中包含所有Java EE库吗?

随着模块化支持的最终发布,我们将只有一个小型基础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++标准.

为什么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 ee开发人员也可以掌握这些概念.谢谢. (3认同)

jah*_*roy 12

以下是一些快速撰写的问题答案......

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

  • 为什么JavaEE库不包含在JavaSE下载中? 与许多图书馆不包括在一起的原因相同:它会有点过分.由于在没有应用程序服务器的情况下甚至无法使用JavaEE库,为什么还要包含它们呢?如果开发人员安装应用程序服务器并决定使用JavaEE,则应下载JavaEE.

  • 为什么有这么多JavaEE产品? 是否真的有那么多 "JavaEE"产品?如果是,请列出其中一些.更准确的说,我相信有多种实现了的相同的API.

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

  • 使用JavaEE,您无法用JavaEE做什么? 嗯......我不知道.

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

  • 开发人员什么时候决定他们不需要JavaEE? 见前一个答案.

  • 为什么JavaEE库版本与JavaSE版本不同步? 好问题.我不会假装知道怎么回答......但我猜的答案是:"因为他们没有同步".


mer*_*ike 8

在鸟瞰图中,Java EE是一个平台,即我们可以构建的东西.

从技术角度来看,Java Enterprise Edition标准定义了一组通常用于构建企业应用程序的API.这些API由应用程序服务器实现 - 是的,不同的应用程序服务器可以自由使用Java EE API的不同实现.

但是,除非您的代码正在运行或可以访问Java EE应用程序服务器(例如JBoss,GlassFish,Tomcat等),否则java ee库将无法运行,也无法编译.

您可以针对Java EE API进行编译,因此您只需在编译时使用这些API.在运行时,您还需要实现这些API,即应用程序服务器.

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

你没有.但是,如果您希望使用Java EE API发送邮件,则需要在运行时实现该API.这可以由应用程序服务器提供,也可以由添加到类路径的独立库提供.

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

因为只有API是标准化的,而不是实现.

为什么有这么多Java EE产品

因为人们不同意实施某些功能的正确方法.因为不同的供应商争夺市场份额.

使用标准Java无法对Java EE做什么?

由于Java EE实现是使用"标准Java"构建的:没有.但是,如果要解决典型的企业问题,利用现有库可以节省大量工作,并且使用标准化API可以防止供应商锁定.

使用标准Java可以用Java EE做些什么呢?

没什么,因为Java EE包含Java SE.

开发人员何时决定"需要"Java EE?开发人员什么时候决定他们不需要Java EE?

一般而言,Java EE API解决了企业计算中典型的重复出现的问题.如果您遇到这些问题,使用标准解决方案通常是有意义的 - 但如果您遇到不同的问题,可能需要采用不同的解决方案.例如,如果您需要与关系数据库通信,则应考虑使用JPA.但是,如果您不需要关系数据库,JPA将无法帮助您.


Max*_*kov 8

什么是Java EE?

让我们从wiki的canonicity定义开始:

Java平台,企业版或Java EE是Oracle的企业Java计算平台.该平台提供API和运行时环境,用于开发和运行企业软件,包括网络和Web服务,以及其他大规模,多层,可扩展,可靠和安全的网络应用程序.

这里的要点是Java EE是一个提供API的平台,而不是一些具体的库.

Java EE需要什么?

Java EE的主要范围是基于网络的应用程序,不同于面向桌面应用程序开发的Java SE,具有简单的网络支持.这是他们之间的主要差异.可扩展性,消息传递,事务处理,对每个应用程序的数据库支持......随着网络的发展,所有这些的需求都在增加.当然,Java SE提供的许多现成解决方案对网络开发很有用,因此Java EE扩展了Java SE.

为什么我们需要应用服务器来运行我们的代码?

为什么我们需要操作系统?因为硬件需要做很多艰苦的工作才能实现最简单的应用.没有操作系统,你需要一次又一次地做.过度简化的操作系统只是一个程序化容器,它为我们提供了运行应用程序的全局上下文.

这就是应用程序服务器.它们允许我们在其上下文中运行我们的应用程序,并为我们提供了许多企业高负载网络应用程序所需的高级功能.而且我们不想写自己的自行车来解决这个问题,我们想编写能够满足我们业务需求的代码.

这里的另一个例子可能是JVM for Java.

为什么Java EE不包含板载应用服务器?

很难说对我来说.我认为,这是为了获得更大的灵活性.Java EE说他们应该做什么,他们决定如何做.

为什么JVM不包含Java EE?

因为他们针对不同的市场领域.Java EE具有许多通常桌面不需要的功能.

为什么有这么多Java EE产品?

因为Java EE仅描述了该行为.每个人都可以实现它.

Java EE对Java SE无法做些什么呢?

征服互联网 使用Java SE小程序和套接字真的很难:)

Java SE无法用Java EE做什么?

如上所述,Java EE扩展了Java SE,因此使用Java EE,您应该能够完成Java SE可用的所有操作.

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

当他们需要Java EE的强大功能时.所有上面提到的.

开发人员什么时候决定他们不需要Java EE?

当他们编写通常的控制台或桌面应用程序时.

为什么Java SE和Java EE的版本未同步?

Java总是在技术命名和版本控制方面遇到麻烦.所以这种情况也不例外.


Gab*_*ica 6

Java EE就是容器概念.
Container是一个执行上下文,在其中运行您的应用程序,并提供最后一组服务.每种服务都由名为JSR的规范定义.例如JSR 907,JTA(java事务Api),它提供了一种管理针对不同资源的分布式事务的标准方法.
对于给定的JSR,通常有许多不同的实现,您将使用的实现取决于容器提供程序,但您并不关心这一点,因为您确定该行为遵循预定义的合同:JSR API.
因此,要利用Java EE,您需要在容器内运行应用程序.两个主要的是EJB和servlet容器,它们都存在于任何Java EE认证的应用程序服务器上.

所有这一切的目的是定义一个标准的执行环境,允许仅使用必需品id.est打包您的应用程序.你的事.它避免依赖于您必须打包并提供给您的应用程序的未知和各种第三方库,这些库可能是与服务器上其他应用程序冲突的根源.在Java EE中,您知道所有标准的非功能性需求(如安全性,事务,可伸缩性,远程调用等)都将由容器提供(对其中运行的所有应用程序进行分解),您只需将工作建立在其上.

  • 您可以将容器视为一个大框架,但Sun(Oracle :()仅提供规范,许多人实现它.而经典框架通常只由一个actor提供/实现(例如,springource和spring) (2认同)