Java近期新闻:Spring Framework 6.1、Spring Data 2023.1、Payara Platform
在结束了评审后,JEP 459(字符串模板(第二次预览))已从 Proposed to Target 进入到 Targeted(JDK 22)状态。这个 JEP 在经过第一次预览之后进行第二次预览:在 JDK 21 中交付的 JEP 430(字符串模板(预览))。该特性通过字符串模板来增强 Java 编程语言,字符串字面量中包含嵌入表达式,这些表达式将在运行时被解释和计算。有关 JEP 430 的更多细节可以在 InfoQ 的 新闻报道 中找到。
JEP 463(隐式声明类和实例主方法(第二次预览))已从 Candidate 进入到 Proposed to Target(JDK 22)状态。这个 JEP 也就是之前的未命名类和实例主方法(预览)、灵活的主方法和匿名主类(预览)以及隐式类和增强的主方法(预览),包含了针对前一轮预览反馈(即 JEP 445,未命名类和实例主方法(预览))的增强。这个 JEP 提议“让学生可以在不需要理解太多语言特性的前提下编写他们的第一个程序。”2022 年 9 月,Oracle 的 Java 语言架构师 Brian Goetz 为此撰写了 “Paving the on-ramp” 一文。Oracle 技术委员会成员 Gavin Bierman 已发布规范文档初稿,供 Java 社区评审。关于 JEP 445 的更多细节可以在 InfoQ 的其他报道中找到。
JEP 457(类文件 API(预览))已从 Candidate 进入到 Proposed to Target(JDK 22)状态。该 JEP 提议提供用于解析、生成和转换 Java 类文件的 API。它将先作为 ASM 的内部替代(ASM 是 Java 字节码操作和分析框架),并计划在后续开放为公共 API。Oracle Java 语言架构师 Brian Goetz 将 ASM 描述为“一个带有大量遗留负担的老代码库”,并提供了背景信息,说明这个草案将如何演进并最终取代 ASM。评审预计于 2023 年 11 月 28 日结束。
JEP 447(super() 之前的语句(预览))已从 Candidate 进入到 Proposed to Target(JDK22)状态。该 JEP 属于 Amber 项目,提议允许在构造函数的this()
或super()
之前出现不引用正在创建的实例的语句并保留构造函数现有的安全性和初始化保证。Oracle 技术顾问 Gavin Bierman 为 Java 社区提供了这个 JEP 的初始规范以供评审和反馈。评审预计于 2023 年 11 月 22 日结束。
JEP 423(G1 区域固定)已从 Candidate 进入到 Proposed to Target(JDK 22)状态。该 JEP 提议为 G1 垃圾回收器实现区域固定(Region Pinning)来降低 GC 延迟。这是对 G1 的扩展,使得在主要和次要回收操作期间可以固定任意区域,避免在实现 JNI 临界区域时垃圾回收被禁用。评审预计于 2023 年 11 月 28 日结束。
JDK 22 早期访问版本的 Build 24 已经可用,包含了自 Build 23 以来的 更新,包括对各种问题的修复。有关此版本的更多详细信息,请参阅发布说明。
对于 JDK 22,开发者可以通过 Java Bug Database 报告错误。
Spring Framework 6.1.0 发布,带来了问题修复、文档改进、依赖项升级和新特性,例如:使用 ClientHttpResponse 接口的消息转换器将响应体转换为所需类型;改进了对容器元素错误的方法验证支持;在 ControlFlowPointcut 类中支持方法名模式匹配。有关此版本的更多详细信息,请参阅发布说明和 What's New 页面。
类似地,Spring Framework 6.0.14 和 5.3.31 也已发布,带来了问题修复、文档改进、依赖项升级和新特性,例如:在 LogAdapter 类中定义的LogAdapter
内部类,在反序列化时为与 Log4j 2.21 保持兼容需要对 Log4j ExtendedLogger 接口进行重新解析;优化了 Hotspot 的 StandardTypeLocator 类,可以更好地解析相同的类;增强了 ProblemDetail 类中的属性设置。有关这些版本的更多详细信息,请参阅 6.0.14 的发布说明和 5.3.31 的发布说明。
Spring Data 2023.1.0 发布,代号 Vaughn,带来了这些特性:与 JDK 21 兼容;通过配置 Java Executor 接口来使用虚拟线程;支持 Kotlin 内联直类;优化 Checkpoint/Restore(CRaC);Spring Data JDBC 的单查询加载;将文档迁移到 Antora。有关此版本的更多详细信息,请参阅发布说明。
类似地,Spring Data 服务版本 2023.0.6、2022.0.12 和 2021.2.18 的带来了问题修复和相应的子项目依赖项升级,例如:Spring Data Commons 3.1.6、3.0.12 和 2.7.18;Spring Data MongoDB 4.1.6、4.0.12 和 3.4.18;Spring Data Elasticsearch 5.1.6、5.0.12 和 4.4.18;以及 Spring Data Neo4j 7.1.6、7.0.12 和 6.3.18。这些版本可以分别在即将发布的 Spring Boot 3.1.6、3.0.13 和 2.7.18 中使用。
Payara 发布了 Payara Platform 的 2023 年 11 月版本,包括 Community Edition 6.2023.11、Enterprise Edition 6.8.0 和 Enterprise Edition 5.57.0。更新内容包括:问题修复;将依赖项 Maven Bundle Plugin 升级到 5.1.9;修复了 Payara Platform Payara Server、Micro 和 Embedded 中的 CVE-2023-41699 安全漏洞,这是一个 URL 重定向到不受信任站点的漏洞。
新特性包括:新的命令行参数--warmup
,与asadmin
命令的start-domain
一起使用,在引导启动后停止服务器;为所有 Payara Server Management asadmin 命令添加了单独的超时选项。
Payara 还推出了 Payara Starter,一个源代码生成器,用于创建新的 Payara Server 或 Payara Micro 项目。
有关这些版本的更多详细信息,请参阅 Community Edition 6.2023.11、Enterprise Edition 6.8.0 和 Enterprise Edition 5.57.0 的发布说明。
IBM 发布了 Open Liberty 23.0.0.11,为 MicroProfile Metrics 5.0、4.0 和 3.0 新增了新的供应商指标,可直接添加到各种监控工具的仪表盘中,无需进行额外的计算。这些新指标包括:Process CPU Utilization Percent、Heap Utilization Percent、GC Time per Cycle、Connection Pool in Use Time per Used Connection、Connection Pool Wait Time per Queued Request、Servlet Elapsed Time per Request 和 REST Elapsed Time per Request 。
其他新特性包括:解决了 IBM WebSphere Application Server Liberty 23.0.0.9 到 23.0.0.10 中的 CVE-2023-46158 漏洞(由于不正确地处理资源过期而导致安全性降低);在server.xml
中使用include
元素包含所有服务器配置文件,避免像之前那样需要单独指定它们。
Micronaut 基金会发布了 Micronaut Framework 4.2.0,包括 Micronaut Core 4.2.0,增强了 Kotlin Symbol Processing,并分别将依赖项 Kotlin 和 Netty 升级到 1.9.20 和 4.1.101。Micronaut Launch 中已添加了对 JDK 21 和 Gradle Kotlin DSL 的支持。有关此版本的更多详细信息,请参阅发布说明。
Grails 基金会发布了 Grails Framework 6.1.0,包含问题修复、文档改进、依赖项升级和这些重要变更:将 SnakeYAML 升级到 2.2,解决 CVE-2022-1471 漏洞(通过 SnakeYAML 的Constructor()
类对类型进行反序列化可能导致攻击者发起恶意远程代码执行);解耦 Sitemesh 插件以提高灵活性。有关此版本的更多详细信息,请参阅发布说明。
Quarkus 3.5.2 发布,修复了一些错误,改进了文档,并带来了这些显著变化:修复了 CVE-2023-21971 漏洞(允许攻击者通过多个协议进行网络访问,从而威胁到 MySQL Connectors,这可能导致未经授权的攻击挂起 MySQL Connectors 或频繁出现拒绝服务,以及未经授权的更新、插入或删除访问部分 MySQL Connectors 可访问的数据);针对 Windows 操作系统禁用了 Http2RSTFloodProtectionTest 和 CustomManifestArgumentsTest 类,因为这些测试在单个连接中创建了许多流,导致不稳定;由于 Windows 操作系统上的持续集成问题,避免在 RestClientCDIDelegateBuilderTest 类中使用 JUnit @TempDir 注解。
此版本的更多详细信息可在变更日志中找到。
Apache Tomcat 的 11.0.0-M14、10.1.16、9.0.83 和 8.5.96 版本均带来了问题修复和重要变更:确保在读取请求消息期间出现IOException
时始终触发错误处理,无论应用程序是否处理这个异常;修复了 Tomcat Connector 的一个问题,这个问题在使用 TLSCertificateReloadListener 类重新加载 Transport Layer Security(TLS)配置时拒绝新连接或导致 JVM 崩溃;StatusManagerServlet 类现在可以以 JSON 格式输出统计信息。
对于 12.11.0.0-M14,与 OpenSSL 的集成将使用 Foreign Function & Memory API API,而不是 Tomcat Native。在使用 Java 22 或更高版本的 JDK 时,可以通过在 Server 元素上添加 OpenSSLLifecycleListener 类来启用 OpenSSL 支持。有关这些版本的更多详细信息,请参阅版本 11.0.0-M14、10.1.16、9.0.83 和 8.5.96 的变更日志。
另外,Apache Camel 4.2.0 带来了问题修复、依赖项升级和新特性 / 改进,例如:支持 OAuth 2.0(Camel HTTP 组件);支持使用 @Primary 注解进行 Spring bean 自动装配(Camel Spring 组件);可以使用旧的 Micrometer 指标名称或遵循新的 Micrometer 命名约定(Camel Micrometer 组件)。
Eclipse Vert.x 4.5.0 发布,增加了一些新特性,例如:支持 JDK 21 和虚拟线程;创建动态 SQL 连接;允许在运行时更新 TCP 客户端 / 服务器 SSL 选项,以进行证书轮换;实现了用于连接 HTTP 客户端和 SQL 连接池的 Builder 模式。这个版本的详细信息可以在发布说明和弃用和重大变更说明中找到。
Mojarra 4.0.5 是 Jakarta Faces 规范的兼容实现,主要变更包括:将 Weld 的重新初始化从 ConfigureListener 类移回其原始的 FacesInitializer 类,以解决异常问题;修复了规范和实现之间在使用常量字段时的不匹配,规范中定义为"jakarta.faces.WEBAPP_CONTRACTS_DIRECTORY"
的常量字段在 ResourceHandler 类中被定义为WEBAPP_CONTRACTS_DIRECTORY_PARAM_NAME
;在InitFacesContext
类的getExceptionHandler()
方法中添加了一个新的 ExceptionHandler 类来处理UnsupportedOperationException
。该版本的详细信息可以在发布说明中找到。
Micrometer Metrics 的 1.12.0、1.11.6、1.10.13 和 1.9.17 版本均带来了问题修复、文档改进、依赖项升级和新特性。其中 1.12.0 增加了这些特性:支持 Generational ZGC;JettyConnectionMetrics 类支持 Jetty 12;新增了 JmsInstrumentation 类,以增加对 Jakarta Messaging 规范的可观察性。这些版本的详细信息可以分别在 1.12.0、1.11.6、1.10.13 和 1.9.17 的发布说明中找到。
类似的,Micrometer Tracing 的 1.2.0、1.1.7 和 1.0.12 版本均带来了依赖项升级和新特性。1.2.0 增加了这些特性:将 SpanTagAnnotationHandler 类变为可选的,使其可以与 TimedAspect 类匹配,让框架可以更容易地进行配置;在 FinishedSpan 接口中定义了一个新的getDuration()
方法;因为所有的 Instrumentation 项目将不提供对传输的抽象,因此对 HTTP 的抽象已被弃用并可能在将来移除。这些版本的详细信息可以在 1.2.0、1.1.7 和 1.0.12 的发布说明中找到。
Project Reactor 2023.0.0 发布,包含了一些依赖项升级:reactor-core 3.6.0
、reactor-netty 1.1.13
、reactor-kafka 1.3.22
、reactor-pool 1.0.3
、reactor-addons 3.5.1
、reactor-kotlin-extensions 1.2.2
。有关该版本更详细的信息,请参阅变更日志。
类似的,Reactor 的第 13 个维护版本 2022.0.13 带来了这些依赖项升级:reactor-core 3.5.12
、reactor-netty 1.1.13
、reactor-kafka 1.3.22
。可以在变更日志中了解更多关于该版本的详细信息。
Piranha 23.11.0 发布,带来了一些重大变更:支持 JDK 21;支持 Piranha Core Profile 的协调恢复检查点(CRaC);移除了可维护性、代码行数、代码覆盖率和代码质量等徽章。可以在官方文档和问题追踪器中了解更多有关该版本的详细信息。
JDKMon (一个用于监控和更新已安装 JDK 的工具)17.0.85 和 17.0.83 提供了这项新特性:为 GraalVM 提供与 JDK 相关的国家漏洞数据库 (NVD) 扫描支持;引入了一个新的搜索字段,用于发现 OpenJDK JEP、JSR 和 Java 项目;支持 Common Vulnerability Scoring System (CVSS) 4.0 和 NVD API 2.0。
JobRunr (一个基于持久存储的 Java 后台处理库)6.3.3 发布:为 Quarkus 提供分离的构建时和运行时配置;使用 Quarkus ClientProxy
接口提供的合成类,替代了原来会导致找不到 Bean 的代理名称。有关该版本更多详细信息,请参阅发布说明。
JHipster Lite 0.48.0 发布,带来了问题修复、依赖项升级和新特性 / 增强,如:JHipster Lite 引擎支持的最小 JDK 版本为 21;新的许可模块,可构建 JHipsterModule 类的多个实例;在 @BusinessContext 和 @SharedKernel 注解中添加 name
和 description
属性,用于更好地记录上下文和生成实时文档。关于该版本更多的详细信息请参阅发布说明。
Testcontainers for Java 1.19.2 发布,带来了这些重要变更:在 HttpWaitStrategy
类中启用原生 HTTP 和 HTTPS;新增了一个关闭钩子,可以更快地发送 SIGTERM
到 Moby Ryuk,以便在默认的 10 秒之前关闭。
Arquillian 1.8.0.Final 发布,带来了这些重要变更:修复了 RemoteExtensionLoader 类中的文件泄漏问题;依赖项升级至 Jetty 9.4.51.v20230217,解决了 Jetty 8.1.2.v20120308 的绕过漏洞问题;替换了已弃用的 JUnit 和 Arquillian 构造函数和方法。
Gradle 8.5 的第三个候选版和第二个候选版在新功能上持续改进,如:完全支持使用 JDK 21 编译、测试和运行;Kotlin DSL 的改进,包括更快的初次使用 和支持预编译 Kotlin 脚本插件的版本目录;改进了对错误和警告的报告。这些版本的更多详细信息请参阅 8.5-RC3 版本发布说明和 8.5-RC2 版本发布说明。
英文原文:
https://www.infoq.com/news/2023/11/java-news-roundup-nov13-2023
声明:本文由 InfoQ 翻译,未经许可禁止转载。
微信扫码关注该文公众号作者