Java EE Web 配置文件与 Java EE 完整平台

Posted

技术标签:

【中文标题】Java EE Web 配置文件与 Java EE 完整平台【英文标题】:Java EE Web Profile vs Java EE Full Platform 【发布时间】:2014-08-06 01:24:56 【问题描述】:

Java EE Web Profile 认证服务器(如 JOnAS)和 Java EE 全平台 认证服务器(如 JBoss AS)有什么区别?

【问题讨论】:

What is different about the Java EE packages? (SDK/normal vs Web Profile)的可能重复 【参考方案1】:

这是一个很好的解释它的图像。 Web profile 是 Java EE 的一个子集,它的目的是允许开发人员创建更轻量级的应用程序,这些应用程序可以在简单的 servlet 容器(如 Tomcat 或 Jetty)中使用。

【讨论】:

更新:网络配置文件已更新。服务器组件已移至 Webprofile,例如 JAX-RS、JAX-B 等,并添加了一些新组件,例如 JSON-P。有关详细信息,请参阅 Jakarta EE 的此文档:jakarta.ee/specifications/webprofile/8/webprofile-spec-8.pdf【参考方案2】:

Java EE 6 specification (JSR 316) 包含以下列表:

完整的 Java EE 产品要求

需要以下技术:

EJB 3.1 Servlet 3.0 JSP 2.2 EL 2.2 JMS 1.1 JTA 1.1 JavaMail 1.4 连接器 1.6 Web 服务 1.3 JAX-RPC 1.1 JAX-WS 2.2 JAX-RS 1.1 JAXB 2.2 JAXR 1.0 Java EE 管理 1.1 Java EE 部署 1.2 JACC 1.4 JASPIC 1.0 JSP 调试 1.0 JSTL 1.2 Web 服务元数据 2.1 JSF 2.0 常用注解 1.1 Java 持久性 2.0 Bean 验证 1.0 托管 Bean 1.0 Java EE 1.0 的上下文和依赖注入 Java 1.0 的依赖注入

没有可选技术。

网络配置文件定义

以下技术是 Web Profile 的必需组件:

Servlet 3.0 JavaServer 页面 (JSP) 2.2 表达式语言 (EL) 2.2 其他语言的调试支持 (JSR-45) 1.0 JavaServer Pages (JSTL) 1.2 标准标记库 JavaServer Faces (JSF) 2.0 Java 平台 (JSR-250) 1.1 的通用注释 企业 JavaBeans (EJB) 3.1 Lite Java 事务 API (JTA) 1.1 Java 持久性 API (JPA) 2.0 Bean 验证 1.0 托管 Bean 1.0 拦截器 1.1 Java EE Platform 1.0 的上下文和依赖注入 Java 1.06 的依赖注入

Web 配置文件中没有可选组件。

对于 Java EE 7,所有 EE 技术中有一个list,还显示了哪些包含在 Web Profile 中。以前仅在完整配置文件中可用的一些技术现在包含在 Web 配置文件中,例如 JAX-RS。

【讨论】:

【参考方案3】:

tl;博士

一个符合 Jakarta EE 平台 配置文件的应用服务器实现了十多个 specifications,它们执行一个符合 Jakarta EE Web 配置文件的应用服务器 em>。

换句话说,Web Profile 兼容服务器提供平台 兼容服务器提供的功能子集

平台 profile = Web Profile + 更多内容

Oracle CorpEclipse Foundation 的过渡

在 2017 年底,Oracle 将 Java EE 的职责交给了 Eclipse Foundation。 Java EE 8 之后的未来版本将称为Eclipse Enterprise For Java (EE4J)。或EE4J 项目。或者也许EE.next。或Jakarta EE。品牌一直在变化。

Java SE 变更的影响

在 Java SE 11 中,一些模块被删除。 Java EE 相关部分正在转移到 Jakarta EE 项目的新家。其他如CORBA 已提供给任何感兴趣的组织采用。见JEP 320。

雅加达 EE 10

Jakarta EE 10 现在正在计划中(2021-09)。在从 Oracle Corp 过渡到 Eclipse Foundation 的所有阶段之后,该平台现在可以在重大改进、新功能和不需要的功能的修剪方面取得进展。

版本 10 可能会涉及一些兼容性中断,以促进创新。但还没有什么是一成不变的。如果您有兴趣/疑虑/建议/贡献,请立即参与公开流程。

Java SE 11 将成为 Jakarta EE 兼容实现支持的最小运行时。

有关详细信息,请参阅:

Java for the enterprise: What to expect in Jakarta EE 10 Arjan Tijms,2021 年 3 月。 Towards a Community Vision for Jakarta EE 10 Reza Rahman。

Jakarta EE 10 中的平台配置文件

有关对平台配置文件的拟议更改的概述,请参阅Define Jakarta EE Platform 10 #364

Jakarta EE 10 中的核心配置文件

除了当前的Web Profile 和(完整的)Platform Profile 之外,Jakarta EE 10 可能会获得一个新的配置文件Core Profile

核心平台针对适合microservices 和ahead-of-time compilation 的较小运行时。请参阅 GitHub 页面,Define Jakarta EE Core Profile 10 #387

Jakarta EE 10 中的 Web 配置文件

Ivar Grimstad 已提议对Define Jakarta EE Web Profile 10 #363 中列出的 Java EE 10 中的 Web Profile 进行更改。

提议的新增内容

Jakarta MVC 2.1 - #381 Jakarta Config 1.0(尚未提出计划) Jakarta Concurrency3.0

主要更新

Jakarta Servlet 5.0 -> 6.0 Jakarta Expression Language 4.0 -> 5.0 Jakarta Standard Tag Library 2.0 -> 3.0 Jakarta Faces 3.0 -> 4.0 Jakarta RESTful Web Services 3.0 -> 3.1 或 4.0 Jakarta Security 2.0 -> 3.0 Jakarta Authentication 2.0 -> 3.0 Jakarta Contexts and Dependency Injection 3.0 -> 4.0

小更新

Jakarta Server Pages 3.0 -> 3.1 Jakarta WebSocket 2.0 -> 2.1 Jakarta JSON Processing 2.0 -> 2.1 Jakarta JSON Binding 2.0 -> 2.1 Jakarta Persistence 3.0 -> 3.1

没有更新

Jakarta 对其他语言 2.0 的调试支持 Jakarta Annotations 2.0 Jakarta Enterprise Beans 4.0 Lite 雅加达交易 2.0 Jakarta Bean 验证 3.0 Jakarta Managed Beans 2.0 Jakarta Interceptors 2.0 Jakarta 依赖注入 2.0

雅加达 EE 9.1

Jakarta EE 9.1 是 released 2021-05。

见:

全平台项目页面:Jakarta EE Platform 9.1 Web Profile 9.1 project 页面。

9.1 版使 Jakarta EE 与 Java SE 11 兼容。这是唯一的重大变化。很少的 API 更改,没有什么不兼容的。 9.1 版在功能上等同于 Jakarta EE 9。

雅加达 EE 9

Jakarta EE Platform 9 是 released 2020-12。

重点是从各种规范中删除商标 Java 名称。这包括移动到新的包名称jakarta.*。从某种特定意义上说,这是一个破坏性版本,因为项目必须更新到新包才能在 EE 9 服务器上运行。更改包名称后,现有应用程序将运行良好,只需很少或没有其他更改。

引用Jakarta EE 9 Release Plan页面:

Jakarta EE 9 版本的目标是提供一组功能上与 Jakarta EE 8 相似但在新的 Jakarta EE 9 命名空间jakarta.* 中的规范。

此外,Jakarta EE 9 版本从 Jakarta EE 8 中删除了旧的、可选的或已弃用的规范,以减少 API 的表面积,以确保新供应商更容易进入生态系统 - 因为并减轻这些旧 API 的实施、迁移和维护负担。

项目团队主要将 Jakarta EE 9 视为一个工具版本……

尽管您可能会期望行为上的向上兼容性,但命名更改意味着版本 9 及更高版本 不是 是嵌入式二进制替代品。不是世界末日。这可能意味着您在各种类文件中更改import 包名称。阅读this 和this 了解详细信息和链接。

雅加达 EE 8

Jakarta EE Platform 8 实际上与 Java EE 8 相同。

作为从 Oracle 过渡的一部分,Eclipse 团队将 Java EE 8 重新发布为 Jakarta EE 8,使用他们新的基础架构来存放代码和构建。相同的 EE 行为,相同的内部命名和包结构。因此,下面讨论的有关 Java EE Web Profile 与 Java EE Full Platform 的问题仍然适用。

Jakarta EE 8 使用从 Oracle 公司借来的 javax.* 包命名。版本 9 将包命名更改为 jakarta.*

Java EE 8

Java EE 8 于 2017 年发布。见history of versions。

详情请见JSR 366: Java Platform, Enterprise Edition 8 (Java EE 8) Specification。

Java EE 是Java Standard Edition (Java SE) 的超集。任何 Java EE 8 实现也是 Java SE 8 或更高版本的实现。

查看由 Oracle 发布的 list of Java EE 8 technologies,其中包含指向 JSR 和规范的链接。

所有个人资料

所有 Java EE 配置文件中都必须包含以下技术:

• Java SE 版本8 (or later)

• Common 定义的资源和组件生命周期注释 注释规范(Resource、Resources、PostConstruct、PreDestroy)

•JNDI“java:”命名上下文

• Java 事务 API (JTA)

网络资料

Web Profile 是整个 Java EE 平台的一个特定子集,专注于常用元素。由Apache TomEE 等产品实现,或几乎与Eclipse Jetty plus add-ons 实现。

• 所有 Java EE 配置文件所需的基本级别项目(上面列出:Java SE 8、生命周期注释、JNDI java: 上下文和 JTA)

• Servlet 4.0 (JSR 369)

• JavaServer 页面 (JSP) 2.3

• 表达式语言 (EL) 3.0 (JSR 341)

• 其他语言的调试支持 (JSR-45) 1.0

• JavaServer Pages (JSTL) 1.2 标准标记库

• JavaServer Faces (JSF) 2.3 (JSR 372)

• 用于 RESTful Web 服务的 Java API (JAX-RS) 2.1

• 适用于 WebSocket 的 Java API (WebSocket) 1.1 (JSR 356)

• 用于 JSON 处理的 Java API (JSON-P) 1.1 (JSR 374)

• 用于 JSON 绑定的 Java API (JSON-B) 1.0 (JSR 367)

• Java 平台 (JSR-250) 1.3 的通用注释• Enterprise JavaBeans (EJB) 3.2 Lite

• Java 事务 API (JTA) 1.2

• Java 持久性 API (JPA) 2.2

•Bean Validation2.0 (JSR 380)

• 托管 Bean 1.0

• 拦截器 1.2

• Java EE Platform 2.0 的上下文和依赖注入

• Java 1.0 的依赖注入

• Java EE 安全 API 1.0

• 容器的​​ Java 身份验证服务提供者接口 (JASPIC) 1.1

面向 Servlet(Tomcat & Jetty

作为使用 Web Profile 实现的更轻松的替代方案,您可以从 Java Servlet/JSP 实现开始,例如 Apache TomcatEclipse Jetty。虽然不是官方的个人资料,但这种方法非常受欢迎。有时称为web container

HTTPweb server Servlet JavaServer Pages (JSP) Expression Language (EL) Standard Tag Library WebSocket JNDI server

恕我直言,这早就应该正式化为 JavaEE / Jakarta EE 配置文件了。鉴于 Tomcat 和 Jetty 的广受欢迎,对我来说,正式配置文件的必要性和好处似乎很明显。

使用此设置时,您可以选择性地添加独立库,以选择性地从各种 Java EE 技术中受益。例如,对于我自己使用Vaadin Flow 构建Web 应用程序的工作,我使用Java SE 和Tomcat。有时我会手动添加一个 Bean Validation 实现库,因为这就是我需要的 Java EE 技术列表中的全部内容。

一些 Jakarta EE 规范已经过重新设计,可以直接与基于 Java SE 的应用程序一起使用,而无需 Jakarta EE 服务器。并且正在计划更多这样的重新设计。此类规范的实现可以与 Tomcat 或 Jetty 一起使用。

当然,在某些时候,与其继续向您的 Tomcat/Jetty 项目中添加更多面向 Jakarta EE 的库,不如改用符合更广泛的 Jakarta EE 配置文件之一的服务器可能更有意义。

完整的 Java EE

需要以下技术:

• 网络资料中的所有项目

• EJB 3.2(EJB 实体 bean 和关联的 EJBQL 除外,它们已成为可选)

• JMS 2.0

• JavaMail 1.6

• 连接器 1.7

• 网络服务 1.4

• 并发实用程序 1.0

• Batch1.0

• Java EE 管理 1.1

• JACC 1.5

• JSP 调试 1.0

• 网络服务元数据 2.1

以下技术是可选的:

• EJB 3.2 和更早版本的实体 bean 和关联的 EJB QL

• JAX-RPC 1.1

• JAXR 1.0

• Java EE 部署 1.2

图表

这是一个显示嵌套需求组的图表。

此图上方的列表可能更准确;此图未经仔细检查。

【讨论】:

请注意,开箱即用的 Tomcat 和 Jetty 都包含 JASPIC 的 Servlet 容器配置文件,它本身就是完整 JASPIC 的子集(有点像 EJB-lite) 亲爱的投票者,请在投票的同时留下批评意见。 @ArjanTijms 您能否提供有关 JASPIC 的 Servlet 容器配置文件的参考或文档的链接?我想将该信息合并到答案中。 Servlet Container Profile 的来源在这里:github.com/eclipse-ee4j/authentication/blob/master/spec/src/… 官方(里程碑)渲染版本在这里:jakarta.ee/specifications/authentication/2.0/… 感谢您在这里的出色回答:) 好答案,谢谢!仅供参考,有一个指向 Web 配置文件规范的 Eclipse 主页的链接,包括 8、9、9.1 和 10:jakarta.ee/specifications/webprofile

以上是关于Java EE Web 配置文件与 Java EE 完整平台的主要内容,如果未能解决你的问题,请参考以下文章

Java EE 容器与 Web 容器

请问Java ee与Javaweb 有啥区别

Java EE (14) -- SSH配置

java EE

各种容器与服务器的区别与联系:Servlet容器WEB容器Java EE容器应用服务器WEB服务器Java EE服务器

关于 高分 !Java j2EE Web技术