Java EE Web Profile与Java EE Full Platform的区别

91

Java EE Web Profile认证服务器(如JOnAS)和Java EE Full Platform认证服务器(如JBoss AS)之间的区别是什么?


1
可能是Java EE包有什么不同?(SDK /普通与Web Profile)的重复问题。 - Basil Bourque
4个回答

120

这里有一张漂亮的图片来解释它。Web Profile 是 Java EE 的一个子集,其目的是允许开发人员创建更轻量级的应用程序,可以在简单的 Servlet 容器(如 Tomcat 或 Jetty)中使用。

输入图像描述


3
更新:Web配置文件已更新。服务器组件已移至Web配置文件,例如JAX-RS、JAX-B等,并添加了一些新组件,如JSON-P。有关更多详细信息,请参阅Jakarta EE的此文档:https://jakarta.ee/specifications/webprofile/8/webprofile-spec-8.pdf。 - TarunChhabra

60

tl;dr

一个符合Jakarta EE平台配置文件的应用服务器实现了十几个以上的规范,而符合Jakarta EE Web配置文件的应用服务器则实现了更少的功能。

换句话说,符合Web配置文件的服务器提供平台配置文件兼容服务器所提供功能的子集:

平台配置文件= Web配置文件+更多内容

Oracle Corp过渡到Eclipse Foundation

在2017年末,Oracle将Java EE的责任移交给了Eclipse基金会。 Java EE 8之后的未来版本将被称为Eclipse Enterprise For Java(EE4J),或称为Project EE4J,或者可能是EE.next,或Jakarta EE。品牌已经在变化。
Java SE变化的影响。
在Java SE 11中,一些模块被删除了。与Java EE相关的部分正在迁移到Jakarta EE项目的新家。其他模块,如CORBA已经向任何感兴趣的组织提供采用。请参见JEP 320

Jakarta EE 10

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

版本10可能涉及一些兼容性问题,以促进创新。但还没有最终确定。如果您有兴趣/关注/建议/贡献,请立即参与开放式进程。

Java SE 11将成为Jakarta EE兼容实现所支持的最低运行时版本。
更多信息,请参见:

Jakarta EE 10中的平台配置文件

有关平台配置文件计划更改的概述,请参见《定义Jakarta EE平台10#364》

Jakarta EE 10中的核心配置文件

雅加达 EE 10 可能会增加一个新的配置文件 Core Profile,除了当前的 Web Profile 和 (完整的) Platform Profile
核心平台针对适用于 微服务预编译 的较小运行时。请参阅 GitHub 页面 Define Jakarta EE Core Profile 10 #387

Web Profile 在 Jakarta EE 10 中

Ivar Grimstad提议在Java EE 10中对Web Profile进行更改,列在定义Jakarta EE Web Profile 10#363上。

新增提议

主要更新

小更新

这段文本是关于 Jakarta 技术的版本更新信息。其中,Jakarta Server Pages 从 3.0 版本升级到了 3.1 版本,Jakarta WebSocket、Jakarta JSON Processing、Jakarta JSON Binding 和 Jakarta Persistence 同样也有版本的更新。

没有更新

  • Jakarta Debugging Support for Other Languages 2.0
  • Jakarta Annotations 2.0
  • Jakarta Enterprise Beans 4.0 Lite
  • Jakarta Transactions 2.0
  • Jakarta Bean Validation 3.0
  • Jakarta Managed Beans 2.0
  • Jakarta Interceptors 2.0
  • Jakarta Dependency Injection 2.0

Jakarta EE 9.1

Jakarta EE 9.12021年5月发布

参见:

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

Jakarta EE 9

Jakarta EE Platform 92020年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包名称。详细信息和链接请阅读thisthis

Jakarta EE 8

Jakarta EE平台8Java EE 8几乎相同。

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

Jakarta EE 8使用了从Oracle Corp借用的javax.*包命名。第9版将包命名更改为jakarta.*

Java EE 8

Java EE 8于2017年发布。请参见版本历史记录

有关详细信息,请参见JSR 366:Java平台企业版8(Java EE 8)规范

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

请参见由Oracle发布的Java EE 8技术列表,其中包含到JSR和规范的链接。

所有配置文件

以下技术必须在所有Java EE配置文件中存在:
Java SE版本8(或更高版本) • 由公共注释规范定义的资源和组件生命周期注释(Resource,Resources,PostConstruct,PreDestroy)
JNDI“java:”命名上下文
• Java事务API(JTA)

Web配置文件

Web Profile是完整Java EE平台的一个特定子集,专注于常用元素。由产品例如Apache TomEE或几乎相同的Eclipse Jetty加上插件实现。

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

• Servlet 4.0(JSR 369

• JavaServer Pages(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 Services的Java API(JAX-RS)2.1
• WebSocket的Java API(WebSocket)1.1(JSR 356
• JSON处理的Java API(JSON-P)1.1(JSR 374
• Java API for JSON Binding (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验证2.0 (JSR 380)
• 管理bean 1.0
• 拦截器 1.2
• Java EE平台的上下文和依赖注入 2.0
• Java依赖注入 1.0
• Java EE 安全 API 1.0
• 容器的 Java 认证服务提供程序接口 (JASPIC) 1.1
Servlet 导向 (Tomcat & Jetty)
作为使用 Web Profile 实现的轻量级替代方案,您可以从一个 Servlet/JSP 实现开始,例如 Apache TomcatEclipse Jetty。虽然不是官方的配置文件,但这种方法非常流行。有时被称为 Web 容器

在我看来,这应该早就被正式制定为JavaEE / Jakarta EE配置文件。考虑到Tomcat和Jetty的巨大流行,一个正式的配置文件的需求和好处对我来说是显而易见的。

使用此设置时,您可以有选择地添加独立库以有选择地从各种Java EE技术中受益。例如,对于我自己构建Web应用程序使用Vaadin Flow的工作,我使用带有Tomcat的Java SE。有时,我会手动添加Bean Validation实现库,因为这是我从Java EE技术列表中所需的全部。
一些Jakarta EE规范已经重新设计,以便直接与基于Java SE的应用程序一起使用,而无需Jakarta EE服务器。并且正在计划更多这样的重新设计。这些规范的实现可以与Tomcat或Jetty一起使用。
当然,在某个时候,与其不断向Tomcat/Jetty项目添加更多的Jakarta EE定向库,不如切换到使用符合更广泛的Jakarta EE配置文件之一的服务器更有意义。
完整的Java EE包括以下技术:
• Web Profile中的所有项目
• EJB 3.2(除了EJB实体bean和相关的EJBQL是可选项)
• JMS 2.0
• JavaMail 1.6
• Connector 1.7
• WebServices 1.4
• Concurrency Utilities 1.0
• Batch1.0
• Java EE Management 1.1
• JACC 1.5
• JSP Debugging 1.0
• Web Services Metadata 2.1
以下技术是可选的:
• EJB 3.2及早期的实体bean和相关的EJB QL
• JAX-RPC 1.1
• JAXR 1.0
• Java EE 部署 1.2
图表
这是一个图表,展示了嵌套的需求组。

diagram of nested groups of various technologies required by Java SE 8, web containers, Java EE 8 Web Profile, Java EE 8 Required, and Java EE 8 Optional

这个图表上方的列表可能更准确;这个图表尚未进行双重检查。

请注意,Tomcat和Jetty默认都包含JASPIC的Servlet容器配置文件,它本身是完整JASPIC的子集(有点像EJB-lite)。 - Arjan Tijms
1
亲爱的投反对票者,请在您的投票中留下批评意见。 - Basil Bourque
@ArjanTijms,您能提供有关JASPIC Servlet容器配置文件的参考资料或文档链接吗? 我想将该信息并入答案中。 - Basil Bourque
Servlet容器配置文件的源代码在这里:https://github.com/eclipse-ee4j/authentication/blob/master/spec/src/main/asciidoc/servlet-container-profile.adoc官方(里程碑)渲染版本在这里:https://jakarta.ee/specifications/authentication/2.0/authentication-spec-2.0-SNAPSHOT.html#a365感谢您在这里提供如此好的答案 :) - Arjan Tijms
好的回答,谢谢!顺便提一下,这里有一个链接指向Eclipse主页上Web Profile规范的页面,其中包括8、9、9.1和10版本:https://jakarta.ee/specifications/webprofile/ - torez233

6

Java EE 6规范(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
  • Connector 1.6
  • Web Services 1.3
  • JAX-RPC 1.1
  • JAX-WS 2.2
  • JAX-RS 1.1
  • JAXB 2.2
  • JAXR 1.0
  • Java EE Management 1.1
  • Java EE Deployment 1.2
  • JACC 1.4
  • JASPIC 1.0
  • JSP Debugging 1.0
  • JSTL 1.2
  • Web Services Metadata 2.1
  • JSF 2.0
  • Common Annotations 1.1
  • Java Persistence 2.0
  • Bean Validation 1.0
  • Managed Beans 1.0
  • Contexts and Dependency Injection for Java EE 1.0
  • Dependency Injection for Java 1.0
没有可选的技术。

Web Profile定义

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

  • Servlet 3.0
  • JavaServer Pages (JSP) 2.2
  • Expression Language (EL) 2.2
  • Debugging Support for Other Languages (JSR-45) 1.0
  • Standard Tag Library for JavaServer Pages (JSTL) 1.2
  • JavaServer Faces (JSF) 2.0
  • Common Annotations for theJava Platform (JSR-250) 1.1
  • Enterprise JavaBeans (EJB) 3.1 Lite
  • Java Transaction API (JTA) 1.1
  • Java Persistence API (JPA) 2.0
  • Bean Validation 1.0
  • Managed Beans 1.0
  • Interceptors 1.1
  • Contexts and Dependency Injection for the Java EE Platform 1.0
  • Dependency Injection for Java 1.06

Web Profile中没有可选组件。

对于Java EE 7,有一个list列出了所有EE技术,并显示哪些包含在Web Profile中。一些以前仅在Full Profile中可用的技术现在已包含在Web Profile中,例如JAX-RS。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接