本期的 Java 新闻汇总主要包含如下新闻:JEP 455 升级为 JDK 23 的 Proposed to Target 状态、JDK 22 进入 Rampdown 第二阶段、Jakarta EE 11 发布计划更新、GraalVM 以及甲骨文 2024 年 1 月份的关键补丁更新。
OpenJDK
JEP 455,模式、instanceof和switch中的原始类型(预览)已经从 JDK 23 的 Candidate 状态提升到了 Proposed to Target 状态。该 JEP 位于 Amber 项目之下,通过允许在所有模式上下文中使用原始类型来增强模式匹配,并扩展instanceof
和switch
以使其适用于所有原始类型。甲骨文公司的主要技术人员Aggelos Biboudis最近发布了该特性的最新规范草案。审查工作预计会在 2024 年 1 月 22 日结束。
甲骨文公司 Loom 项目的架构师和技术负责人Ron Pressler以及甲骨文公司 Java 语言和 Java 虚拟机的规范负责人Alex Buckley业已提交了 JEP Draft 8323072,废弃sun.misc.Unsafe中的内存方法,以便于将其移除(Deprecate Memory-Access Methods in sun.misc.Unsafe for Removal)。该 JEP 建议废弃sun.misc.Unsafe
类中定义的内存访问方法,以便在未来的版本中将其移除。这些现在不受支持的方法已经有了对应的替代方案,分别是从 JDK 9 开始提供的访问堆上内存的方法以及从 JDK 22 开始提供的访问堆外内存的方法。
JDK 23
JDK 23 的早期访问构建版本的Build 6发布,该版本是对 Build 5 的更新,其中包括对各种问题的修复。关于这个版本的更多细节可以在发布说明中找到。
JDK 22
JDK 22 的早期访问构建版本的Build 32发布,该版本是对 Build 31 的更新,其中包括对各种问题的修复。关于这个版本的更多细节可以在发行说明中找到。
根据 JDK 22 的发布计划,甲骨文公司的 Java 平台组首席架构师 Mark Reinhold正式宣布,JDK 22 已经进入 Rampdown 的第二阶段。这就意味着,JDK 22将不再添加 JEP;关注的重点会放在 P1 和 P2 的缺陷上,这些缺陷可以通过修复请求流程(Fix-Request Process)来进行修复。借助后期增强请求流程(Late-Enhancement Request Process),依然有可能在后期实现功能的增强,但 Reinhold 表示,“现在的门槛已经非常高了”。将于 2024 年 3 月份发布的 GA 版本最终包含了如下 12 项特性:
JEP 423:G1的区域锚定(Region Pinning for G1)
JEP 457:类文件API(Class-File API,预览)
JEP 459:字符串模板(String Templates,第二轮预览)
JEP 460:向量API(Vector API,第七轮孵化)
JEP 461:流聚合器(Stream Gatherers,预览)
JEP 463:隐式声明类和实例主方法(Implicitly Declared Classes and Instance Main Methods,第二轮预览)
JEP 464:作用域值(Scoped Values,第二轮预览)
对于JDK 23和JDK 22,鼓励开发人员通过Java缺陷数据库报告缺陷。
Jakarta EE
在每周的 Hashtag Jakarta EE博客上,Eclipse 基金会的 Jakarta EE 开发人员倡导者Ivar Grimstad最近宣布,Jakarta EE 11 的目标 Java 版本将同时支持 JDK 21 和 JDK 17。正如 Grimstad 所言:
虽然这看上去是一个很重要的变化,但是情况并没有想象中那么严重。实际上,没有任何一个组件规范计划在其 API 中暴露 Java 21 相关的特性。唯一接近这一点的是Jakarta Concurrency 3.1,它计划支持 Java虚拟线程。但事实证明,只要底层 JVM 支持虚拟线程,精心设计的 API 就能支持它。
最大的变化是测试兼容性工具包(Test Compatibility Kit,TCK),它必须能够在 Java 17 和 Java 21 上运行。对于那些已经将代码库转移到 Java 21 的实现也会受到一定程度的影响,这取决于它们的进展程度以及它们已经使用了多少 Java 17+的特性。
因此,Jakarta EE 规范里程碑版本的发布计划已经根据这一变更进行了修改,但 Grimstad 依然认为,Jakarta 的 GA 发布时间依然是最初计划的 2024 年 6 月或 7 月。
GraalVM
甲骨文实验室发布了针对 JDK 21 的 GraalVM 社区版 21.0.2,该版本基于 2024 年 1 月份的甲骨文关键补丁更新进行了修复。其中包括,简化了ValueAnchorNode
类的实现;解决了启用断言时-XX:+PrintGCSummary
命令行参数的问题;解决了System.console().readPassword
方法导致的故障。关于该版本的更多详情,请参阅发布说明。
BellSoft
在甲骨文公司于 2024 年 1 月发布关键补丁更新(Critical Patch Update,CPU)的同时,BellSoft 也发布了针对Liberica JDK的 CPU 补丁版本,即 21.0.1.0.1、17.0.9.0.1、11.0.21.0.1 和 8u401,以解决该CVE的列表,Liberica JDK 是 OpenJDK 的下游发行版。此外,他们还发布了补丁集更新(Patch Set Update,PSU)版本 21.0.2、17.0.10、11.0.22 和 8u402,其中包含了 CPU 和非关键性的问题修复。
Spring Framework
Spring Boot 3.3.0 的第一个里程碑版本提供了缺陷修复、文档改进、依赖性升级和新特性,比如,移除了上一个版本废弃的 API;支持 Micrometer @SpanTag
注解;支持为 Spring Security OAuth2 专用的属性自动配置JwtAuthenticationConverter
和ReactiveJwtAuthenticationConverter
类。关于该版本的更多信息,请参阅发布说明。
Spring Boot 3.2.2发布了文档改进、依赖性升级和值得注意的缺陷修正,例如,在NestedJarFile
类的实例中,JarEntry
实例调用getComment()
方法会返回不正确的结果;在使用 jOOQ 时,如果没有设置spring.jooq.sql-dialect
属性的话,会导致数据库连接泄露;将MockRestServiceServerAutoConfiguration
与 Spring Framework 的RestTemplate
类RestClient
接口一起使用会产生不正确的异常。关于该版本的更多细节信息,请参阅发布说明。
类似的,Spring Boot 3.1.8版本提供了文档改进、依赖性升级和值得注意的缺陷修复,比如,SslBundle
接口的实现,PropertiesSslBundle
和WebServerSslBundle
没有提供有用的toString()
结果;在PatternParseException
的日志信息中,表示模式错误的标记^
放在了错误的位置;在server.ssl
属性中混合使用 PEM 和 JKS 证书材料会导致无法正常运行。关于该版本的更多细节信息,请参阅 发布说明。
Spring Security 6.3.0 的第一个里程碑版本提供了缺陷修复、依赖性升级和新特性,例如,为RoleHierarchyImpl
类提供了一个新的工厂方法,以改进角色层级结构的定义;提供新的偏移量,用来补充@EnableMethodSecurity
注解中的order
属性,从而允许应用程序选择拦截器的放置位置;将缓存集成到HandlerMappingIntrospector
类中。关于该版本的更多细节信息,请参阅 发布说明。
Spring Authorization Server 1.3.0 的第一个里程碑版本提供了依赖性升级和新特性,比如,在OAuth2ClientCredentialsAuthenticationProvider
类中可配置范围校验策略的功能;改进了错误日志记录功能,以记录非法或过期的授权码;使用证书签发者的路径组件支持多租户。关于该版本的更多细节信息,请参阅 发布说明。
Spring Modulith的 1.2.0-M1、1.1.2 和 1.0.5 版本发布,其中包括缺陷修正、依赖性升级和功能增强,例如,不再使用 Spring Boot DatabaseDriver
枚举类中定义的已废弃的fromDataSource()
方法;如果某个模块被列为额外包含,但它已经是计算得出的依赖的一部分,避免ModuleTestExecution
两次包含该模块的可能性;将 Spring AOT 生成的类排除在架构校验之外,否则它们可能会将依赖关系引入到视为模块内部的应用程序组件中。关于这些版本的更多细节信息,请参阅1.2.0-M1版本、1.1.2版本和1.0.5版本的发布说明。
Spring Session 3.3.0 的第一个里程碑版本发布,提供了依赖性升级和新特性,例如,新的ReactiveFindByIndexNameSessionRepository
接口,能够为非索引的会话存储库提供 Actuator 端点;新的ReactiveRedisIndexedSessionRepository
类,可以为 Spring WebFlux 应用程序提供/sessions
端点。关于该版本的更多细节信息,请参阅 发布说明。
Spring for Apache Pulsar 1.0.2发布,提供了依赖性升级,并在项目中添加了一个新的物料清单模块spring-pulsar-bom
。该版本将包含在 Spring Boot 3.2.2 中。关于该版本的更多细节信息,请参阅 发布说明。
Helidon
Helidon 4.0.3发布,该版本带来了一些值得注意的变更,例如,支持在配置构建器中使用Map<String, String>
,以消除使用“复杂的”config.detach().asMap()
来获取子值;将RegistryFactory
类和它的getInstance()
和getRegistry()
方法的访问规范恢复为public
,以提高与 3.x 版本列车的向后兼容性;通过 OIDC 提供者对 ID 令牌执行验证,并引入访问令牌刷新机制,提高了安全性。关于该版本的更多细节信息,请参阅更新日志。
Quarkus
Quarkus 3.7 的第一个发布候选版本提供了值得注意的变更,比如,支持 LinkedIn OIDC 提供者;能够观测授权检查失败或成功的安全事件,应用程序可以据此实现自定义的安全日志机制;支持 Micrometer @MeterTag
注解,从而能够为参数带有@Counted
和@Timed
注解的方法添加额外的标记。关于该版本的更多细节信息,请参阅 发布说明。
Quarkus 团队还宣布,Quarkus 文档现在支持全文搜索的功能,该功能最初是在 Quarkus Guides页面上实现的。这取代了原来在每个指南的标题和摘要上进行简单的子字符串搜索。这项新功能由Quarkus.io Search应用提供支持,该应用使用了Hibernate Search扩展,它支持与OpenSearch/Elasticsearch的集成。
Hibernate
Hibernate ORM 6.4.2.Final发布,该版本提供了缺陷修复和功能增强,例如,新的CurrentTenantIdentifierResolver
接口允许使用非字符串租户标识符,并将租户解析器作为托管的 bean;解决了连接继承层次的查询问题,以及使用@SoftDelete
注解时,HQL 连接实体不会生成删除条件的问题。关于该版本的更多细节信息,请参阅问题列表。
Hibernate Reactive 2.2.1.Final发布,该版本也带来了一些值得注意的变化,例如,支持 Hibernate ORM 6.3 中引入的Order
类;支持在所有数据库中应用StatelessSession
接口中定义的upsert()
方法;解决了对基本 Java 类型数组开箱即用支持的问题。该版本与 Hibernate ORM 6.4.1.Final 和 Vert.x SQL 驱动程序 4.5.1 兼容。Hibernate Reactive 2.0.8.Final 也已发布,不过,尽管该版本与 Vertx SQL 客户端 4.5.1 兼容,团队还是决定回滚 2.0.8 版本的升级,因为它妨碍了其他应用程序升级到最新的 2.0 版本。有关此版本的更多详情,请参阅发布说明。
Apache 软件基金会
Apache Groovy的第五个alpha版本提供了缺陷修复、依赖性升级和新功能/功能增强,例如,格式字符串的自定义类型检查器,可发现非法的转换字符、缺失的参数、不正确的类型和非法的标志;为Closure
类实例生成 serialVersionUID
(因为它实现了 Java 的Serializable
接口);支持与ASTMatcher
类中包含可变参数的方法调用进行匹配。有关该版本的更多详细信息,请参阅发布说明。
同样,Apache Groovy 4.0.18 也已发布,其中包括缺陷修复、依赖性升级和功能增强,例如,Groovy 文档现在列出了继承属性;避免处理META-INF
文件夹中重复条目的解决方案。有关此版本的更多详情,请参阅发布说明。
Apache Maven 4.0.0 的第12个alpha版本提供了值得注意的变更,例如,在Maven制品解析器(Artifact Resolver)中使用了制品集合过滤和新的传递性依赖管理器;使用JLine增强行编辑;通过不解析反应器之外的项目提高构建过程中的一致性。有关此版本的更多详细信息,请参阅发布说明。
原文链接:
Java News Roundup: JDK 22 in Rampdown Phase Two, JEPs for JDK 23, Jakarta EE 11, GraalVM
评论