This week's Java roundup for June 5th, 2023, features news from OpenJDK, JDK 21 in Rampdown, JDK 22 expert group, Jakarta EE 11 update, Spring Security Kerberos 2.0.0, Quarkus 3.1.1, Micronaut 3.9.3, Eclipse Vert.x 4.4.3, Apache Commons IO 2.13, Apache Tomcat 11.0.0-M7 and 9.0.76, Infinispan 14.0.10 and 13.0.17, JHipster Lite 0.34, OpenXava 7.1.1, Yupiik Fusion 1.0.3, Gradle 8.2-RC2 and JNation.
OpenJDK
JEP 453, Structured Concurrency (Preview), has been promoted from Proposed to Target to Targeted for JDK 21. Formerly a incubating API, this initial preview incorporates enhancements in response to feedback from the previous two rounds of incubation: JEP 428, Structured Concurrency (Incubator), delivered in JDK 19; and JEP 437, Structured Concurrency (Second Incubator), delivered in JDK 20. The only significant change features the fork()
method, defined in the StructuredTaskScope
class, returns an instance of TaskHandle
rather than a Future
since the get()
method in the TaskHandle
interface was restructured to behave the same as the resultNow()
method in the Future
interface. More details on this JEP may be found in this detailed InfoQ news story.
JEP 446, Scoped Values (Preview), has been promoted from Proposed to Target to Targeted for JDK 21. Formerly known as Extent-Local Variables (Incubator), this JEP is now a preview feature following JEP 429, Scoped Values (Incubator), delivered in JDK 20. This JEP 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. InfoQ will follow-up with a more detailed news story.
Roman Kennke, principal engineer at AWS and owner of JEP 404, Generational Shenandoah (Experimental), has proposed to drop this JEP from JDK 21 due to the "risks identified during the review process and the lack of time available to perform the thorough review that such a large contribution of code requires." The Shenandoah team has decided to "deliver the best Generational Shenandoah that they can" and will seek to target JDK 22. The review is expected to conclude on June 14, 2023.
JDK 21
Build 26 of the JDK 21 early-access builds was also made available this past week featuring updates from Build 25 that include fixes to various issues. Further 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 21 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 21. Therefore, the final set of 15 features for the GA release in September 2023 will include:
- JEP 430: String Templates (Preview)
- JEP 431: Sequenced Collections
- JEP 439: Generational ZGC
- JEP 440: Record Patterns
- JEP 441: Pattern Matching for switch
- JEP 442: Foreign Function & Memory API (Third Preview)
- JEP 443: Unnamed Patterns and Variables (Preview)
- JEP 444: Virtual Threads
- JEP 445: Unnamed Classes and Instance Main Methods (Preview)
- JEP 446: Scoped Values (Preview)
- JEP 448: Vector API (Sixth Incubator)
- JEP 449: Deprecate the Windows 32-bit x86 Port for Removal
- JEP 451: Prepare to Disallow the Dynamic Loading of Agents
- JEP 452: Key Encapsulation Mechanism API
- JEP 453: Structured Concurrency (Preview)
This feature set assumes that the proposal to remove the aforementioned JEP 404, Generational Shenandoah (Experimental), originally targeted for JDK 21, will be approved.
For JDK 21, developers are encouraged to report bugs via the Java Bug Database.
JDK 22
JSR 397, Java SE 22, was submitted this past week to formally announce the six-member expert group for JDK 22, namely Simon Ritter (Azul Systems), Manoj Palat (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 January 2024 through February 2024 and the GA release in March 2024.
Build 0 and Build 1 of the JDK 22 early-access builds were also made available this past week featuring the initial set of release updates.
Jakarta EE
Ivar Grimstad, Jakarta EE developer advocate at the Eclipse Foundation, announced in his Hashtag Jakarta EE weekly blog that the requests for plan review for Jakarta EE 11 have been submitted ahead of the May 30, 2023 deadline. Developers can expect updates to the Jakarta Authentication 3.1, Jakarta Authorization 3.0, Jakarta Concurrency 3.1, Jakarta Contexts and Dependency Injection 4.1, Jakarta Expression Language 6.0, Jakarta Faces 5.0, Jakarta RESTful Web Services 4.0, Jakarta Server Pages 4.0, Jakarta Persistence 3.2, Jakarta Security 4.0, Jakarta Servlet 6.1 and Jakarta WebSocket 2.2 specifications with the release of Jakarta EE 11, scheduled for the first quarter of 2024.
It is also important to note that the Jakarta Data 1.0, Jakarta NoSQL 1.0 and Jakarta MVC 3.0 specifications with approved release plans, are currently considered as standalone, i.e., they haven’t yet been incorporated into the Platform, Web or Core profiles of Jakarta EE.
Spring Framework
The release of Spring Security Kerberos 2.0.0 delivers notable changes such as: backwards compatible support for JDK 8; wrap the execution of the UserDetailsService
interface in a PrivilegedAction
interface so that it can reuse Kerberos authentication; and a fix for a NotSerializableException
with the JaasSubjectHolder
class. More details on this release may be found in the list of issues.
Quarkus
Red Hat has released Quarkus 3.1.1.Final featuring dependency upgrades and notable changes such as: properly catch non-unique result exceptions with Security Jakarta Persistence Reactive; prevent a NullPointerException
in preparation of Jacoco reports when a workspace module has no sources; a fix for the @NamedNativeQuery
annotation not working in Hibernate Reactive when converting to native image; and a fix for Quarkus 3.1 throwing an IllegalStateException
exception if the @Produces
annotation is not defined on a stream response. Further details on this release may be found in the release notes.
Micronaut
The Micronaut Foundation has released Micronaut Framework 3.9.3 featuring bug fixes and updates to modules: Micronaut Servlet and Micronaut AWS. There was also a dependency upgrade to Netty 4.1.92. More details on this release may be found in the release notes.
The third release candidate of Micronaut 4.0 delivers bug fixes and improvements such as: add a default method to the overloaded set of writeValueAsString()
methods in the JsonMapper
interface; improved exception handling on scheduled jobs; and a new parameter, missingBeans=EndpointSensitivityHandler.class
, for the @Requires
annotation on the EndpointsFilter
class to convey that endpoint sensitivity is handled externally and the filter will not be loaded. Further details on this release may be found in the release notes.
Eclipse Vert.x
Eclipse Vert.x 4.4.3 has been released with dependency upgrades and notable fixes such as: a broken tracing integration with the JDBC SQL client; an IndexOutOfBoundsException
from the serviceName()
method in the GrpcMethodCall
class; and a NullPointerException
from the updateSSLOptions()
method in the HttpServer
interface due to a null
instance of the SSLHelper
class. More details on this release may be found in the release notes and deprecations and breaking changes.
Version 4.4.3.1 of the Vert.x JDBC Client has also been released to fix an IP address parsing regression introduced in Vert.x 4.4.3. Developers who use the vertx-jdbc-client
module should upgrade to this dependency until an upgrade to the next full stack release is provided.
Apache Software Foundation
The release of Apache Commons IO 2.13.0 delivers notable changes such as: a fix for the FileAlreadyExistsException
from the createParentDirectories()
method in the PathUtils
class; reset the setCharset(null)
and setCharsetEncoder(null)
methods in the ReaderInputStream.Builder
class to return a default object instead of throwing a NullPointerException
; and add missing conversions to the subclasses of the AbstractOrigin
class. Further details on this release may be found in the release notes.
Versions 11.0.0-M7 and 9.0.76 of Apache Tomcat both ship with: support for JDK 21 and virtual threads; a new RateLimitFilter
class to help mitigate Denial of Service and Brute Force attacks by limiting the number of a requests that are allowed from a single IP address within a given time window; and a dependency upgrade to Tomcat Native to 2.0.4 which includes binaries for Windows built with OpenSSL 3.0.9. More details may be found in the changelogs for version 11.0.0-M7 and version 9.0.76.
Infinispan
Infinispan 14.0.10.Final provides notable changes such as: Spring Framework 6.x and Spring Boot 3.x dependency upgrades; a fix to the IPv6 wildcard address when detecting multihoming; and an implementation of the the conditional methods, computeIfAbsent()
and computeIfPresent()
, in the RemoteCache
interface. Further details on this release may be found in the release notes.
Similarly, Infinispan 13.0.17.Final features notable changes such as: eliminate the corruption of binary files by not filtering binary resources; an issue where a JNDI data source is not available when deploying to Tomcat by lazily initiating the data source from the getConnection()
method in the ManagedConnectionFactory
class; and correct the documented port number in the property file examples in the Spring Boot starter documentation. More details on this release may be found in the release notes.
JHipster
The JHipster team has released version 0.34.0 of JHipster Lite with many dependency upgrades and notable enhancements such as: the removal of unused local variables; the replacement of concatenating strings with text blocks; and improvements in the React application. Further details on this release may be found in the release notes.
OpenXava
Version 7.1.1 of OpenXava has been released featuring dependency upgrades and the ability to visit a website resource that is annotated with @HtmlText
. More details on this release may be found in the release notes.
Yupik
Version 1.0.3 of Yupiik Fusion has been released with notable changes such as: support for kubeconfig
files in Kubernetes Client libraries; improved reuse of the CliAwaiter
class; and expose the prepare()
method in the KubenetesClient
class by changing the access specifier from private
to public
. Further details on this release may be found in the release notes.
Gradle
The second release candidate of Gradle 8.2 features improvements such as: continued improvements to the Kotlin DSL reference documentation, clean and actionable error reporting for the console output, and dependency verification that mitigates security risks with compromised dependencies; and the simple property assignment operator (=
) operator, introduced in the Kotlin DSL with the last release, is enabled by default. More details on this release may be found in the release notes.
JNation Conference
The JNation conference was held at the Convento São Francisco in Coimbra, Portugal, this past week featuring many speakers from the Java community who presented sessions and workshops on topics such as Project Loom, JavaScript, Java on ARM, WebAssembly, Kubernetes and GraalVM.