@levinzhang
2023-05-16T08:42:11.000000Z
字数 5998
阅读 325
by
本期的Java新闻汇总涉及OpenJDK、JDK 21、Spring Boot 3.1.0-RC2、Spring Modulith 0.6、Spring Cloud for Amazon Web Services 3.0.0、Spring Cloud Data Flow 2.10.3、Spring Tools 4.18.2、Infinispan 14.0.9.Final、Open Liberty 23.0.0.4、Quarkus 3.0.2与2.16.7、Helidon 3.2.1、Apache Camel 4.0.0-M3、Arquillian 1.7.0以及OptaPlanner转移至Timefold。
本期的Java新闻汇总涉及OpenJDK、JDK 21、Spring Boot 3.1.0-RC2、Spring Modulith 0.6、Spring Cloud for Amazon Web Services 3.0.0、Spring Cloud Data Flow 2.10.3、Spring Tools 4.18.2、Infinispan 14.0.9.Final、Open Liberty 23.0.0.4、Quarkus 3.0.2与2.16.7、Helidon 3.2.1、Apache Camel 4.0.0-M3、Arquillian 1.7.0以及OptaPlanner转移至Timefold。
JEP 448,Vector API(第六轮孵化),已经从JDK 21的Candidate状态提升至Proposed to Target状态。这个JEP位于Panama项目中,它纳入了前五轮孵化反馈的改进,即JDK 20交付的JEP 438,Vector API(第五轮孵化)、JDK 19交付的JEP 426,Vector API(第四轮孵化)、JDK 18交付的JEP 417,Vector API(第三轮孵化)、JDK 17交付的JEP 414,Vector API(第二轮孵化)和JDK 16交付的JEP 338,Vector API(孵化)。该特性的目标是增强Vector API,从而能够根据JEP 424, 外部函数与内存API(预览)的定义,从MemorySegment中加载和存储Vector。该轮审查预计会在2023年5月9日结束。
JEP 445,无名类和实例主方法(Unnamed Classes and Instance Main Methods)(预览)已经从JDK 21的Candidate状态提升至Proposed to Target。这个特性的JEP以前被称为灵活主方法和匿名主类(Flexible Main Methods and Anonymous Main Classes)(预览)以及隐式类和主方法增强(Implicit Classes and Enhanced Main Methods)(预览),提议“改进Java语言,以便于让学生无需了解为大型程序所设计的语言特性,就能编写出第一个程序”。这个JEP进一步推进了甲骨文的Java语言架构师Brian Goetz在2022年9月份所发表的博客文章“Paving the on-ramp”。甲骨文技术团队的顾问成员Gavin Bierman发布了规范文档的第一个草案,供Java社区审查。该轮审查预计会在2023年5月12日结束。InfoQ会以更详细的新闻报道进行跟踪。
JEP 441,switch的模式匹配,已经从JDK 21的Candidate状态提升为Proposed to Target状态。该JEP最终确定了这一特性,并针对前四轮预览的反馈添加了一些改进,即JDK 20交付的JEP 433,switch的模式匹配(第四轮预览)、JDK 19交付的JEP 427,switch的模式匹配(第三轮预览)、JDK 18交付的JEP 420,switch的模式匹配(第二轮预览)以及JDK 17交付的JEP 406,switch的模式匹配(预览)。该特性通过对switch表达式和语句进行模式匹配,增强了语言的功能。该轮审查预计会在2023年5月11日结束。InfoQ会以更详细的新闻报道进行跟踪。
JEP 440,记录模式(Record Patterns),已经从JDK 21的Candidate状态提升到了Proposed to Target状态。该JEP最终确定了这一特性,并针对前两轮预览的反馈添加了一些改进,即JDK 20交付的JEP 432,记录模式(第二轮预览)和JDK 19交付的JEP 405,记录模式(预览)。该特性使用记录模式来解构记录值,以实现对语言的增强。记录模式可以与类型模式结合使用,以“实现强大的、声明式的、可组合的数据导航和处理形式”。类型模式最近通过JDK 18 交付的 JEP 420,switch模式匹配(第二次预览)和JDK 17交付的JEP 406,switch模式匹配(预览)扩展到了switch
case 标签中。JEP 432最重要的变化是移除了对出现在增强型for
语句中的记录模式的支持。该轮审查预计会在2023年5月11日结束。InfoQ会以更详细的新闻报道进行跟踪。
JEP 439,Generational ZGC,已经从JDK 21的Candidate状态提升为Proposed to Target状态。该JEP建议“通过扩展Z垃圾收集器(ZGC)来提升应用的性能,使年轻对象和老对象保持独立的分代。这将允许ZGC更频繁地收集年轻的对象,这些对象往往会在较为年轻的时候就已经死亡了。”该轮审查预计会在2023年5月10日结束。InfoQ会以更详细的新闻报道进行跟踪。
JEP 404,Generational Shenandoah(实验阶段),已经从JDK 21的Candidate状态提升到了Proposed to Target状态。该JEP建议“通过分代的收集功能增强Shenandoah垃圾收集器,以提高可持续的吞吐量、负载高峰的韧性和内存利用率。”与其他垃圾收集器(比如G1、CMS和Parallel)相比,Shenandoah目前需要额外的堆头部空间(headroom),并且更难恢复不可达对象占用的空间。该轮审查预计会在2023年5月12日结束。InfoQ会以更详细的新闻报道进行跟踪。
JEP 450,紧凑的对象头信息(Compact Object Headers)(实验阶段)已经从JEP Draft 8294992提升到了Candidate状态。在Lilliput项目的支持下,该JEP草案建议将Java对象的头信息从96或128比特减少至64比特。Lilliput项目由亚马逊云科技的首席工程师Roman Kennke创建,该项目在2022年5月实现了64比特的头信息,这是其第一个里程碑。
甲骨文的编程语言设计师Daniel Smith已经宣布,原名为空限制值对象存储(Null-Restricted Value Object Store)(预览)和基本类型类(Primitive Classes) (Preview)的JEP 401改名为值对象的扁平化堆分布(Flattened Heap Layouts for Value Objects)。Smith提供了一份更新的规范文档供社区审查。
JDK 21的早期访问构建版本Build 21发布,该版本是对Build 20的更新,包含了对各种问题的修复。关于该版本的更多细节,请参阅发布说明。
对于JDK 21,鼓励开发人员通过Java Bug数据库报告缺陷。
Spring Boot 3.1.0的第二个发布候选版本提供了一些新特性,比如,将DockerComposeProperties类中的默认关闭设置为stop
;自动应用TestcontainersLifecycleApplicationContextInitializer类进行上下文测试;增加对SQL Server、Oracle Database、Liquibase、Flyway和Cassandra数据库的Docker Compose服务连接支持。同时,Couchbase SSL的keystore属性spring.couchbase.env.ssl.key-store
和spring.couchbase.env.ssl.key-store-password
被弃用,转而使用Couchbase中对SSL绑定的支持。关于该版本的更多细节,请参阅发布说明。
Spring Modulith 0.6提供了缺陷修复、依赖性升级以及值得关注的新特性,例如,如果启用了事件发布注册表,则自动配置MongoDB事务;事件发布注册表支持异步处理和关闭行为;@EnableScenario
注解,用来在@SpringBootTest
集成测试中使用Scenario Testing API;支持Application Module Canvas中的jMolecules架构类型。Spring Modulith团队还决定将该项目提升为顶级的、非实验性的Spring项目,并计划在Spring Boot 3.1的GA发布后发布1.0-M1版本。关于该版本的更多细节,请参阅发布说明。
Spring Cloud for Amazon Web Services的3.0.0版本发布,其新特性包括,与Spring Boot 3.0兼容;构建在AWS SDK V2 for Java之上;重写的SQS集成模块;对DynamoDB的重新集成。关于该版本的更多细节,请参阅发布说明。
Spring Cloud Data Flow 2.10.3发布,主要解决了传递性依赖中的安全性问题,比如,spring-security-oauth2-client-5.4.2
、spring-expression-5.2.11
、spring-webmvc-5.3.25
、json-smart-2.3
和jettison-1.51
。此外,还有Spring Boot 2.7.11和Spring Cloud子项目的依赖性升级。关于这个版本的更多细节,请参阅发布说明。
Spring Tools 4.18.1发布,其特性包括,支持在探查@Value注解时导航到Spring属性文件;支持属性导航中的@ConditionalOnProperty注解,以及使用Eclipse 2023-06里程碑版本构建。Spring Tools团队预计4.19.0版本将在2023年6月底发布。关于这个版本的更多细节,请参阅发布说明。
Infinispan 14.0.9.Final发布,其重要变化包括,修复Infinispan第三方集成测试与JDK17之间的问题;文档记录如何监控跨站复制;删除对Jaeger测试容器的依赖,并修复属性文件中的端口号。关于这个版本的更多细节可以在变更日志中找到。
IBM发布了Open Liberty 23.0.0.4,其特性包括,为ARM64架构以及现有的AMD64、PPC64LE和S390X架构提供容器镜像;解决了CVE-2023-24998,即Apache Commons FileUpload中的一个漏洞,由于请求部分的数量没有进行限制,攻击者可以通过恶意上传触发拒绝服务攻击。
Quarkus 3.0.2.Final是第二个维护版本,其中有一些值得注意的变化,比如,在Infinispan Dev Services指南中把server-list
文件改名为hosts
;修复Dev UI2显示错误Java版本的问题;解决Kubernetes Dev Services指南中没有正确记录k3s
名称的问题;修正RESTEasy Reactive流资源方法导致原生模式下出现NoSuchMethodException
异常的问题。关于这个版本的更多细节,请参阅发布说明。
Quarkus 2.16.7.Final发布,其特性包括,修复了OIDC代码加载令牌解密密钥时的算法对比缺陷;OIDC UserInfo类的一个微小更新,如果给定名称的字符串或布尔属性不存在,会抛出NullPointerException
;解决Quarkus dev
模式在使用@ApplicationScoped
注解时无法与某种类型的项目目录树协同运行的问题;修正如果OIDC客户端无法获取令牌会抛出异常的问题。关于这个版本的更多细节,请参阅发布说明。
甲骨文发布了Helidon 3.2.1,其新特性包括, JpaExtension类的启用标志,以允许后续的重构和替换;与MicroProfile Rest Client和Fault Tolerance规范进行集成的变化,以处理因Weld规范中的默认调用上下文问题而产生的异步调用;支持与Jaeger OpenTelemetry不同传播器的集成。关于这个版本的更多细节,请参阅发布说明。
Apache Camel 4.0.0的第三个里程碑版本包含缺陷修复、依赖性升级和功能增强,例如,改变默认的Micrometer指标名称以遵循Micrometer命名约定;支持Micrometer Observation;在Spring Boot实现中直接使用HTTP服务器;为添加/删除的HTTP端点添加监听器,使运行时(如Spring Boot)更容易使用Camel的platform-http
和自己的HTTP服务器。关于这个版本的更多细节,请参阅发布说明。
Arquillian 1.7.0.Final发布,其特性包括,支持Jakarta Servlet 6.0;支持@ArquillianResource注解注入的URL使用HTTPS;修复了使用TestNG 7.5+时LoggerFactory类出现的NoClassDefFoundError
异常的问题。关于这个版本的更多细节可以在更新日志中找到。
OptaPlanner是一个面向软件开发人员的开源人工智能约束解算器(constraint solver),它将转移至Timefold,这是一家由Maarten Vandenbroucke(联合创始人兼CEO)和Geoffrey De Smet(联合创始人兼CTO)创建的新规划优化公司。OptaPlanner是De Smet在红帽公司担任高级首席软件工程师时创建的,在红帽公司的支持下,OptaPlanner已经发展成熟,提供了他们自己的版本。InfoQ会以更详细的新闻报道进行跟踪。
查看英文原文:Java News Roundup: JEPs for JDK 21, Spring Cloud AWS 3.0, OptaPlanner to Timefold