本周的Java摘要包含了来自OpenJDK、JDK 21、Azul Zulu、Spring Boot、Spring Security、Spring Security Kerberos、Spring Integration、Spring Batch、Spring for GraphQL、Spring Authorization Server、Spring LDAP、Micronaut、Open Liberty、TornadoVM、Hibernate ORM、Apache TomEE、Apache Tika、OpenXava、JBang、JDKMon和Spring I/O会议的新闻。
JEP 449《弃用用于移除的Windows 32位x86端口》已从提议状态提升为目标状态,并针对JDK 21进行了定向。这个由微软的高级项目经理George Adams提出的JEP建议弃用Windows x86-32端口,并计划在未来的版本中将其移除。由于没有在32位平台上实施JEP 436《虚拟线程(第二次预览)》的计划,移除对该端口的支持将使OpenJDK开发人员能够加快新功能的开发进程。
JEP 445《未命名类和实例主方法(预览)》已从提议状态提升为目标状态,并针对JDK 21进行了定向。这个JEP建议"发展Java语言,以便学生在不需要理解为大型程序设计的语言特性的情况下编写他们的第一个程序"。这个JEP推进了2022年9月的博文《铺设入口道》,作者是Oracle的Java语言架构师Brian Goetz。Oracle的技术顾问Gavin Bierman已发布了规范文档的初稿,供Java社区审阅。InfoQ将跟进此新闻,并提供更详细的报道。
JEP 443《未命名模式和变量(预览)》已从提议状态提升为目标状态,并针对JDK 21进行了定向。这个预览JEP建议"通过引入未命名模式,为语言增加新的功能,使其能够匹配记录组件而无需指定组件的名称或类型,并引入未命名变量,这些变量可以初始化但不能使用"。这两个特性都使用下划线字符表示,例如r instanceof _(int x, int y)和r instanceof _。
JEP 404《分代Shenandoah(实验性)》已从提议状态提升为目标状态,并针对JDK 21进行了定向。这个JEP建议"通过增强Shenandoah垃圾收集器的分代收集能力,提高可持续吞吐量、抗负载峰值的能力和内存利用率"。与其他垃圾收集器(如G1、CMS和Parallel)相比,Shenandoah目前需要额外的堆空间,并且在回收不可达对象占用的空间方面更加困难。InfoQ将跟进此新闻,并提供更详细的报道。
JEP 452《密钥封装机制API》已从候选状态提升为提议状态,并针对JDK 21进行了定向。这个JEP建议:满足标准密钥封装机制(KEM)算法的实现;满足高级安全协议对KEM的使用场景;允许服务提供商插入Java或本地实现的KEM算法。这个草案最近进行了更新,包括一项重大变更,即通过在encapsulate(int from, int to, String algorithm)方法的参数列表中添加字段,来替换DerivedKeyParameterSpec类。该审核预计将于2023年5月26日结束。InfoQ将跟进此新闻,并提供更详细的报道。
Oracle的项目Loom的架构师和技术负责人Ron Pressler宣布了JEP 453《结构化并发(预览)》的几个变更。目前仍处于候选状态,此功能的变更包括:将TaskHandle接口重命名为Subtask;修正handleComplete()方法的泛型签名;更改取消时子任务的状态和行为;在Threads类中定义了一个新的currentThreadEnclosingScopes()方法,返回当前结构化上下文的描述字符串。
上周发布了JDK 21早期访问版本的Build 23,该版本对Build 22进行了更新,修复了各种问题。有关此版本的更多详细信息,请参阅发布说明。
对于JDK 21,开发人员被鼓励通过Java Bug数据库报告错误。
Azul宣布他们的OpenJDK下游发行版Zulu现在支持协调还原检查点(CRaC),以减少Java应用程序的启动和预热时间。InfoQ将跟进此新闻,并提供更详细的报道。
Spring Boot 3.1.0的发布带来了一些值得注意的新功能,包括:支持使用Testcontainers和Docker Compose在开发时管理外部服务;简化集成测试中Testcontainers的配置;集中和扩展SSL信任材料的连接配置;以及针对Spring Authorization Server的自动配置。此外,还升级了Spring Data 2023.0、Spring GraphQL 1.2、Spring Integration 6.1、Spring Security 6.1和Spring Session 3.1的依赖关系。有关此版本的更多详细信息,请参阅发布说明。
发布了Spring Boot 3.0.7、2.7.12、2.6.15和2.5.15版本,修复了错误,改进了文档和依赖项,并解决了以下问题:CVE-2023-20883,Spring Boot欢迎页面DoS漏洞,如果将Spring MVC与反向代理缓存一起使用,存在拒绝服务(DoS)攻击的潜在风险;CVE-2023-20873,Cloud Foundry上的通配符模式匹配绕过安全漏洞,如果将应用程序部署到Cloud Foundry,可能会受到与/cloudfoundryapplication/**端点匹配的请求绕过安全的风险。有关这些版本的更多详细信息,请参阅3.0.7版本、2.7.12版本、2.6.15版本和2.5.15版本的发布说明。
Spring Security 6.1.0的发布带来了新功能,包括更全面的解释,推荐使用lambda DSL来配置Spring Security,而不是使用and()方法;以及有关跨站请求伪造(CSRF)的改进文档。有关此版本的更多详细信息,请参阅发布说明。
Spring Security Kerberos 2.0.0的第一个候选版本改进了文档,并重新实现/迁移了spring-security-kerberos-test中的实用程序,因为Apache目录服务器库已经经历了许多重构。有关此版本的更多详细信息,请参阅发布说明。
Spring Integration 6.1的发布带来了一些重要的变化,例如:对SftpRemoteFileTemplateTests类进行了额外的诊断测试;修复了FluxMessageChannel类中的内存泄漏问题;对ImapMailReceiverTests类进行了改进和清理;以及新增了PartitionedChannel类,用于分区消息调度。有关此版本的更多详细信息,请参阅发布说明。
发布了Spring Batch 5.0.2,修复了错误,改进了文档,并增加了一些新功能,例如:允许StaxEventItemReader类自动检测输入文件的编码;在JobParameters类中进行了更改,现在在构造函数和getParameters()方法中使用LinkedHashMap的实例,以保证输入顺序;减少了对已弃用API的使用。有关此版本的更多详细信息,请参阅发布说明。
发布了Spring for GraphQL 1.2.0,新增了一些功能,例如对AOT处理器中的@GraphQlExceptionHandler注解方法的支持;GraphQlTester接口中的嵌套路径支持;@BatchMapping注解方法的模式映射检查。有关此版本的更多详细信息,请参阅发布说明。
类似地,还发布了Spring for GraphQL 1.1.4,提供了错误修复、依赖项升级、文档改进以及一个新功能,即ClientGraphQlRequest接口通过WebClient接口向请求传递属性。有关此版本的更多详细信息,请参阅发布说明。
Spring Authorization Server 1.1.0的发布包含依赖项升级和新功能,例如:演示示例中简化的联合登录和更新的UI设计;默认客户端示例中添加了一个注销成功页面;如果授权代码被多次使用,则撤销令牌。有关此版本的更多详细信息,请参阅发布说明。
发布了Spring LDAP 3.1.0的3.1.0和3.0.3版本,包括依赖项升级,例如Spring Security 5.8.3和5.7.8,以及Jackson 2.15.0和2.14.3,并且在3.0.3版本中引入了一个新功能,即对使用@DnAttribute注解的属性映射进行了限化。有关这些版本的更多详细信息,请参阅版本3.1.0和版本3.0.3的发布说明。
Micronaut基金会发布了Micronaut Framework 3.9.2版本,修复了一些错误并更新了模块:Micronaut Azure、Micronaut AWS、Micronaut GCP、Micronaut OpenAPI、Micronaut SQL和Micronaut Kubernetes。有关此版本的更多详细信息,请参阅发布说明。
IBM发布了Open Liberty 23.0.0.5-beta版本,包括对InstantOn的持续增强,该新功能提供了MicroProfile和Jakarta EE应用程序更快的启动时间,并提供了Jakarta Data规范预览的最新更新。
TornadoVM是一家开源软件技术公司,发布了TornadoVM 0.15.1版本,修复了错误并带来了一些显著改进,包括:通过OpenCL后端改进与Apple M1/M2的兼容性;引入基于设备计算能力的设备选择启发式算法;与Graal 22.3.2 JIT编译器的集成和兼容性;通过Tornado数据流图优化了主机(CPU)和设备(GPU)之间的只读和只写缓冲区的冗余数据拷贝;改进了GraalVM/Truffle程序的集成;以及提供了在单元测试中转储TornadoVM字节码的选项。有关此版本的更多详细信息,请参阅发布说明。
Juan Fumero是曼彻斯特大学高级处理器技术研究小组的研究助理,他在2020年3月的QCon London大会上介绍了TornadoVM,并贡献了这篇较新的InfoQ技术文章。
发布了Hibernate ORM 6.2.3.Final版本,修复了一些错误,改进了性能,并为本机PostGIS距离操作符提供了HQL支持。有关此版本的更多详细信息,请参阅变更列表。




