This week's Java roundup for December 5th, 2022, features news from OpenJDK, JDK 20 in Rampdown Phase One, formation of the JDK 21 expert group, point and milestone releases of: Spring Shell, Spring Tools, Quarkus, Open Liberty, GraalVM Native Build Tools, Apache Tomcat, Hibernate ORM, Eclipse Vert.x, Resilience4j, JDKMon and Ktor; and JakartaOne Livestream 2022.
OpenJDK
JEP 429, Scoped Values (Incubator), was promoted from Proposed to Target to Targeted for JDK 20. This incubating JEP, formerly known as Extent-Local Variables (Incubator) and under the auspices of Project Loom, proposes to enable sharing of immutable data within and across threads. This is preferred to thread-local variables, especially when using large numbers of virtual threads.
JEP 436, Virtual Threads (Second Preview), was promoted from Proposed to Target to Targeted for JDK 20. This JEP, under the auspices of Project Loom, proposes a second preview from JEP 425, Virtual Threads (Preview), delivered in JDK 19, to allow time for additional feedback and experience for this feature to progress. It is important to note that no changes are within this preview except for a small number of APIs from JEP 425 that were made permanent in JDK 19 and, therefore, not proposed in this second preview.
JEP 437, Structured Concurrency (Second Incubator), was promoted from Proposed to Target to Targeted for JDK 20. This JEP, also under the auspices of Project Loom, proposes to reincubate this feature from JEP 428, Structured Concurrency (Incubator), delivered in JDK 19, to allow time for additional feedback and experience. The only change is an updated StructuredTaskScope
class to support the inheritance of scoped values by threads created in a task scope. This streamlines the sharing of immutable data across threads.
JDK 20
Build 27 of the JDK 20 early-access builds was also made available this past week, featuring updates from Build 26 that include fixes to various issues. More details on this build may be found in the release notes.
As per the JDK 20 release schedule, Mark Reinhold, chief architect, Java Platform Group at Oracle, formally declared that JDK 20 has entered Rampdown Phase One. This means that the main-line source repository has been forked to the JDK stabilization repository and no additional JEPs will be added for JDK 20. Therefore, the final set of six (6) features for the GA release in March 2023 will include:
- JEP 429: Scoped Values (Incubator)
- JEP 432: Record Patterns (Second Preview)
- JEP 433: Pattern Matching for switch (Fourth Preview)
- JEP 434: Foreign Function & Memory API (Second Preview)
- JEP 436: Virtual Threads (Second Preview)
- JEP 437: Structured Concurrency (Second Incubator)
For JDK 20, developers are encouraged to report bugs via the Java Bug Database.
JDK 21
JSR 396, Java SE 21, was submitted this past week to formally announce the six-member expert group for JDK 21, namely Simon Ritter (Azul Systems), Jayaprakash Arthanareeswaran (Eclipse Foundation), Andrew Haley (Red Hat), Christoph Langer (SAP SE), Iris Clark (Oracle) and Brian Goetz (Oracle). Clark and Goetz will serve as the specification leads. Other notable dates at this time include a public review from June 2023 through August 2023 and the GA release in September 2023.
Build 1 of the JDK 21 early-access builds was also made available this past week featuring the initial set of release updates.
Spring Framework
Versions 2.1.4 and 3.0.0-M3 of Spring Shell have been made available to the Java community. Version 2.1.4 provides bug fixes and builds upon Spring Boot 2.7.6. Version 3.0.0-M3 is the first milestone to build upon Spring Boot 3.0 and delivers bug fixes and a new testing framework to eliminate the traditional difficult task of testing shell applications in which the tests are more complex, that is, beyond plain unit tests of method targets. More details on these releases may be found in the release notes for version 2.1.4 and version 3.0.0-M3.
Spring Tools 4.17.0 has been released featuring changes to the Spring Tools 4 for Eclipse 2022-12 distribution. This new version also ships with experimental support for: Spring Boot version validations in which the IDE will provide alerts to a newer major, minor, or patch version available for a Spring Boot project; Spring Boot upgrade support to assist in upgrading existing projects to newer Spring Boot versions; and Spring-specific validations and refactorings to indicate whether something can or should be changed in source code to keep a Spring project up-to-date with the latest recommendations or advancements in Spring. More details on this release may be found in the user guide.
Quarkus
Red Hat has released Quarkus 2.14.3.Final featuring bug fixes and improvements in documentation and upgrades to SmallRye Jandex 3.0.5, Stork 1.3.3 and Apache Mina SSHD artifacts, sshd-core
and sshd-common
, to version 2.9.2. More details on this release may be found in the release notes.
The second alpha release of Quarkus 3.0.0 features a second iteration of their Jakarta EE 10 stream that is in progress for the next alpha release, scheduled for the end of January 2023. Quarkus 3.0.0.Alpha2 is based on Quarkus 2.14.3.Final. More details on this release may be found in the changelog.
Open Liberty
IBM has released Open Liberty 22.0.0.13-beta featuring support for: Jakarta EE 10 specifications Jakarta Authentication 3.0, Jakarta Authorization 2.1, Jakarta Security 3.0 and Jakarta Faces 4.0; the upcoming release of MicroProfile 6.0; and the ability to configure the First Failure Data Capture (FFDC) logs to automatically purge the FFDC log files after they reach a specified age.
IBM has also proposed to relicense Open Liberty under the Eclipse Public License - version 2.0 so that Open Liberty may continue their contributions as a compatible implementation for the MicroProfile and Jakarta EE specifications. A GitHub issue was created for the Java community to provide feedback and to monitor progress.
GraalVM Native Build Tools
On the road to version 1.0, Oracle Labs has released version 0.9.19 of Native Build Tools, a GraalVM project consisting of plugins for interoperability with GraalVM Native Image. This latest release provides: a fix for compile task, nativeCompile
, being out-of-date whenever native runtime arguments change; a fix for GraalVM metadata repository not downloaded from Maven Central by default; and remove the dev
version from the workflow. More details on this release may be found in the changelog.
Apache Software Foundation
Versions 10.1.4 and 9.0.70 of Apache Tomcat deliver notable changes that include: a refactor of the WebappLoader
class so it only has a runtime dependency on the migration tool for Jakarta EE if configured to use the converter as classes are loaded (version 10.1.4 only); a fix for when the current active stream count was not reduced when an HTTP/2 stream was reset; and an update to Apache Commons Daemon 1.3.3. More details for these releases may be found in the release notes for version 10.1.4 and version 9.0.70.
The first milestone release of Apache Tomcat 11.0.0 (alpha) that ships with: alignment with the current development versions of the Jakarta Servlet, Jakarta Server Pages and Jakarta Expression Language specifications; BASIC authentication now uses UTF-8 by default; and conversions from bytes to characters now trigger exceptions rather than a replacement for invalid byte sequences for a given encoding. More details on this release may be found in the changelog.
Version 1.0.6 of the Apache Tomcat Migration tool for Jakarta EE has been released featuring: correct regression in handling of javax.annotation
package introduced in version 1.0.5; and allow parallel use of the ClassConverter
class. More details on this release may be found in the changelog.
Hibernate
Hibernate ORM 6.1.6.Final has been released delivering bug fixes and improvements in performance such as: initialization of an entity when a reference was found in the Second Level Cache avoiding the unnecessary call to the properties setter methods; an improved method that checks for duplicates of an HQL query result that reduces the amount of in-memory ORM processing; and mitigations to performance limitations as described in JDK-8180450, Secondary Super Cache Issue That Does Not Scale Well.
Eclipse Vert.x
In response to a number of reported bugs found in version 4.3.5, Eclipse Vert.x 4.3.6 has been released with new features such as: allow multiple regular expressions in CORS to allow downstream projects to preserve their configurations (vertx-web
module); a dependency upgrade to Hazelcast 4.2.6 (vertx-hazelcast
module); and add a type check for the of()
method in the Tuple
interface (vertx-sql-client
module). More details on this release may be found in the release notes
Resilience4j
Versions 2.0.2 and 2.0.1 of Resilience4j, a fault tolerance library for Java, have been released featuring: a fix for the corresponding decorator implementations of the CircuitBreaker
CheckedSupplier
and CheckedFunction
interfaces that were not opening on the recordResultPredicate
property; support for Spring Boot 3.0 via the resilience4j-spring-boot3
and resilience4j-spring6
artifacts; and apply Spring Boot customizers even if there is no instance entry in the configuration file. More details on Resilience4j may be found in this InfoQ news story.
JDKMon
Version 17.0.41 of JDKMon, a tool that monitors and updates installed JDKs, has been made available this past week. Created by Gerrit Grunwald, principal engineer at Azul, this new version ships with: dependency upgrades to Gradle 7.6 and others; and a separate download dialog for builds of GraalVM that include Gluon, Mandrel and Liberica Native Image Kit (NIK).
Ktor
JetBrains has released versions 2.2.1 and 2.2.0 of Ktor, the asynchronous framework for creating microservices and web applications, that includes: OpenAPI documentation generation; a new API for creating custom client plugins to access different stages of handling requests and responses through a set of handlers; a new RateLimit
plugin to set rate limiting for incoming requests; and a new ProtoBuf serializer for serializing/deserializing data objects.
JakartaOne Livestream 2022
The fourth annual JakartaOne Livestream 2022 conference was held this past week featuring speakers from the Java community who presented on topics such as: the Jakarta EE Core Profile; MicroProfile 6.0; Piranha Cloud; Testcontainers; Jakarta NoSQL and Cosmos DB; and Cloud Native Java. The virtual conference, hosted by Tanja Obradovic, Jakarta EE program manager, Shabnam Mayel, senior marketing manager of Jakarta EE, and Ivar Grimstad, Jakarta EE developer advocate, also included a keynote by Mike Milinkovich, executive director at the Eclipse Foundation, and an industry keynote by Java luminaries representing Payara, Tomitribe, Oracle, Microsoft and IBM.