Java周刊2026W34 | JEP 540 瞄准 JDK 28、A2A Java SDK 1.2.0、LangChain4j 1.19.0、Stubborn Contract 0.1.0

JEP 540 瞄准 JDK 28 带来精简 JSON API,JEP 322 催生 11.0.32.1 与 26.0.2.1 计划外补丁;Quarkus 3.38.3、A2A Java SDK 1.2.0.Final、LangChain4j 1.19.0、Micronaut 5.1.11 密集发布,Stubborn Contract 0.1.0 剥离 Spring 依赖。

🌱 Spring生态

Spring Office Hours 播客:S5E20——与 Danny Thompson 共话开发者 AI 指南

一位在加油站工作了十年的在职开发者,如今与人合著了一本实战指南,证明你不需要数据科学学位就能构建真正的 AI 系统。多数 AI 指导都假定学术背景,从而把当今交付生产软件的大多数从业者排除在外。本期节目走查了 Danny Thompson 的非传统成长路径、他由慈善资助的会议模式,以及普通开发者无需重返校园即可开始构建 AI 的具体方式。

A Bootiful Podcast:Redouble AI 首席技术官兼创始人 Andrey Santrosyan

(该篇为播客预告页,正文仅含主持人欢迎辞、链接与广告,无技术实质内容,依据质量门禁不生成虚构摘要。)

📦 版本发布

Apache Hive 4.2.1

Apache Hive 4.2.1 作为一个维护版本发布,但其唯一记录在案的变更是版本号提升提交 HIVE-29757:“为 4.2.1 发布做准备”。这份单薄的变更日志掩盖了真实的张力——运行 PB 级数据湖的下游团队需要一个稳定、打了依赖补丁的构建,却几乎无从得知底层究竟发生了什么变化。发布说明走查了已打标签的产物、兼容性边界与升级考量,让运维人员能凭信心而非猜测来部署。

Micronaut Core 5.1.11

曾经,一个错误的 CORS 检查比较的是对象身份而非值,悄然放行了不匹配的来源。这类细微的引用相等性 Bug 会在框架内部潜伏数年,直到有依赖者撞上边界情形;而本次补丁连同一次 FormDemuxer 事件循环竞态修复,展示了请求处理被破坏得有多么悄无声息。发布说明走查了 CORS、多部件头部与元数据修复,以及新增的 SCIM JSON 支持,让团队能安心升级。

LangChain4j 1.19.0

LangChain4j 1.19.0 现在允许智能体系统在后续步骤失败时回滚工具动作——这是 Java LLM 框架在系统层面首个补偿模型。由链式工具构建的智能体工作流通常在出错时留下部分副作用,迫使开发者手工接线清理逻辑;本版本将补偿机制内置其中。变更日志还新增了 Anthropic 批量推理、Milvus V2 混合搜索、watsonx.ai 网关支持,以及 MCP 规范更新。

Helidon 4.5.3

Helidon 4.5.3 完全没有功能头条——它的整个变更日志只有一句话指向一个外部文件,因为补丁版本的职责就是修复那些从未写进已发布说明的 Bug。这种不透明让每一个 Helidon 4 团队都无法判断自己暴露在哪些潜在故障之下,除非去追那个独立的 CHANGELOG 链接。这篇文章(即发布通知)仍发出了强烈建议:所有运行在 Java 21 及以上版本的用户都应升级,并走查了最低运行时要求与查找实际修复的位置。

📖 文章与教程

当 @Immutable 真正起作用:Hibernate 二级缓存带来 3.2 倍提速

当 @Immutable、@Cache(READ_ONLY) 与字段级 @Mutability(Immutability.class) 三者协同工作时,Hibernate 的二级缓存从 286 秒骤降至 90 秒。本案例研究还揭示了为何遗漏 JSONB 字段注解会导致 8.1 倍性能回退。值得一读。

JEP 540 拟瞄准 JDK 28,带来一个简洁的 JSON API

JEP 540 正迈向 JDK 28,提供一个处于孵化阶段、无外部依赖、刻意保持精简的 JSON API,用于直观的解析与生成。

解决 Gradle 元数据与 Renovate 的集成问题

Renovate 自动生成的依赖 PR 在合并的那一刻就悄悄破坏了 Gradle 构建,尽管依赖版本看起来完全合法。罪魁祸首在于 Gradle 的元数据与供应链校验规则,与 Renovate 更新版本的方式相互冲突,暴露出在严格完整性检查下自动化依赖管理变得多么脆弱。文章逐步剖析了根因,并给出让 Renovate 与 Gradle 元数据共存、不再破坏构建的具体修复方案。

Introducing BoxLang AI Explorer:一个本地化的全量 AI 模式目录

BoxLang AI Explorer 完全在你的本机运行,对所有 AI 集成模式进行编目,而不向云端发送哪怕一个字节。当今多数 AI 工具将开发者锁定在托管式 API 上,这些 API 会泄露提示词并累计按次调用费用,使得本地实验既危险又昂贵。本文逐步介绍该工具如何离线索引模式、让你的代码与上下文保持私密,并帮助 BoxLang 开发者从自身环境中发现可复用的 GenAI 蓝图。

Vibe Coding、Maven 与你未曾选择的那些依赖

一条 mvn dependency:tree 就能暴露出数百个你从未显式选择的传递性库——其中有些携带已知 CVE 或存在不兼容的许可证。借助 AI 进行 Vibe Coding 能加速功能交付,却让开发者对这条隐藏的供应链视而不见,其中一个被攻陷的依赖就能悄悄感染整个构建。文章剖析了 Maven 如何解析传递依赖、未经审查的 AI 推荐库所带来的真实风险,并给出了审计与锁定依赖图谱的实操步骤。

为变化做准备:在密封 API 上安全地进行 switch

当新增一个子类型时,对密封类型的穷尽式 switch 会在运行时悄然崩溃——即使编译器曾判定原代码是完备的,也会抛出 MatchException。密封层级本意是封闭的,但真实的 API 必须演进,这让客户端代码距一次崩溃仅隔一次依赖升级。本文向 API 作者展示了如何为预期的密封类型扩展撰写文档,并解释为何 default 分支几乎从来都不是安全的逃生舱。

JDK 21 临近宽松许可证终点

文章源页面仅返回了 Oracle 的故障错误,因此无法获取关于 JDK 21 许可证变更的任何实质性内容以供总结。抓取时 Oracle 网站正遭遇技术故障,使得标题“JDK 21 临近宽松许可证终点”成为唯一可检索到的信号。在没有实际文章正文的情况下,若编写事实性的“钩子-冲突-收益”摘要就必然要编造细节,这会违背准确性原则。

探索 Compose HTML 用于服务端渲染

每一个主流生态都重新发现了服务端渲染——React、Vue、Svelte、C#、Rust 乃至 Elixir——然而 JVM 在这场竞赛中仍无立足之地,被困在基于字符串的模板语言里,那些语言连 JS 开发者都不会认作组件。Compose Multiplatform 已经横跨 Android、iOS、桌面与 Web,提供类型安全、可复用的组件,却从未瞄准过服务端。本次探索勾勒出后端开发者如何以真正的 Kotlin 组件、带编译器检查地构建服务端渲染 UI,从而消除独立的模板语言与 UI 代码库。

Renovate:教老狗学新把戏

Renovate 原本就原生理解 asdf 的 .tool-versions 文件,但要在 Gradle、package.json 与该文件之间保持 Node 与 npm 版本一致,仍需三处重复声明与人工纪律来避免漂移。不匹配的风险是真实存在的:某位贡献者改动了一个版本钉,就会在无人察觉的情况下运行与 CI 不同的工具链。文章分享了一种具体模式,教 Renovate 自动协调这些来源,并逐步走查了 open-test-reporting 的 Vue 子项目配置。

编写 Thymeleaf 组件库——第 4 部分

服务端 Thymeleaf 组件无需独立的 JS 构建管线即可交付真正的前端交互性——AlpineJS 通过 WebJars 引入,并从你自有域名而非 CDN 提供。多数组件库要么硬编码原生 JavaScript,要么动用重型前端工具链,把行为接线的工作留给使用者。文章走查了如何添加 AlpineJS 依赖、一个可复用的 webjars 片段,以及构建一个停留在库内部的声明式对话框组件。

用 BoxLang、RAG、Ollama 和 Amazon Bedrock 构建安全的 AI 聊天应用(与 Dan Card 对谈)

多数 AI 聊天教程直接把模型接到用户输入上便宣告完成,使提示词注入与数据泄露的缺口大敞——然而 BoxLang 基于会话作用域、沙箱化的执行模型本就是为避免生成代码触碰不该碰的东西而设计的。张力是真实的:基于私有文档的 RAG 加上 Bedrock/Ollama 推理需要隔离、鉴权与审计轨迹,而多数快速上手示例都跳过了这些。Dan Card 的走查展示了如何在 BoxLang 上用 RAG、本地 Ollama 与 Bedrock 组装一个安全的聊天应用——涵盖护栏、密钥处理与部署。

Quarkus 3.38.3——维护版本

一个几乎不向你提任何要求的维护版本:Quarkus 3.38.3 纯粹是缺陷修复与文档更新,对已处于 3.38 系列的任何人而言都是安全的就地升级。真正的摩擦存在于更早的版本线上,仍停留在 2.x 的团队迈向当前 Quarkus 时仍需经历迁移调整。文章走查了一键式 quarkus update 路径(可从任意旧版本直接跳到 3.38),并指向完整的变更日志与迁移指南。

A2A Java SDK 1.2.0.Final 发布

此前,未授权的调用方可以通过 sendStreamingMessage 或 subscribeToTask 探测任务是否存在,即便在 1.1.0 引入了按用户任务授权后,仍暴露了 SDK 的鉴权缺口。A2A Java SDK 1.2.0.Final 通过在所有传输层对每一次被引用的任务查找强制执行读取授权,堵上了这个漏洞,并让 InMemoryTaskStore 采用失败即关闭策略以对齐 JPA 存储。发布说明走查了破坏性变更、新的失败即关闭辅助方法,以及用于恢复旧行为的属性。

Quarkus 3.38.2——维护版本

Quarkus 3.38.2 对已处于 3.38 系列的任何人而言是安全的就地升级,包含缺陷修复与文档修正,无迁移风险。然而停留在旧版本的团队仍将面临破坏性调整——单条 quarkus update 命令即可将应用从 2.x 一路迁移至 3.38,免去你手工重写。文章走查了升级命令、3.38 迁移指南与完整的 GitHub 变更日志,让你能安心打补丁。

Stubborn Contract 0.1.0 发布!

Spring Cloud Contract 的继任者刚刚发布首个版本,却带着一个出人意料的转折:它从核心中剥离了几乎所有 Spring 依赖。把消费者驱动的契约测试绑死在单一框架上,曾让团队被困于 Spring 与 Groovy,因此 0.1.0 重写版让项目摆脱 Spring 依赖,将 Spock 测试移植到 JUnit 5,并提供了用于迁移的 OpenRewrite 配方。该版本还新增了一流的 Quarkus 集成,让团队无需放弃自己的框架选择即可采用契约测试。

公民构建,智能体执行,专家治理

AI 智能体让构建可运行的软件变得空前容易,但企业级交付仍依赖工程判断力。当然是这样。

什么是推理

业界把“推理轨迹”当作某种 exotic 的东西来兜售,但它们不过是模型在最终答案之前吐到草稿区里的普通文本,由特殊 token 路由到另一条流。这种神秘感掩盖了一个实际问题:UI 必须检测并隔离这段草稿文本,使用户永远看不到令人困惑的原始思考,而多数人误以为它与普通输出的耦合有多紧密。文章揭开了 channel/analysis 格式的面纱,解释了为何推理强度其实存在于系统提示词而非采样器中,并帮助你准确地读懂这些轨迹。

编译到中间表示:给自己写个编译器,第三部分

“解释型”的 Python 与 Java 其实都先做了编译——你的项目里散落的 .pyc 与 .class 文件就是任何真实 CPU 都无法执行的中间表示。一旦你看到每种语言都依赖一台虚拟机,逐条、无括号地走查线性 IR 指令,这种纯解释神话便不攻自破。文章构建了一个会发出 IR 而非直接求值源码的编译器,走查了虚拟机的思维模型,并给出一个可操作的 Java 示例(2 + 3 变成 iconst_2 iconst_3 iadd)。

幂等写入路径:当消息重复时保持集成管道的正确性

消息队列提供至少一次投递,因此同一事件可能两次落入你的集成管道——若没有幂等写入路径,第二次投递就会悄无声息地重复写行、向客户重复扣款,或污染下游状态。将写操作设计成可安全重放,迫使你追踪已处理键、用 upsert 替代 insert,并调和重复项。文章走查了让重复消息变得无害而非灾难的具体模式。

用 Claude 修复不稳定测试的经验教训

将 1360 个集成测试并行化后,运行时间从 40 分钟降到 4 分钟,但提速暴露出了不稳定测试——它们在隔离运行时通过,在完整套件中却因跨测试干扰而失败。作者让 Claude 自动修复不稳定性却不去理解其理由,于是一些根因始终隐藏,flake 也不断回来。文章分享了这一失误带来的教训:如何在将不稳定测试诊断委托给 AI 的同时,不交付脆弱的修复,以及真正消除干扰的方法。

从业者之声:那个尚未被命名的写作类别

一位敏捷宣言的合著者曾三次被本应懂行的人——包括 Martin Fowler 本人——劝告“放开你的声音”,却仍无法为自己所追求的写作风格命名。默认的“思想领导力”压力,让资深从业者用血汗换来的模式识别所沉淀的生活权威被封存在瓶底,以资历替代理所当然的认知。文章为这个缺失的类别命名,并展示了从经验而非地位出发的写作,如何赢得那些认出自己故事的读者。

AI 成功取决于数据基石(James Heward)

从 AI 中提取最多价值的组织,通常并非拥有最新模型的组织——而是那些拥有坚实、可访问数据基石的组织。多数企业追逐花哨的智能体工具,却忽视了数据就绪这一三个不起眼的问题:我们是否拥有正确的数据、它是否可信、AI 能否真正触达它?文章给出了一个业务优先的框架,用于评估 AI 就绪度,避免试点炒作与现实成果之间代价高昂的鸿沟。

幕后:演进 Netflix 的直播广告事件管道——第二部分

一个项目通过围绕有状态流处理重建 Netflix 的广告管道,一次性交付了直播流广告、去重与更丰富的信号。广告服务器掌握每一个活动细节,而客户端设备只持有一个不透明的 token,因此富化必须在实时中把二者重新汇聚——关键路径上的数据库查询无法扩展到直播规模。文章解释了用 Apache Flink 流连接替换该查询,如何移除一个关键依赖、为 Live 扩展,并以零停机切换引擎。

☕ JVM周报

1. 第四位数字

  1. 第四位数字 周二,Java 在季度计划之外收到了一批补丁。不是因为出了什么故障。OpenJDK 的更新树发布了 11.0.32.1 与 26.0.2.1。而背后的原因本身就是个有趣的故事。先快速回顾一下这个机制,因为我怀疑没几个人会把它记在脑子里。JEP 322:基于时间的发布版本控制,随 J

2. 等待 JSON 的十二年

  1. 等待 JSON 的十二年 既然聊到 JDK 交付什么、交付得多快,我们不妨在此多停留片刻,因为一场安静的执行在后台发生。JEP 540:Simple JSON API(Incubator)现已瞄准 JDK 28。在此过程中,JEP 198:Light-Weight JSON API 被正式关闭并撤回。看看第二个的日期:Mike Duigou 提交它

3. 赖氨酸 contingency 与其他许可证变动

  1. 赖氨酸 contingency 与其他许可证变动 我承诺会回到“谁在维护 JDK 不交付的那些东西”这个问题。过去两个月的答案是:越来越多地,是一个刚刚开始为之收费的人。但在那之前,先讲这个夏天最好的故事。6 月 17 日,Jake Wharton 宣布 Retrofit、OkHttp 与 Okio 将迁移到一个新的 GitHub

往期精选


阅读原文


扫码关注「右耳朵猫AI」

扫码关注「右耳朵猫AI」

posted @ 2026-08-26 19:50  右耳朵猫AI  阅读(18)  评论(0)    收藏  举报