BT

Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ

Topics

Choose your language

InfoQ Homepage News Java News Roundup: OpenJDK JEPs, Plans for Spring 7.0, JobRunr 7.3, Keycloak 26.0, Debezium 3.0

Java News Roundup: OpenJDK JEPs, Plans for Spring 7.0, JobRunr 7.3, Keycloak 26.0, Debezium 3.0

This week's Java roundup for September 30th, 2024, features news highlighting: new OpenJDK JEPs and those targeted for JDK 24; plans for Spring Framework 7.0; JobRunr 7.3.0, Keycloak 26.0.0 and Debezium 3.0.0.

OpenJDK

After its review had concluded, JEP 475, Late Barrier Expansion for G1, was promoted from Proposed to Target to Targeted for JDK 24. This JEP proposes to simplify the implementation of the G1 garbage collector's barriers, which record information about application memory accesses, by shifting their expansion from early in the C2 JIT's compilation pipeline to later. The goal is to reduce the execution time of C2 when using the G1 collector.

Two days after having been elevated from its JEP Draft 8340841 to Candidate status, JEP 489, Vector API (Ninth Incubator), has been promoted from Candidate to Proposed to Target for JDK 24. This JEP incorporates enhancements in response to feedback from the previous eight rounds of incubation, namely: JEP 469, Vector API (Eighth Incubator), delivered in JDK 23; JEP 460, Vector API (Seventh Incubator), delivered in JDK 22; JEP 448, Vector API (Sixth Incubator), delivered in JDK 21; JEP 438, Vector API (Fifth Incubator), delivered in JDK 20; JEP 426, Vector API (Fourth Incubator), delivered in JDK 19; JEP 417, Vector API (Third Incubator), delivered in JDK 18; JEP 414, Vector API (Second Incubator), delivered in JDK 17; and JEP 338, Vector API (Incubator), delivered as an incubator module in JDK 16. Originally slated to be a re-incubation by reusing the original Incubator status, it was decided to keep enumerating. The Vector API will continue to incubate until the necessary features of Project Valhalla become available as preview features. At that time, the Vector API team will adapt the Vector API and its implementation to use them, and will promote the Vector API from Incubation to Preview. The review is expected to conclude on October 9, 2024.

JEP 484, Class-File API, has been promoted from Candidate to Proposed to Target for JDK 24. This JEP proposes to finalize this feature in JDK 24 after two rounds of preview, namely: JEP 466, Class-File API (Second Preview), delivered in JDK 23; and JEP 457, Class-File API (Preview), delivered in JDK 22. This feature provides an API for parsing, generating, and transforming Java class files. This will initially serve as an internal replacement for ASM, the Java bytecode manipulation and analysis framework, in the JDK with plans to have it opened as a public API. Goetz has characterized ASM as "an old codebase with plenty of legacy baggage" and provided background information on how this feature will evolve and ultimately replace ASM. The review is expected to conclude on October 8, 2024.

JEP 492, Flexible Constructor Bodies (Third Preview), has been promoted from its JEP Draft 8338287 to Candidate status. This JEP proposes a third round of preview, with minimal change to gain additional experience and feedback from the previous two round, namely: 482, Flexible Constructor Bodies (Second Preview), delivered in JDK 23; and JEP 447, Statements before super(...) (Preview), delivered in JDK 22. This feature allows statements that do not reference an instance being created to appear before the this() or super() calls in a constructor; and preserve existing safety and initialization guarantees for constructors. Changes in this JEP include: a treatment of local classes; and a relaxation of the restriction that fields can not be accessed before an explicit constructor invocation to a requirement that fields can not be read before an explicit constructor invocation. Gavin Bierman, consulting member of technical staff at Oracle, has provided an initial specification of this JEP for the Java community to review and provide feedback.

JEP 491, Synchronize Virtual Threads without Pinning, has been promoted from its JEP Draft 8337395 to Candidate status. This JEP proposes to:

Improve the scalability of Java code that uses synchronized methods and statements by arranging for virtual threads that block in such constructs to release their underlying platform threads for use by other virtual threads. This will eliminate nearly all cases of virtual threads being pinned to platform threads, which severely restricts the number of virtual threads available to handle an application's workload.

JEP 488, Primitive Types in Patterns, instanceof, and switch (Second Preview), has been promoted from its JEP Draft 8335876 to Candidate status. This JEP, under the auspices of Project Amber, proposes a second round of preview, without change, to gain additional experience and feedback from the previous round or preview, namely: JEP 455, Primitive Types in Patterns, instanceof, and switch (Preview), delivered in JDK 23. This feature enhances pattern matching by allowing primitive type patterns in all pattern contexts, and extending instanceof and switch to work with all primitive types. More details may be found in this draft specification by Aggelos Biboudis, principal member of technical staff at Oracle.

JEP 487, Scoped Values (Fourth Preview), has been promoted from its JEP Draft 8338456 to Candidate status. This JEP proposes a fourth preview, with one change, in order to gain additional experience and feedback from one round of incubation and three rounds of preview, namely: JEP 481, Scoped Values (Third Preview), delivered in JDK 23; JEP 464, Scoped Values (Second Preview), delivered in JDK 22; JEP 446, Scoped Values (Preview), delivered in JDK 21; and JEP 429, Scoped Values (Incubator), delivered in JDK 20. Formerly known as Extent-Local Variables (Incubator), this feature enables sharing of immutable data within and across threads. This is preferred to thread-local variables, especially when using large numbers of virtual threads.

JEP 14, The Tip & Tail Model of Library Development, a new informational JEP, memorializes the "tip and tail" release model as practiced with OpenJDK releases since 2018. The "tip" refers to the six-month OpenJDK release cadence, while the "tail" refers to the quarterly critical patch updates with releases in January, April, July and October. The intent is to minimize backports from "tip" to "tail" for improved maintenance. Maintainers of Java libraries are encouraged to practice the "tip and tail" release model.

JDK 24

Build 18 of the JDK 24 early-access builds was made available this past week featuring updates from Build 17 that include fixes for various issues. Further details on this release may be found in the release notes.

For JDK 24, developers are encouraged to report bugs via the Java Bug Database.

GlassFish

GlassFish 7.0.18, the eighteenth maintenance release, delivers bug fixes, improvements in documentation and new features such as: the ability to launch GlassFish Embedded Server from the command-line; and the ability to dynamically update the common classloader, via the new GlassfishUrlClassLoader class, if a common library is added without the need to restart the server. Further details on this release may be found in the release notes.

GraalVM

Fabio Niephaus, research manager on the GraalVM team at Oracle Labs, announced the release of a new GitHub repository complete with new demos and guides for the GraalPy, GraalJS, and GraalWasm projects. This repository coincides with the recent release of GraalVM for JDK 23 in which GraalPy and GraalWasm were elevated to stable and suitable for production workloads.

TornadoVM

TornadoVM 1.0.8, the eighth maintenance release provides bug fixes and improvements such as: new methods, printTraceExecutionPlan() and getTraceExecutionPlan(), defined in the TornadoExecutionPlan sealed class to log and dump operations enabled for the TornadoVM execution plan; a removal of the getHandleByIndex(), defined in the PowerMetric interface as it performed inner low-level functionality that wasn’t necessary to be exposed in a device context; and minor improvements in benchmarking. More details on this release may be found in the release notes.

Spring Framework

With the upcoming release of Spring Framework 6.2 in November 2024, the Spring team has already prepared plans for Spring Framework 7.0 release in November 2025. As stated:

We will upgrade our baseline to Jakarta EE 11 (Tomcat 11, Hibernate ORM 7, Hibernate Validator 9) and embrace the upcoming JDK 25 LTS, while retaining a JDK 17 baseline in alignment with the wider Java ecosystem. For Kotlin applications, we intend to base Spring Framework 7's support on Kotlin 2.

The team also plans to implement a null-safety strategy using the JSpecify annotations. Further details on JSpecify may be found in this InfoQ news story.

Helidon

Version 4.1.2 of Helidon delivers dependency upgrades and notable changes such as: an improved implementation of server-side events (SSE) in the WebServer component; and the addition of a missing validation from within the findNewLine() method, defined in the DataReader class, to keep the internal index within bounds. Further details on this release may be found in the changelog.

Similarly, version 3.2.10 of Helidon 3.2.10 also provides dependency upgrades and notable changes such as: the ability to close HTTP connections after five-minutes of idle time has elapsed; and replace the use of server configuration in the WebServer component in favor of socket configuration. More details on this release may be found in the changelog.

JobRunr

Version 7.3.0 of JobRunr and JobRunr Pro have been released with new features such as: full compatibility with Quarkus 3.15 and Kotlin 2.0.20; improved thread safety incorporated into the BackgroundJobServer class; and the ability to set the serverTimeoutPollIntervalMultiplicand attribute, defined in the BackgroundJobServerConfiguration class, via properties. Further details on this release may be found in the release notes.

Hibernate

The release of Hibernate Reactive 2.4.2.Final ships with resolutions to issues: a ClassCastException when retrieving a composite table entity annotated with the Jakarta Persistence @IdClass; and embeddable JSON values not being mapped correctly in the database. More details on this release may be found in the release notes.

Micrometer

Version 1.13.5 of Micrometer Metrics features dependency upgrades and a resolution to a ConcurrentModificationException due to a Keycloak server instance unable to start and allowing the configuration of a MeterFilter interface after meters have already been registered. Further details on this release may be found in the release notes.

Grails

The release of Grails 6.2.1 provides bug fixes, dependency upgrades and notable changes such as: compatibility with Groovy 3.0.22; and the ability to customize classes in cascading style sheets for the ErrorsViewStackTracePrinter class. More details on this release may be found in the release notes.

Infinispan

Versions 15.1.0.Dev04 and 15.0.10.Final of Infinispan ship with dependency upgrades and notable changes that include enhancements to Redis Serialization Protocol (RESP) operations that: ensure that serialization consistently returns a response in RESP3 format; and the elimination of a deadlock due to the get() method, defined in the SimpleCacheImpl class, that handles expiration in memory and returns an instance of a CompletableFuture class. Further details on these releases may be found in the release notes for version 15.1.0.Dev04 and version 15.0.10.Final.

Keycloak

Keycloak 26.0.0 has been released with new features such as: release cycles for their dedicated libraries (Java admin client, Java authorization client, Java policy enforcer) that are independent of the Keycloak release cycle; user sessions that are now persisted by default; a new default login theme; and a preview of tracing with OpenTelemetry. More details on this release may be found in the release notes. InfoQ will follow up with a more detailed news story.

Testcontainers for Java

Testcontainers for Java 1.20.2 delivers bug fixes, improvements in documentation, dependency upgrades and new features/enhancements such as: an implementation of MongoDB Atlas; new modules to support Databend and Timeplus; and an enhancement to the Cassandra module that eliminates runtime exceptions. Further details on this release may be found in the release notes.

RefactorFirst

Jim Bethancourt, principal software consultant at Improving, an IT services firm offering training, consulting, recruiting, and project services, has released versions 0.6.1 and 0.6.0 of RefactorFirst, a utility that prioritizes the parts of an application that should be refactored. These releases deliver: a change to only calculate the average commit count of classes in a cycle when the showDetails property is set to true due to a strong correlation with the number of classes involved in a cycle; and the removal of the JGraphT modules, jgrapht-core and jgapht-ext, from the report module due to a transitive dependency on the JGraphX Swing Component and resolves CVE-2017-18197, a vulnerability in which the mxGraphViewImageReader class is susceptible to XML External Entity (XXE) attacks. More details on this release may be found in the release notes for version 0.6.1 and version 0.6.0.

Debezium

Almost two years since the release of Debezium 2.0.0.Final, an open-source distributed platform for change data capture (CDC), the release of Debezium 3.0.0.Final features: JDK 17 as a minimal version; support for Kafka 3.8.0; removal of the deprecated incremental signal field, additional-condition; and the addition of detailed metrics per database table. There were also updates to the connectors for all supported databases. Further details on this release may be found in the release notes. InfoQ will follow up with a more detailed news story.

About the Author

Rate this Article

Adoption
Style

BT