您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

Spring Boot 3.0为什么废弃了JavaEE,改用了Jakarta EE?

时间:2023-07-29 14:37:50  来源:今日头条  作者:一个即将退役的码农

导言

最近看Spring Boot 3.0的代码,发现Servlet相关的包的命名空间从JAVAx改变为了jakarta。这可是一个非常大的破坏性更新,看了下Spring 3.0的更新日志,有一条更新日志是:从JavaEE迁移到Jakarta EE。为什么要做这种破坏性的迁移呢?JavaEE怎么了?Jakarta EE又是什么?

什么是Jakarta EE

简单来说,Jakarta EE就是Java EE的新名词。这里的EE全称是Enterprise Edition,它是专门为企业级Java应用定义的一套规范,与Java SE(Java Platform, Standard Edition)相对应。

JavaEE是从Java 1.2版本开始推出的Java企业级开发平台,最初的名称是J2EE(Java 2 Platform, Enterprise Edition)。 随着Java的发展,它的名称于Java1.5版本时更改为Java EE(Java Platform, Enterprise Edition)。2009年Oracle收购了Sun,JavaEE开始由Oracle通过JCP(Java Community Process)开发和维护。

直到2017年,Oracle将JavaEE提交给了Eclipse基金会,并命名为Eclipse Enterprise for Java。然而,由于“Java”这个名字的商标归Oracle所有,Eclipse基金会无法继续使用javax.*和java.*,因此,项目名称改为Jakarta EE。值得一提的是,Jakarta(雅加达)是Java岛(爪洼岛)上最大的城市,也是印度尼西亚的首都。Apache软件基金会孵化的项目也有名称为Jakarta的,不要混淆了这两个项目,两者没有任何关系。

而作为JavaEE的后继者,Jakarta EE在JavaEE的基础上,专注于推进云原生Java应用的相关规范。随着云原生技术的发展和普及,企业对于构建高度可扩展、弹性伸缩的云原生应用的需求也在不断增长。Jakarta EE在这个背景下,提供了更多支持云原生开发的规范和功能,以满足企业在云环境中的需求,促进Java应用在云原生时代的发展。

那么,企业级开发规范具体是指什么呢?跟我们平时开发的Java程序有什么区别?

什么是企业级规范

企业级开发规范(Enterprise Edition)是针对大型企业级Java应用而设计的一套标准规范。相对于Java SE,Jakarta EE提供了更多的功能和组件,用于开发复杂的分布式、可扩展的企业级应用以及云原生Java应用。这么说还是比较抽象,其实Java开发经常接触到的Servlet,JSP,EJB,JMS就是其中的规范。这么说还是比较抽象,其实Java开发经常接触到的Servlet,JSP,EJB,JMS就是其中的规范。

Jakarta EE包含了许多技术规范和API,涵盖了Web应用、数据库访问、消息传递、事务处理、安全性等方面的功能,其中包括但不限于下列规范:

  1. Jakarta Servlet:前身是J2EE Servlet,定义了如何管理HTTP请求的规范。这应该是大部分Java Web开发者最熟悉的,同时也是许多其它规范的基础。
  2. Jakarta Server Page(JSP) :服务端动态生态生成网页的技术,可以看作Java版本的php和ASP。
  3. Jakarta Websocket:定义了一套WebSocket连接相关的API,用于实现全双工通信。
  4. Jakarta RESTful Web Services:开发符合REST原则的Web服务的一套规范。
  5. Jakarta JSON Binding:Java类和JSON字符串互相转换的规范。
  6. Jakarta XML Binding:Java类和XML的映射规范。
  7. Jakarta Enterprise Beans(EJB) :这个规范比较复杂,包括EJB容器,RMI(远程过程调用),并发控制,依赖注入等。
  8. Jakarta Persistent(JAP) :ORM规范,定义了Java类和数据库表直接的映射规范。
  9. Jakarta Transactions(JTA) :包含了事务相关的接口和注解类,也用于管理分布式事务。
  10. Jakarta Messaging(JMS) :消息系统的规范,用于实现异步消息传递,比如Apache的ActiveMQ就实现了这套规范。
  11. Validation:提供了接口和注解类,用于声明式地校验Bean,确保数据的合法性。

要部署Jakarta EE应用,就需要实现了Jakarta EE规范的服务器,比如Eclipse的GlassFish,IBM的WebSphere Liberty,Red Hat的WildFly等。

值得注意的是,Spring Boot广泛使用的Undertow,Tomcat和Jetty都不是Jakart EE服务器,它们只是Web服务器。Jakarta EE是一套相对重量级的规范和框架,而Spring提供了一套更轻量级的开发框架,目前被大部分互联网企业广泛采用。不过Spring很多项目都会尽量遵守这些规范,你在Spring的文档中也会经常接触到这些规范名称,比如Servlet,JAP等。

要不要升级到Jakarta EE

Jakarta EE 9之前的版本完全兼容J2EE,而Jakarta EE 9版本将API的命名空间从javax改成了jakarta,功能上没有多大变化。

如果要升级到Jakarta EE 9,一定要确保直接或者间接依赖的包都有兼容Jakarta EE 9的版本,也就是说对javax包的引用都要改成jakarta。Spring Boot 3.0和Spring 6系列都以及升级到了Jakarta EE 9,因此升级了Spring Boot和Spring也就相当于要升级到Jakarta EE 9。这也是升级到Spring Boot 3的一个最大的障碍。另外,在Jakarta 9.1版本中,也增加了对Java 11的支持,建议同时升级到Java 11。

至于目前最新版的Jakarta EE 10,它引入了许多变化,废弃和删除了一些规范,并引入了新功能。该版本面向Java 11,也支持LTS版本Java 17。然而,Jakarta EE 10的使用还不是很广泛,Spring也还没升级,只是做好了升级准备,目前不建议立刻升级。

总结

总的来说,Jakarta EE就是Java EE的新名词。本来大部分开发者来说,这个名称的变化本来不应该是一个很重要的问题。然后,由于Java商标的问题,导致了项目名称和包命名空间的修改,从而引入不兼容的更新。因此,升级Jakarta EE 9及之后版本,必须特别注意将所有javax的引用都改为jakarta,包括直接或间接依赖的部分,否则可能会出现难以排查的异常问题。

在升级Spring Boot 3.0之前,尤其要充分考虑这一点,确保所有相关依赖和代码都适配了Jakarta EE的新命名空间,以避免潜在的兼容性问题。这是升级到Spring Boot 3.0的一个重要考虑因素,需要在升级之前对项目的依赖和代码做充分的准备和调整。



Tags:Spring Boot   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Spring Boot 3.0是什么?
Spring Boot 3.0是一款基于Java的开源框架,用于简化Spring应用程序的构建和开发过程。与之前的版本相比,Spring Boot 3.0在多个方面进行了改进和增强,使其更加易用、高效和灵活...【详细内容】
2024-01-11  Search: Spring Boot  点击:(132)  评论:(0)  加入收藏
GraalVM与Spring Boot 3.0:加速应用性能的完美融合
在2023年,SpringBoot3.0的发布标志着Spring框架对GraalVM的全面支持,这一支持是对Spring技术栈的重要补充。GraalVM是一个高性能的多语言虚拟机,它提供了Ahead-of-Time(AOT)编...【详细内容】
2024-01-11  Search: Spring Boot  点击:(124)  评论:(0)  加入收藏
Spring Boot Starter的原理
Spring Boot Starter 是 Spring Boot 框架的特性之一,用于简化应用程序的依赖管理和配置。1. 概述: - Spring Boot Starter 是一种包含了一组特定功能和依赖关系的依赖项,旨在...【详细内容】
2024-01-05  Search: Spring Boot  点击:(93)  评论:(0)  加入收藏
Spring Boot 统一响应体处理器详解
在Spring Boot应用中,统一处理响应体是一项非常重要的任务,它可以让我们更方便地统一规范API的返回格式。今天,我们将深入探讨一个优雅的解决方案——使用ResultHand...【详细内容】
2023-11-30  Search: Spring Boot  点击:(150)  评论:(0)  加入收藏
Spring Boot 调优内嵌 Tomcat 的三种方法
在 Spring Boot 中优化 Apache Tomcat 有三种方式,以便实现更好的性能和资源利用率。 线程池(连接器和执行器)设置 使用 NIO 或 APR 连接器 JVM优化线程池设置在 Spring Boot...【详细内容】
2023-11-23  Search: Spring Boot  点击:(227)  评论:(0)  加入收藏
Spring Boot + Vue3 前后端分离 实战wiki知识库系统
下栽の地止:https://www.itwangzi.cn/2508.html Spring Boot + Vue3 前后端分离 实战wiki知识库系统在当今的Web应用开发中,前后端分离已经成为了一种主流的开发模式。Spring...【详细内容】
2023-11-18  Search: Spring Boot  点击:(143)  评论:(0)  加入收藏
Spring Boot 如何整合高性能数据库连接池 HikariCP
当使用Spring Boot整合HikariCP时,您可以更加详细地配置和优化连接池以获得更好的性能。以下是更详细的步骤和示例代码:步骤1:创建Spring Boot项目您可以使用Spring Initializr...【详细内容】
2023-10-26  Search: Spring Boot  点击:(30)  评论:(0)  加入收藏
用 Arthas 定位 Spring Boot 接口的超时问题,让应用起飞
一、背景公司有个渠道系统,专门对接三方渠道使用,没有什么业务逻辑,主要是转换报文和参数校验之类的工作,起着一个承上启下的作用。最近在优化接口的响应时间,优化了代码之后,但是...【详细内容】
2023-10-17  Search: Spring Boot  点击:(262)  评论:(0)  加入收藏
Spring BOOT 启动参数
Spring BOOT 启动参数在Java Web的开发完成后,以前我们都会打包成war文件,然后放大web容器,比如tomcat、jetty这样的容器。现在基于SpringBoot开发的项目,我们直接打包成jar文件...【详细内容】
2023-10-10  Search: Spring Boot  点击:(226)  评论:(0)  加入收藏
ELK 处理 Spring Boot 日志,不错!
大家好,我是不才陈某~在排查线上异常的过程中,查询日志总是必不可缺的一部分。现今大多采用的微服务架构,日志被分散在不同的机器上,使得日志的查询变得异常困难。工欲善其事,必...【详细内容】
2023-09-13  Search: Spring Boot  点击:(345)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(53)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(67)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(86)  评论:(0)  加入收藏
站内最新
站内热门
站内头条