Java 周报:JDK 27 进展与 Spring AI 2.0 更新

来源: InfoQ - 后端

原文

最近Java新闻的重点包括,多个面向JDK27的OpenJDK JEP;Spring AI 2.0发布第六个里程碑版本;Grails 8.0发布首个里程碑版本;Groovy 6.0发布首个Alpha版本;JobRunr发布小版本更新;GlassFish、TomEE和Tomcat发布维护版本;GraalVM启用加速版的发布列车,以及Quarkus CVE的修复。

OpenJDK

在评审结束后,JEP533:结构化并发(Structured Concurrency,第七次预览)已经从Proposed to Target状态提升为JDK 27的Targeted状态。该JEP在JDK 21到JDK 26完成六轮预览、在JDK 19到JDK 20完成两轮孵化后,提出了第七轮预览,本次预览只有很小的调整。该特性通过引入结构化并发来简化并发编程,也就是“将运行在不同线程中的相关任务组视为一个工作单元,从而简化错误处理与取消流程,提升可靠性并增强可观测性。”

与之类似,JEP531:延迟常量(Lazy Constants,第三次预览)也已经从Proposed to Target状态提升为JDK 27的Targeted状态。该特性此前名为StableValues,在即将发布的JDK 26和JDK 25中完成两轮预览后,此次第三次预览版本包含两处变更,一是从LazyConstant接口中移除isInitialized()和orElse()方法,因为这两个方法不符合该特性的设计目标;二是新增ofLazy()工厂方法,该方法可以针对Java的三种集合类型(List、Set和Map)创建稳定的预定义元素。

JDK 27

JDK 27早期访问构建版本Build 21发布,包含对Build 20的更新,并修复了多项问题。更多细节可参见发布说明

针对JDK 27,开发者可通过Java Bug Database提交缺陷报告。

GlassFish

Eclipse GlassFish 8.0.2作为第二个维护版本,带来了缺陷修复、依赖升级以及两项新特性,也就是,在ApplicationClientDescriptor类中支持使用Jakarta Enterprise Beans的@EJB注解的beanName属性;移除定义在NetUtils类中的isThisHostLocal()方法,并以更健壮的isLocal()替代,以改进与Java的InetAddress类及主机名解析相关的行为。

该版本还修复了Admin Console中的两个尚未公开披露的CVE,相关信息将很快发布。

更多细节可参见发布说明

Jakarta EE

在每周发布的Hashtag Jakarta EE博客中,Eclipse基金会的Jakarta EE开发者布道师Ivar Grimstad分享了关于Jakarta EE 12的最新进展

Jakarta EE 12里程碑4版本提供更新的各项规范,目前进展看起来非常乐观。具体可查看本周会议的纪要。另一个关于Jakarta EE 12的好消息是,Jakarta NoSQL项目可能把原计划在Jakarta NoSQL 1.2中的功能合并到Jakarta NoSQL 1.1,这意味着它将更有希望被纳入到Jakarta EE 12中。

另外,还有多项规范正在推进Jakarta EE 12的里程碑2版本发布,包括,Jakarta Connectors 3.0Jakarta Faces 5.0Jakarta Transactions 2.1以及Jakarta JSON Processing 2.2

GraalVM

GraalVM团队宣布了加速版的GraalVM发布列车,也就是,在保持Oracle季度关键补丁更新(Critical Patch Updates,CPU)的同时,新增按月发布的功能版本,并为每个大版本提供一条稳定的发布列车。这使GraalVM团队能够跟上当下快速演进的软件开发节奏,而AI正是推动这一节奏的重要因素。更多细节可见Medium上的这篇博客文章

Spring Framework

Spring AI 2.0.0的第六个里程碑版本带来了缺陷修复、文档改进、依赖升级以及多项新特性,例如,在ChatModel接口新增buildRequestPrompt()方法,用于统一不同供应商间的行为,并避免将ChatOptions实例强转为供应商特定类型;此外,定义在OpenAiEmbeddingOptions类中的EncodingFormat已从String重定义为enum类型,以提升配置嵌入编码格式时的类型安全性。该版本还包含较多破坏性变更,更多信息见发布说明

JobRunr

JobRunr 8.6.0版本发布,提供了缺陷修复、依赖升级和新特性,包括全面兼容JDK 26。由于JEP 500 让Final名副其实(Prepare to Make Final Mean Final)引入的JVM参数--illegal-final-field-mutation=deny已启用,代码库中所有对final字段的变更都已被移除;此外,还重构了DatabaseCreator类中的getAllTableNames()方法,以提升在超大表数量数据库场景下的性能。更多细节可参见发布说明

Quarkus

Quarkus团队已经在3.20、3.27、3.33、3.34和3.35发布列车中提供了紧急维护版本,用于修复CVE-2026-39852。该漏洞允许攻击者在请求URL后追加分号及任意文本以绕过安全约束,进而未授权访问受保护资源。

该团队还推出Quarkus Agent MCP,这是一个独立运行的Model Context Protocol服务器,可让兼容的AI智能体“通过提供Quarkus专用工具、文档和扩展级编码模式,更高效地创建、管理并使用Quarkus应用,让AI智能体学会‘说Quarkus’。”该服务器是现有Dev MCP服务器的补充,但以独立进程的方式运行,而非运行在Quarkus进程内部。

Grails

Apache Grails 8.0.0的首个里程碑版本带来了缺陷修复、依赖升级以及一些重要变更,例如,移除已弃用源码和历史遗留行为;为Grails Application Forge应用的Access-Control-Allow-OriginCORS头新增https://grails.apache.org域名,以便其迁移到Apache Grails官网。更多细节可参见发布说明

Groovy

Apache Groovy 6.0.0的首个Alpha版本带来了缺陷修复、依赖升级以及新特性,包括,在DefaultGroovyMethods类中新增groupByMany()方法,用于返回对某个条目适用的键列表;新增@Modifies注解,用于声明方法允许修改的一组字段和参数。更多细节可参见发布说明

Apache TomEE

Apache TomEE 10.1.5发布,提供了缺陷修复、依赖升级和重要变更,例如,针对显式构造器类型资源,改进了@OpenIdAuthenticationMechanismDefinition注解中定义的redirectToOriginalResource和tokenAutoRefresh参数;在Assembler类中支持JavaString类型以改进日志能力。更多细节可参见发布说明

Apache Tomcat

Apache Tomcat 11.0.22版本发布,带来了缺陷修复和新特性,例如,更新version.sh与version.bat文件,纳入Apache Portable Runtime(APR)、Tomcat Native Library和OpenSSL的版本信息,并增加版本兼容性警告及第三方库版本信息;同时改进了HTTP/2校验逻辑,使校验更早执行,并增加对不允许字符及大写字符的检查。更多细节可参见发布说明

查看英文原文:Java News Roundup: GraalVM, Spring AI, JobRunr, GlassFish, Grails, Groovy, Quarkus Agent MCP