Java近期新闻:JDK 21的JEP、Spring Cloud AWS 3.0以及OptaPlanner转移至Timefold
JEP 448,Vector API(第六轮孵化),已经从 JDK 21 的 Candidate 状态 提升 至 Proposed to Target 状态。这个 JEP 位于 Panama 项目中,它纳入了前五轮孵化反馈的改进,即 JDK 20 交付的 JEP 438,Vector API(第五轮孵化)、JDK 19 交付的 JEP 426,Vector API(第四轮孵化)、JDK 18 交付的 JEP 417,Vector API(第三轮孵化)、JDK 17 交付的 JEP 414,Vector API(第二轮孵化) 和 JDK 16 交付的 JEP 338,Vector API(孵化)。该特性的目标是增强 Vector API,从而能够根据 JEP 424, 外部函数与内存 API(预览)的定义,从 MemorySegment 中加载和存储 Vector。该轮审查预计会在 2023 年 5 月 9 日结束。
JEP 445,无名类和实例主方法(Unnamed Classes and Instance Main Methods)(预览)已经从 JDK 21 的 Candidate 状态 提升 至 Proposed to Target。这个特性的 JEP 以前被称为灵活主方法和匿名主类(Flexible Main Methods and Anonymous Main Classes)(预览)以及隐式类和主方法增强(Implicit Classes and Enhanced Main Methods)(预览),提议“改进 Java 语言,以便于让学生无需了解为大型程序所设计的语言特性,就能编写出第一个程序”。这个 JEP 进一步推进了甲骨文的 Java 语言架构师 Brian Goetz 在 2022 年 9 月份所发表的博客文章 “Paving the on-ramp”。甲骨文技术团队的顾问成员 Gavin Bierman 发布了规范文档的第一个草案,供 Java 社区审查。该轮审查预计会在 2023 年 5 月 12 日结束。InfoQ 会以更详细的新闻报道进行跟踪。
JEP 441,switch 的模式匹配,已经从 JDK 21 的 Candidate 状态 提升为Proposed to Target 状态。该 JEP 最终确定了这一特性,并针对前四轮预览的反馈添加了一些改进,即 JDK 20 交付的 JEP 433,switch 的模式匹配(第四轮预览)、JDK 19 交付的 JEP 427,switch 的模式匹配(第三轮预览)、JDK 18 交付的 JEP 420,switch 的模式匹配(第二轮预览) 以及 JDK 17 交付的 JEP 406,switch 的模式匹配(预览)。该特性通过对 switch 表达式和语句进行模式匹配,增强了语言的功能。该轮审查预计会在 2023 年 5 月 11 日结束。InfoQ 会以更详细的新闻报道进行跟踪。
JEP 440,记录模式(Record Patterns),已经从 JDK 21 的 Candidate 状态 提升 到了 Proposed to Target 状态。该 JEP 最终确定了这一特性,并针对前两轮预览的反馈添加了一些改进,即 JDK 20 交付的 JEP 432,记录模式(第二轮预览) 和 JDK 19 交付的 JEP 405,记录模式(预览)。该特性使用记录模式来解构记录值,以实现对语言的增强。记录模式可以与类型模式结合使用,以“实现强大的、声明式的、可组合的数据导航和处理形式”。类型模式最近通过 JDK 18 交付的 JEP 420,switch 模式匹配(第二次预览) 和 JDK 17 交付的 JEP 406,switch 模式匹配(预览) 扩展到了 switch
case 标签中。JEP 432 最重要的变化是移除了对出现在增强型 for
语句中的记录模式的支持。该轮审查预计会在 2023 年 5 月 11 日结束。InfoQ 会以更详细的新闻报道进行跟踪。
JEP 439,Generational ZGC,已经从 JDK 21 的 Candidate 状态提升为Proposed to Target 状态。该 JEP 建议“通过扩展 Z 垃圾收集器(ZGC)来提升应用的性能,使年轻对象和老对象保持独立的分代。这将允许 ZGC 更频繁地收集年轻的对象,这些对象往往会在较为年轻的时候就已经死亡了。”该轮审查预计会在 2023 年 5 月 10 日结束。InfoQ 会以更详细的新闻报道进行跟踪。
JEP 404,Generational Shenandoah(实验阶段),已经从 JDK 21 的 Candidate 状态提升到了 Proposed to Target 状态。该 JEP 建议“通过分代的收集功能增强 Shenandoah 垃圾收集器,以提高可持续的吞吐量、负载高峰的韧性和内存利用率。”与其他垃圾收集器(比如 G1、CMS 和 Parallel)相比,Shenandoah 目前需要额外的堆头部空间(headroom),并且更难恢复不可达对象占用的空间。该轮审查预计会在 2023 年 5 月 12 日结束。InfoQ 会以更详细的新闻报道进行跟踪。
JEP 450,紧凑的对象头信息(Compact Object Headers)(实验阶段) 已经从 JEP Draft 8294992 提升到了 Candidate 状态。在 Lilliput 项目 的支持下,该 JEP 草案建议将 Java 对象的头信息从 96 或 128 比特减少至 64 比特。Lilliput 项目由亚马逊云科技的首席工程师 Roman Kennke 创建,该项目在 2022 年 5 月实现了 64 比特的头信息,这是其第一个里程碑。
甲骨文的编程语言设计师 Daniel Smith 已经宣布,原名为空限制值对象存储(Null-Restricted Value Object Store)(预览)和基本类型类(Primitive Classes) (Preview) 的 JEP 401 改名为值对象的扁平化堆分布(Flattened Heap Layouts for Value Objects)。Smith 提供了一份更新的规范文档供社区审查。
JDK 21 的早期访问构建版本 Build 21 发布,该版本是对 Build 20 的更新,包含了对各种问题的修复。关于该版本的更多细节,请参阅发布说明。
对于 JDK 21,鼓励开发人员通过 Java Bug 数据库报告缺陷。
Spring Boot 3.1.0 第二个发布候选版本提供了一些新特性,比如,将 DockerComposeProperties 类中的默认关闭设置为 stop
;自动应用 TestcontainersLifecycleApplicationContextInitializer 类进行上下文测试;增加对 SQL Server、Oracle Database、Liquibase、Flyway 和 Cassandra 数据库的 Docker Compose 服务连接支持。同时,Couchbase SSL 的 keystore 属性 spring.couchbase.env.ssl.key-store
和 spring.couchbase.env.ssl.key-store-password
被弃用,转而使用 Couchbase 中对 SSL 绑定的支持。关于该版本的更多细节,请参阅发布说明。
Spring Modulith 0.6 提供了缺陷修复、依赖性升级以及值得关注的新特性,例如,如果启用了事件发布注册表,则自动配置 MongoDB 事务;事件发布注册表支持异步处理和关闭行为;@EnableScenario
注解,用来在 @SpringBootTest
集成测试中使用 Scenario Testing API;支持 Application Module Canvas 中的 jMolecules 架构类型。Spring Modulith 团队还决定将该项目提升为顶级的、非实验性的 Spring 项目,并计划在 Spring Boot 3.1 的 GA 发布后发布 1.0-M1 版本。关于该版本的更多细节,请参阅发布说明。
Spring Cloud for Amazon Web Services 的 3.0.0 版本发布,其新特性包括,与 Spring Boot 3.0 兼容;构建在 AWS SDK V2 for Java 之上;重写的 SQS 集成模块;对 DynamoDB 的重新集成。关于该版本的更多细节,请参阅发布说明。
Spring Cloud Data Flow 2.10.3发布,主要解决了传递性依赖中的安全性问题,比如,spring-security-oauth2-client-5.4.2
、spring-expression-5.2.11
、spring-webmvc-5.3.25
、json-smart-2.3
和 jettison-1.51
。此外,还有 Spring Boot 2.7.11 和 Spring Cloud 子项目的依赖性升级。关于这个版本的更多细节,请参阅发布说明。
Spring Tools 4.18.1发布,其特性包括,支持在探查 @Value 注解时导航到 Spring 属性文件;支持属性导航中的 @ConditionalOnProperty 注解,以及使用 Eclipse 2023-06 里程碑版本构建。Spring Tools 团队预计 4.19.0 版本将在 2023 年 6 月底发布。关于这个版本的更多细节,请参阅发布说明。
Infinispan 14.0.9.Final发布,其重要变化包括,修复 Infinispan 第三方集成测试与 JDK17 之间的问题;文档记录如何监控跨站复制;删除对 Jaeger 测试容器的依赖,并修复属性文件中的端口号。关于这个版本的更多细节可以在变更日志中找到。
IBM发布了Open Liberty 23.0.0.4,其特性包括,为 ARM64 架构以及现有的 AMD64、PPC64LE 和 S390X 架构提供容器镜像;解决了 CVE-2023-24998,即 Apache Commons FileUpload 中的一个漏洞,由于请求部分的数量没有进行限制,攻击者可以通过恶意上传触发拒绝服务攻击。
Quarkus 3.0.2.Final 是第二个维护版本,其中有一些值得注意的变化,比如,在 Infinispan Dev Services 指南中把 server-list
文件改名为 hosts
;修复 Dev UI2 显示错误 Java 版本的问题;解决 Kubernetes Dev Services 指南中没有正确记录 k3s
名称的问题;修正 RESTEasy Reactive 流资源方法导致原生模式下出现 NoSuchMethodException
异常的问题。关于这个版本的更多细节,请参阅发布说明。
Quarkus 2.16.7.Final发布,其特性包括,修复了 OIDC 代码加载令牌解密密钥时的算法对比缺陷;OIDC UserInfo 类的一个微小更新,如果给定名称的字符串或布尔属性不存在,会抛出 NullPointerException
;解决 Quarkus dev
模式在使用 @ApplicationScoped
注解时无法与某种类型的项目目录树协同运行的问题;修正如果 OIDC 客户端无法获取令牌会抛出异常的问题。关于这个版本的更多细节,请参阅发布说明。
甲骨文发布了 Helidon 3.2.1,其新特性包括, JpaExtension 类的启用标志,以允许后续的重构和替换;与 MicroProfile Rest Client 和 Fault Tolerance 规范进行集成的变化,以处理因 Weld 规范中的默认调用上下文问题而产生的异步调用;支持与 Jaeger OpenTelemetry 不同传播器的集成。关于这个版本的更多细节,请参阅发布说明。
Apache Camel 4.0.0 的第三个里程碑版本包含缺陷修复、依赖性升级和功能增强,例如,改变默认的 Micrometer 指标名称以遵循 Micrometer 命名约定;支持 Micrometer Observation;在 Spring Boot 实现中直接使用 HTTP 服务器;为添加 / 删除的 HTTP 端点添加监听器,使运行时(如 Spring Boot)更容易使用 Camel 的 platform-http
和自己的 HTTP 服务器。关于这个版本的更多细节,请参阅发布说明。
Arquillian 1.7.0.Final发布,其特性包括,支持 Jakarta Servlet 6.0;支持 @ArquillianResource 注解注入的 URL 使用 HTTPS;修复了使用 TestNG 7.5+ 时 LoggerFactory 类出现的 NoClassDefFoundError
异常的问题。关于这个版本的更多细节可以在更新日志中找到。
OptaPlanner 是一个面向软件开发人员的开源人工智能约束解算器(constraint solver),它将转移至 Timefold,这是一家由 Maarten Vandenbroucke(联合创始人兼 CEO)和 Geoffrey De Smet(联合创始人兼 CTO)创建的新规划优化公司。OptaPlanner 是 De Smet 在红帽公司担任高级首席软件工程师时创建的,在红帽公司的支持下,OptaPlanner 已经发展成熟,提供了他们自己的版本。InfoQ 会以更详细的新闻报道进行跟踪。
原文链接:
Java News Roundup: JEPs for JDK 21, Spring Cloud AWS 3.0, OptaPlanner to Timefold(https://www.infoq.com/news/2023/05/java-news-roundup-may01-2023/)
声明:本文为 InfoQ 翻译,未经许可禁止转载。
点击底部阅读原文访问 InfoQ 官网,获取更多精彩内容!
微软Copilot“杀疯了”:Windows引入AI助手、Bing接入ChatGPT,弯道超车的机会来了?
微信扫码关注该文公众号作者