2021 年 11 月 15 日起始周 Java 新闻更新:OpenJDK JEP、JDK 18、Loom 项目、多个 Spring 单点版本、MicroProfile 5.0-RC2、Payara 平台、一个新的 Jakarta EE 规范提议、JHipster 7.4.0、TornadoVM 0.12、Apache Camel K 1.7 和 Kotlin 1.6.0。
OpenJDK
JEP 419,即外部函数和内存 API(第二个孵化器),从 Candidate 阶段进入到 Proposed to Target 阶段。该 JEP 从 JEP 412(第一个孵化器,包含在 JDK 17 中)演化而来,根据 Java 社区的反馈做了改进,变化包括:支持更多的内存访问句柄,如 boolean 和 MemoryAddress 接口;更通用的 MemoryAddress 和 MemorySegment 接口解除引用 API;更简单的用于获取下行调用方法句柄的 API,不再需要传递 MemoryType 枚举;用于从内存段拷贝 Java 数组(以及将 Java 数组拷贝到内存段)的新 API。JEP 419 的评审将在 2021 年 11 月 23 号结束。
JEP 420,即 switch 模式匹配(第二个预览版),从 Candidate 阶段进入到 Proposed to Target 阶段。该 JEP 允许在 switch 表达式中使用多种模式,每一个模式对应一个特定的动作,支持复杂的面向对象查询。这是 JEP 406(第一个预览版,包含在 JDK 17 中)之后的第二个预览版,增强的地方包括:改进了支配地位检查(Dominance Checking),要求在统一类型的防御模式之前放置一个常量 case 标签;switch 代码块的穷尽性检查比之前更加精细。JEP 420 的评审将在 2021 年 11 月 23 号结束。
Oracle 首席 Java 语言架构师 Brian Goetz 在 2017 年 10 月份的一次 InfoQ 采访中表示模式匹配还处在概念验证阶段。instanceof 的模式匹配(JEP 394)包含在 JDK 16 中。
JEP 422,即 Linux/RISC-V 移植,从 Draft 阶段进入到 Candidate 阶段。该 JEP 是关于将 JDK 移植到 Linux/RISC-V,一个免费开源的 RISC 指令集架构。移植版本将支持模板解释、C1 和 C2 JIT 编译器,以及目前所有主流的垃圾回收器,包括 ZGC 和 Shenandoah。该 JEP 的主要目标是将移植版本集成到 JDK 的主线代码库中。
JDK 18
JDK 18 尝鲜构建版本Build 24可用,相比 Build 23,这次的主要更新包括对各种问题的修复。更多细节可参看版本公告。
JDK 18 目前的特性集合如下:
JEP 400:默认字符集为UTF-8;
JEP 408:Simple Web Server;
JEP 413:Java API文档中加入了代码片段;
JEP 416:通过方法句柄重新实现代码反射;
JEP 417:Vector API(第三个孵化器);
JEP 418:网路地址解析SPI;
JEP 419: 外部函数和内存API (第二个孵化器);
JEP 420: switch模式匹配(第二个预览版)。
开发者可以通过Java Bug Database提交 bug。
Loom 项目
Loom早期尝鲜18-loom+5-274 构建版可用,该版本基于 JDK 18 早期尝鲜版 Build 22 构建。
Spring Framework
过去繁忙的一周,Spring 团队的多个子项目发布了单点版本。
Spring Boot 2.6发布,将依赖项 Spring Data 升级到 2021.1、Spring HATEOAS 升级到 1.4、Spring AMQP 升级到 2.4、Spring Kafka 升级到 2.8、Spring Security 升级到 5.6、Spring Session 升级到 2021.1。其他新特性包括:增强的/info 端点,加入了 Java 运行时信息;支持使用 WebTestClient 接口来测试 Spring MVC 应用程序。
Spring Boot 2.4.13和2.5.7发布,分别包含了 26 个问题修复和 35 个问题修复,以及文档改进和依赖项升级。
在发布了 3 个里程碑和一个候选版本之后,Spring Security 5.6.0 正式可用,特性包括:一个新的 SecurityContextChangedListener 接口,可以作为 Lambda 表达式或方法引用的赋值目标;支持 SAML 2.0 单点登出;支持将 TestSecurityContextHolder 传播给 SecurityContextHolder。更多细节可在版本公告中找到。
Spring Cloud Netflix 发布2.2.10.RELEASE版本,解决了CVE-2021-22053漏洞,该漏洞允许执行通过/hystrix/monitor;[user-provided data]提交的代码(在使用 spring-cloud-netflix-hystrix-dashboard 和 spring-boot-starter-thymeleaf 解析视图模板时)。
Spring Batch 发布 4.3.4 和 4.2.8 版本,修复了一些问题:确保 JobParameters 类定义的 getParameters()方法返回的是不可变的参数;修复了在调用 MethodInvokingTaskletAdapter 和 NamedParameterJdbcTemplate 类时抛出的“IllegalArgumentException: Only 1 out of 2 arguments could be assigned”异常;确保在 SimpleJobExplorer 中定义的 getLastJobExecution()方法可以拿到单步执行任务和执行上下文。
Spring Kafka 发布2.8版本,特性包括:支持乱序的手动提交;一系列新的常见错误处理器取代了单独的 record 和 batch 错误处理器;KafkaTemplate<K,V>类现在可用于接收已知分区的记录。
Spring AMQP 发布2.4版本,初步支持 RabbitMQ Stream Plugin,并宣布弃用 Spring Remote Method Invocation(RMI)。更多细节可以在版本公告中找到。
MicroProfile 5.0 之路
在迈向 MicroProfile 5.0 的道路上,MicroProfile 工作服发布了第二个候选版本,其中包含了由社区开发的 8 个规范:
这些规范将向Jakarta EE 9.1看齐。
Payara
Payara发布了 2021 年 11 月份版本的 Payara Platform。Payara Platform Community 5.2021.9 包含了 11 项改进、6 个问题修复和 11 项组件升级。Payara Platform Enterprise 5.33.0 包含了 4 项改进、4 个问题修复和两项组件升级。社区版已支持 JDK 17,针对企业版还在做进一步的测试,以保证稳定性。两个版本都做出了一个重大变化,即移除了 TLS 1.0 和 TLS 1.1 协议,默认情况下禁用。
Jakarta EE
Jakarta EE 工作组提出制定一个新的 Jakarta EE 规范——Jakarta Commons,用于处理常见的 API、功能和开发库,确保规范的一致性。工作组正在通过这份文档向 Java 社区收集反馈。
JHipster
JHipster发布7.4.0 版本,修复了 User 实体的关系名称,支持 ECMAScript Modules(ESM)和 Vue 微前端架构,将 React JHipster 库更新成 Bootstrap 5.0,在作为 OAuth 2.0 资源服务器时可以处理 Auth0 的认证信息。
TornadoVM
TornadoVM 是一家开源软件公司,发布了 TornadoVM 0.12版本,特性包括:一个新的后端,用于 SPIR-V 的 Level Zero 分配器;一个改进的基准测试框架;基准测试框架中增加了新的指标,内核时间(kernel time)和数据传输(data transfers);改进的分析器,加入了新的命令行选项--enableProfiler <silent|console>和--dumpProfiler <jsonFile>。
曼彻斯特大学高级处理器技术研究小组研究员 Juan Fumero 在 2020 年 3 月伦敦 QCon 大会上介绍了 TornadoVM,并为 InfoQ 的技术文章提供了素材。
一个基于 Docker 的示例应用程序可以在 GitHub代码库中找到。
Apache Camel K
Apache Camel K 发布1.7版本,特性包括:支持 Quarkus Native Build 和 Kustomize,Apache Camel Kamelet Catalog 中增加了新 Kamelet。
Apache Camel K 是一个轻量级集成框架,基于 Apache Camel K Runtime 1.10.0、Apache Camel Quarkus 2.4.0、Apache Camel 3.12.0 和 Apache Camel Kamelets 0.5.0。
Kotlin
JetBrains发布Kotlin 1.6.0,带来了很多新特性:封印的 when 语句、改进的 suspend 函数类型和转换、注解类的初始化、改进的递归泛型类型推断。Kotlin/JVM、KotlinJS 和 KotlinNative 也得到了增强。开发者可以通过 JetBrains 布道师开发者 Anton Arhipov 在 YouTube 发布的视频来了解更多内容。
查看英文原文:
Java News Roundup: OpenJDK JEPs for JDK 18, Spring Updates, Payara Platform, Kotlin 1.6
评论