”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Jakarta EE 对开发人员需求的响应效果如何?

Jakarta EE 对开发人员需求的响应效果如何?

发布于2024-10-31
浏览:259

How well did Jakarta EE respond to the needs of developers?

交叉发布在 Ed Burns 博客上。

执行摘要

Jakarta 指导委员会特许了 Jakarta 平台项目,其目标是在 EE 11 的开发中纳入开发人员的反馈。这篇博文回顾了该平台项目的性能,并以 4 分制的方式授予 GPA 3.43 的成绩目标。

介绍

我很荣幸也很荣幸能够帮助交付 Jakarta EE 的下一个版本。几十年来,我在 J2EE/Java EE/Jakarta EE 中担任过许多角色:实现者、规范负责人、倡导者、作者、测试人员等等。然而,我目前的角色对我来说是一个新的发布协调员。

在此职位上,我(与 Arjan Tijms 一起)共同领导 Jakarta 平台项目,该项目负责交付完成的 Jakarta EE 规范(和组件规范)、相应的 TCK,并至少批准兼容的实现所有规格。重要的是,不需要有一种单一的整体实现同时满足所有组件 TCK,但必须有一种通过平台 TCK 的单一整体实现。

本着二十多年前我有幸开始的透明精神,这篇博文探讨了 Jakarta 平台项目在 EE 11 期间在实现指导委员会为平台项目设定的目标之一方面的表现:纳入开发者反馈。

承诺不足和交付过多

制度记忆是人类群体从错误中学习并避免重蹈覆辙的方式。根据这个定义,我希望我们都能同意机构记忆很重要并且值得保存。因为软件是可执行的知识,所以长期运行的开源软件项目是一种特殊的机构记忆。一个由长期运行的开源项目组成的长期运行的生态系统的项目几乎是特殊的顶峰。考虑到所有这些特殊性,纳入开发者反馈意味着什么?

当犯错误的可能成本包含在单个项目中时,显示对开发人员反馈的响应要容易得多。鉴于可能的高成本,Jakarta EE 11 平台项目故意保持低调,以实现纳入开发人员反馈的目标。这是我们对“承诺不足、交付超额”这一久经考验的策略的实施。

在 Jakarta EE 11 发布之前,我们对 Jakarta EE 11 的要求进行了公开社区讨论,并将其记录在 Jakarta EE 11 讨论文档中。让我们回顾一下我们收到的社区意见(主要是开发人员驱动的),看看我们在 EE11 中的表现如何。

承诺不足

  • 雅加达数据

  • 雅加达 NoSQL

  • 采用 Java SE 11、17、21 新功能和重大更改

  • 虚拟线程

  • TCK 重构

  • 以 CDI 为中心

    • CDI 取代托管 bean
    • CDI 取代 EJB
  • 解决冗余 HTTP 堆栈:Servlet 和 REST

  • MicroProfile 和 Jakarta 对齐

  • CORS 支持

  • 雅加达配置

  • 更轻松地从一个供应商迁移到另一供应商

混合发货

我将把交付分为四类:超额交付、已交付、部分交付、未交付。

超额交付

  • Jakarta Persistence - 编程配置而不是 persistence.xml 以及更多 Gavin King 博客文章
  • Jakarta Security - 动态选择身份验证机制 security-311

发表

  • 雅加达数据

    • 是的,这个新规范已出现在平台中。
  • 采用 Java SE 11、17、21 新功能和重大更改。

    • 是的,有许多规范利用了 11 - 21 的新语言功能。
  • TCK 重构(我们将交付这个。我们正在保留它的版本)。

    • Jakarta EE 平台 TCK 是一个重要的软件组件,可实现数十年规模的 IT 投资稳定性价值主张。由于缺乏维护投资,TCK 的软件一直在积累技术债务。在 Jakarta EE 11 中,我们使 TCK 与最先进的测试工具保持同步。随着 Jakarta EE 平台的发展,这项投资将实现更好的兼容性测试,并降低添加更多测试的障碍。
  • API 灵活性,即不再需要 Umbrella JAR。

    • 不再有诸如“我是否必须等待 Jakarta EE xx”才能拥有此功能的问题?
    • Jakarta EE Platform API 现在只是默认 API 的集合。
    • 个别规格可以由用户根据需要排除或升级,
    • 也可以添加新规格。
    • 这使得 Jakarta EE 平台像 Spring Boot 一样灵活,但应用程序中没有实现包袱,两全其美!

有点交付

  • 虚拟线程

    • 并发规范严格指定了注释属性,要求实现利用虚拟线程(如果虚拟线程在运行时可用)。如果您在 Java 21 或更高版本上运行,则在使用注释属性时会获得虚拟线程。如果你在 17 号跑步,你就不会。
  • 以 CDI 为中心

    • CDI 取代托管 bean。

      • 我们做到了
        • 删除@ManagedBean注释。
        • 将 CDI 的“集成”部分从 CDI 规范移至平台规范。
        • Jakarta Concurrency 在 @Asynchronous 注释中添加了调度,以替换 EJB 并发上的 @Scheduled 注释 - 271
        • 将并发资源注入 CDI bean,而不是在 EJB concurrency-348 中使用 @Resource。
        • 删除了 Jakarta REST 中的托管 Bean 支持。
        • 持久性中持久性单元的限定符 - 允许以 CDI 惯用方式注入持久性上下文。
  • Java 新功能

    • Jakarta Persistence 中的可嵌入项和 ID 记录。
    • 表达语言记录。
    • 验证(以前称为 Bean Validation)validation-275 中的记录。
    • 并发中的 Flow API concurreny-368.
  • MicroProfile 和 Jakarta 对齐

    • 我们做到了
      • 创建 Jakarta Security MicroProfile 安全桥规范。

没有交付

  • 雅加达 NoSQL

    • 这在 EE 11 开发周期开始时没有通过投票。在我看来,原因是非技术性的,因此可以通过 EE 12 解决。
  • 解决冗余 HTTP 堆栈:Servlet 和 REST

    • 这是一个非常大的问题。在我看来,需要一个主要供应商支持这个想法并投入大量资源来实现它,可能会向竞争对手捐赠工作,这样他们也可以这样做。
  • CORS 支持

    • 这个甚至没有出现在我的雷达上。
  • 雅加达配置

    • 这个似乎陷入了“MicroProfile 配置足够好”的困境,因此陷入了困境。我认为我们必须说服 MicroProfile 项目允许其从 MicroProfile 转移到 Jakarta EE Core Profile 规范。
  • 让从一个供应商迁移到另一供应商变得更容易

    • 这与每个供应商的商业利益是对立的,所以我认为这一点不会受到太多关注。

概括

让我们定量一下。对于Underpromise列表中的每一项,我都会给出一个字母等级。 A 表示超额交付或交付,B 表示部分交付,D 表示未交付。

反馈纳入 年级
雅加达数据 一个
雅加达 NoSQL D
采用 Java SE 11、17、21 新功能和重大更改 一个
虚拟线程 一个
TCK 重构 一个
以 CDI 为中心 一个
解决冗余 HTTP 堆栈:Servlet 和 REST D
MicroProfile 和 Jakarta 对齐 B
CORS 支持 D
雅加达配置 D
让从一个供应商迁移到另一供应商变得更容易 D

通过这份清单,我们的 GPA 成绩仅为 2.54。不太好。如果我们从列表中删除我认为不现实的开发人员反馈请求(CORS、冗余 HTTP 堆栈、Jakarta 配置、使从一个供应商迁移到另一个供应商变得更容易),我们会得到更好的分数:3.43。不错,但我们还有成长的空间。

版本声明 本文转载于:https://dev.to/edburns/how-well-did-jakarta-ee-11-respond-to-the-needs-of-developers-1824?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在Java中正确显示“ DD/MM/YYYY HH:MM:SS.SS”格式的当前日期和时间?
    如何在“ dd/mm/yyyy hh:mm:mm:ss.ss”格式“ gormat 解决方案:的,请访问量很大,并应为procectiquiestate的,并在整个代码上正确格式不多: java.text.simpledateformat; 导入java.util.calendar; 导入java...
    编程 发布于2025-05-16
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-05-16
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-05-16
  • 如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    如何将多种用户类型(学生,老师和管理员)重定向到Firebase应用中的各自活动?
    Red: How to Redirect Multiple User Types to Respective ActivitiesUnderstanding the ProblemIn a Firebase-based voting app with three distinct user type...
    编程 发布于2025-05-16
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-05-16
  • 为什么我会收到MySQL错误#1089:错误的前缀密钥?
    为什么我会收到MySQL错误#1089:错误的前缀密钥?
    mySQL错误#1089:错误的前缀键错误descript [#1089-不正确的前缀键在尝试在表中创建一个prefix键时会出现。前缀键旨在索引字符串列的特定前缀长度长度,可以更快地搜索这些前缀。了解prefix keys `这将在整个Movie_ID列上创建标准主键。主密钥对于唯一识别...
    编程 发布于2025-05-16
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-05-16
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。 To simplify the process, it's recommended to parse the JSON as an array rather than an object.To do...
    编程 发布于2025-05-16
  • 哪种在JavaScript中声明多个变量的方法更可维护?
    哪种在JavaScript中声明多个变量的方法更可维护?
    在JavaScript中声明多个变量:探索两个方法在JavaScript中,开发人员经常遇到需要声明多个变量的需要。对此的两种常见方法是:在单独的行上声明每个变量: 当涉及性能时,这两种方法本质上都是等效的。但是,可维护性可能会有所不同。 第一个方法被认为更易于维护。每个声明都是其自己的语句,使其...
    编程 发布于2025-05-16
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-05-16
  • `console.log`显示修改后对象值异常的原因
    `console.log`显示修改后对象值异常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    编程 发布于2025-05-16
  • PHP与C++函数重载处理的区别
    PHP与C++函数重载处理的区别
    作为经验丰富的C开发人员脱离谜题,您可能会遇到功能超载的概念。这个概念虽然在C中普遍,但在PHP中构成了独特的挑战。让我们深入研究PHP功能过载的复杂性,并探索其提供的可能性。在PHP中理解php的方法在PHP中,函数超载的概念(如C等语言)不存在。函数签名仅由其名称定义,而与他们的参数列表无关。...
    编程 发布于2025-05-16
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-05-16
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-05-16
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-05-16

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3