OpenJDK
在审查结束后,JEP 463,隐式声明类和实例主方法(Implicitly Declared Classes and Instance Main Methods,第二轮预览),已经在 JDK 22 中从 Targeted 状态提升到了 Proposed to Target 状态。它以前被称为未命名类和实例主方法(Unnamed Classes and Instance Main Methods,预览)、灵活主方法和匿名主类(Flexible Main Methods and Anonymous Main Classes,预览)和隐式类和增强的主方法(Implicit Classes and Enhanced Main Methods,预览),该 JEP 包含了对前一轮预览反馈的增强,即 JEP 445,未命名类和实例主方法(预览)。这个 JEP 建议“演进 Java 语言,这样学生们就可以编写他们的第一个程序,而不需要理解为大型程序所设计的语言特性”。该 JEP 延续了甲骨文的 Java 语言架构师Brian Goetz在 2022 年 9 月发表的博客文章Paving the on-ramp。甲骨文的技术顾问Gavin Bierman已经发布了规范文档的初稿,供 Java 社区审查。关于 JEP 445 的更多细节可以在 InfoQ 的新闻报道中找到。
在审查结束后,JEP 462,结构化并发(Structured Concurrency,第二次预览),已经从 Proposed to Target 状态提升到了 Targeted 状态。这个 JEP 提议在 JDK 22 中重新审查 API,不做任何变更,以便于从上一轮预览中获取更多的反馈,即 JDK 21 交付的 JEP 453,结构化并发(预览)。这个特性通过引入结构化并发性来简化并发编程,“将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消,提高可靠性并增强可观测性。”
在审查结束后,JEP 461, 流收集器(Stream Gatherers,预览),已经在 JDK 22 中从 Proposed to Target 状态提升到了 Targeted 状态。该 JEP 建议增强流 API 以支持自定义的中间操作。“这将允许流管道以现有内置中间操作难以实现的方式转换数据。”关于此 JEP 的更多细节可以参考甲骨文 Java 平台组软件架构师Viktor Klang编写的原始设计文档。
在审查结束后,JEP 458,启动多文件源码程序(Launch Multi-File Source-Code Programs),已经在 JDK 22 的 Proposed to Target 状态提升到了 Targeted 状态。该 JEP 建议增强 Java Launcher,以执行通过一个或多个 Java 源代码文件提供的应用程序。这可以通过推迟一个完整项目的搭建来实现从小型应用程序到大型应用程序的渐进过渡。
在审查结束后,JEP 457,类文件API(Class-File API,预览),已经在 JDK 22 的 Proposed to Target 状态提升到了 Targeted 状态。该 JEP 建议提供一个 API 来解析、生成和转换 Java 类文件。它最初作为 JDK 中ASM的替代品,ASM 是一个 Java 字节码操作和分析框架,并计划将其作为公开 API 对外开放。甲骨文的 Java 语言架构师Brian Goetz将 ASM 描述为“带有大量遗留包袱的旧代码库”,并提供了关于该草案如何发展并最终取代 ASM 的背景信息。
在审查结束后,JEP 423,G1的区域锚定(Region Pinning for G1),已经在 JDK 22 的 Proposed to Target提升到了 Targeted 状态。该 JEP 建议通过实现G1垃圾收集器的区域锚定来减少 GC 延迟。这将扩展 G1,以便在 major 和 minor 收集操作期间可以锚定任意区域,以便于实现JNI关键区域时避免禁用垃圾收集进程。
JEP 464,作用域值(Scoped Values,第二次预览),已经从它的 JEP Draft 8318898 状态提升至 Candidate 状态,然后快速在 JDK 22提升到了 Proposed to Target 状态。它以前被称为范围局部变量(Extent-Local Variables,孵化),这个 JEP 建议在 JDK 22 中重新预览 API,不做任何更改,以便于从上一轮预览中获得额外的经验和反馈,即 JDK 21 交付的 JEP 446, 作用域值(预览)和 JDK 20 交付的作用域值(孵化)。该特性允许在线程内部和线程之间共享不可变数据。这种方式优于 thread-local 变量,特别是在使用大量虚拟线程的时候。该审查预计会在 2023 年 12 月 7 日结束。
JDK 22
JDK 22 的早期访问构建版本的Build 26发布,其中包括对 Build 25 的更新,其中包括对各种问题的修复。关于这个版本的更多细节可以在发行说明中找到。
对于JDK 22,鼓励开发人员通过Java缺陷数据库报告缺陷。
Jakarta EE
Jakarta Data 1.0.0 的第二个里程碑版本提供了如下特性:制品名称的重命名,例如,从jakarta-data-api
改为jakarta.data-api
,以便于同所有 Jakarta EE 规范保持一致;延迟静态元模型的实现,以进一步解决与反射和注解处理器相关的问题;对版权文档的优化,以便将值与占位符绑定。关于此版本的更多细节可以在发布说明中找到。
Eclipse JNoSQL(Jakarta NoSQL规范的兼容实现)的 1.0.3 版本发布,带来重要的数据库升级,比如,MongoDB 驱动 4.11.1、Hazelcast 5.3.6、Apache Solr 9.4.0、Couchbase Library 3.4.11 和 ArangoDB Library7.2.0。更新方法还实现了增强功能,以改进整个项目的功能。关于此版本的更多细节可以在发布说明中找到。
BellSoft
BellSoft发布了Liberica JDK的 17 和 21 版本,这是他们 OpenJDK 的下游发行版,具有检查点协调恢复(Coordinated Restore at Checkpoint,CRaC)功能,使开发人员能够构建运行中的应用程序快照,减少 Java 应用的启动和预热时间。这些新版本将适用于 x86_64 和 AArch64 CPU 架构以及 Linux 操作系统。
Spring Framework
VMware披露了两个安全漏洞:CVE-2023-34053,Spring框架服务器Web观测DoS漏洞(Spring Framework Server Web Observations DoS Vulnerability)以及 CVE-2023-34055,Spring Boot服务器Web观测DoS漏洞(Spring Boot Server Web Observations DoS Vulnerability,它们会影响Spring Framework6.0.0 至 6.0.13 版本和Spring Boot3.1.0 至 3.1.5 版本、3.0.0 至 3.0.12 版本以及 2.7.0 至 2.7.17 版本。这两个漏洞都允许攻击者提供特制的 HTTP 请求,这些请求可能会在以下情况下导致拒绝服务:
应用程序使用了Spring MVC或Spring WebFlux。
io.micrometer:micrometer-core
制品位于类路径中。在应用程序中配置了 Micrometer
ObservationRegistry
接口的实现来记录观测结果。
因此,鼓励开发人员升级到 Spring Framework 6.0.14 以及 Spring Boot 2.7.18、3.0.13 和 3.1.6。
Spring Shell的 3.2.0-rc1、3.1.6、3.0.10 和 2.1.15 版本发布,分别进行了缺陷修复和对 Spring Boot 3.2.0、3.1.6、3.0.13 和 2.7.18 依赖升级。3.0 和 2.1 版本系列已被宣布与它们对应的 Spring Boot 版本一起结束生命周期。3.2.0-RC1 和 3.1.6 版本中的新特性包括:支持zsh
补全和模态视图;对Terminal UI的小改动。关于此版本的更多细节可以在3.2.0-RC1版本、3.1.6版本、3.0.10版本和2.1.15版本的发行说明中找到。
Quarkus
Red Hat发布了Quarkus的 3.6.0 版本,其中有一些显著的变化,比如,支持 OIDC bearer 令牌的自定义授权模式;改进了服务器发送事件(SSE),允许 REST 客户端返回整个 SSE 事件并对这些事件进行过滤;支持与 Jakarta Annotations @RolesAllowed
注解类似的@SecureField
注解中的表达式。关于这个版本的更多细节可以在变更日志中找到。
Red Hat 还宣布JDK 17 将是即将发布的 Quarkus 3.7 要求的最低版本,它计划于 2024 年 1 月底发布。InfoQ 将会跟进更详细的新闻报道。
Open Liberty
IBM发布了Open Liberty的 23.0.0.12-beta 版,该版本支持Jakarta Data 1.0.0-M1,其中包括:用于基本存储库方法的新 BasicRepository
接口;在CrudRepository
接口中添加 insert()和update()
方法;新的 @Insert、@Update、@Delete 和 @Save 注解。这个版本还提供了一个可配置的静默超时阶段,即当 Liberty 运行时的关闭时间超过默认的 30 秒时。这能够支持需要更多时间来完成处理请求的服务。
Helidon
Helidon 4.0.1,即第一个维护版本,提供了值得关注的变更,比如,支持 Helidon Web 服务器组件的代理协议; WebServer
接口的性能改进;在 CrossOriginConfig.Builder
类中定义的enabled()
方法现在返回Optional<Boolean>
而不是boolean
以解决 CORS 问题。关于此版本的更多细节可以在变更日志中找到。
同样,Helidon 3.2.4 的发布提供了依赖项升级和一些值得注意的变化,例如,用于延迟 OCI Vault 配置的新类的集合;将 opentracing 相关的类和接口迁移到 Helidon Tracing API;正确处理请求 URL 的 IPv6 地址的解析。关于这个版本的更多细节可以在变更日志中找到。
Hibernate
Hibernate Reactive 2.2.0.Final 版本发布,它兼容 Hibernate ORM 6.4.0.Final and Vert.x SQL driver 4.5.0。Red Hat 还提供了 2.2.1.Final 和 2.0.7.Final 版本,它们分别与Hibernate ORM的 6.3.2.Final and 6.2.13.Final 版本兼容。关于此版本的更多细节可以在发布说明中找到。
Hibernate Search 7.1.0 的第一个alpha版本提供了一个孵化特性,即允许在Apache Lucene后端进行矢量搜索,并提供了搜索二进制或文本数据的工具。此外,在 Spring boot 3.2 中读取嵌套 JAR 时,Hibernate Search 将不再启动失败。关于此版本的更多细节可以在发布说明中找到。
Grails 基金会
Grails 5.3.4 发布,提供了依赖升级和一些值得注意的变化,比如,为所有主分支启用 GitHub CodeQL;添加了一个 SnakeYAML 物料清单(BOM)来覆盖 SpringBoot BOM;对 Javadoc 的清理,包括在 Javadoc 中转义特殊字符、重构代码、定义显式类型和删除不必要的变量使用。关于此版本的更多细节可以在发布说明中找到。
Apache 软件基金会
Apache Groovy 5.0.0 的第三个alpha版本提供了缺陷修复、依赖升级和功能改进,例如,支持 JDK 22;实现了在groovyc
命令行中进行库编译器时缺失的特性;还有一个针对数组类型的新indexOf(element)
扩展方法。关于此版本的更多细节可以在发布说明中找到。
同样,Apache Groovy 4.0.16 的发布也提供了缺陷修复、依赖升级和功能改进,例如,对 JDK 22 的支持;在DefaultGroovyStaticMethods
类中定义一个新的allThreads()
方法,以补充 Java Thread 类中定义的现有currentThread()
方法。关于此版本的更多细节可以在发布说明中找到。
为了与 Quarkus 保持一致,Camel Quarkus 3.6.0 版本发布,解决了以下问题:在执行QuartzQuarkusSchedulerAutowiredWithSchedulerBeanTest
类的时候,出现间歇性的AssertionFailedError
;在使用容器的测试中,清除硬编码对主机的使用。关于此版本的更多细节可以在发布说明中找到。
Apache Maven 3.9.6 版本提供了依赖项升级和排除插件验证的功能。关于此版本的更多细节可以在发布说明中找到。
JDKMon
监视和更新已安装 jdk 的工具JDKMon发布了21.0.0版本。这个工具由 Azul 的首席工程师Gerrit Grunwald创建,这个新版本通过将所有依赖项移动到最新的 LTS 版本,完全支持 JDK 21。
PrimeFaces
PrimeFaces 的 12.0.7、11.0.13、10.0.20 和 8.0.25 版本发布,特性包括:升级JSON in Java到 20231013,以解决CVE-2023-5072漏洞,该漏洞允许攻击者利用 JSON 解析器中的缺陷,例如,中等大小的字符串输入可能导致无限量的内存使用并导致拒绝服务。关于这些版本的更多细节可以在12.0.7版本、11.0.13版本、10.0.20版本和8.0.25版本的发布说明中找到。
Jupyter for Java
Jupyter for Java,这是一个新的 GitHub 组织,旨在帮助开发人员发现在 Jupyter notebooks 中使用 Java 的各种方法。该项目由 Red Hat 的杰出工程师Max Rydahl Andersen创建,目前包含五个提供资源和样例的仓库。
Gradle
Gradle 8.5.0发布,提供了以下新特性:完全支持在 JDK 21 上编译、测试和运行;Kotlin DSL的改进,包括在预编译 Kotlin 脚本插件中更快的首次使用以及对版本目录的支持;改进了错误和告警的报告。关于此版本的更多细节可以在发布说明中找到。
原文链接:
Java News Roundup: JDK 22, Spring CVEs, Liberica JDK, JDKMon 21, Jupyter for Java, Gradle 8.5
评论