This week's Java roundup for March 13th, 2023, features news from OpenJDK, JDK 20, JDK 21, GraalVM 23.0 early-access, Spring Tools 4.18, Quarkus 3.0-Alpha6, Hibernate ORM 6.2 CR4, Micrometer Metrics 1.11, Micrometer Tracing 1.1, Infinispan 14.0.7, Piranha 23.3, Project Reactor 2022.0.5, Eclipse Mojarra 4.0.2, Apache Groovy 4.0.10 and 3.0.16, JHipster Lite 0.29.0, JReleaser 1.5.1 and JobRunr 6.1.2.
OpenJDK
JEP 440, Record Patterns, has been promoted from its JEP Draft 8300541 to Candidate status this past week. This JEP finalizes this feature and incorporates enhancements in response to feedback from the previous two rounds of preview: JEP 432, Record Patterns (Second Preview), delivered in JDK 20; and JEP 405, Record Patterns (Preview), delivered in JDK 19. This feature enhances the language with record patterns to deconstruct record values. Record patterns may be used in conjunction with type patterns to "enable a powerful, declarative, and composable form of data navigation and processing." Type patterns were recently extended for use in switch
case labels via: JEP 420, Pattern Matching for switch (Second Preview), delivered in JDK 18, and JEP 406, Pattern Matching for switch (Preview), delivered in JDK 17. The most significant change from JEP 432 removed support for record patterns appearing in the header of an enhanced for
statement.
Similarly, JEP 441: Pattern Matching for switch, has been promoted from its JEP Draft 8300542 to Candidate status. This JEP also finalizes this feature and incorporates enhancements in response to feedback from the previous four rounds of preview: JEP 433, Pattern Matching for switch (Fourth Preview), delivered in JDK 20; JEP 427, Pattern Matching for switch (Third Preview), delivered in JDK 19; JEP 420, Pattern Matching for switch (Second Preview), delivered in JDK 18; and JEP 406, Pattern Matching for switch (Preview), delivered in JDK 17. This feature enhances the language with pattern matching for switch expressions and statements.
JEP 442, Foreign Function & Memory API (Third Preview), has been promoted from its JEP Draft 8301625 to Candidate status. This JEP incorporate refinements based on feedback and to provide a third preview from: JEP 434, Foreign Function & Memory API (Second Preview), delivered in JDK 20; JEP 424, Foreign Function & Memory API (Preview), delivered in JDK 19, and the related incubating JEP 419, Foreign Function & Memory API (Second Incubator), delivered in JDK 18; and JEP 412, Foreign Function & Memory API (Incubator), delivered in JDK 17. This feature provides an API for Java applications to interoperate with code and data outside of the Java runtime by efficiently invoking foreign functions and by safely accessing foreign memory that is not managed by the JVM. Updates from JEP 434 include: centralizing the management of the lifetimes of native segments in the Arena
interface; enhanced layout paths with a new element to dereference address layouts; and removal of the VaList
class.
JEP Draft 8303683, Virtual Threads, was submitted by Ron Pressler, architect and technical lead for Project Loom at Oracle, and Alan Bateman, architect, Java Platform Group, at Oracle this past week. This JEP proposed to finalize this feature based on feedback from the previous two rounds of preview: JEP 436, Virtual Threads (Second Preview), delivered in JDK 20; and JEP 425, Virtual Threads (Preview), delivered in JDK 19. This feature provides virtual threads, lightweight threads that dramatically reduce the effort of writing, maintaining, and observing high-throughput concurrent applications, to the Java platform. The most significant change from JEP 436 is that virtual threads now fully support thread-local variables by eliminating the option to opt-out of using these variables. More details on JEP 425 may be found in this InfoQ news story and this JEP Café screen cast by José Paumard, Java developer advocate, Java Platform Group at Oracle.
JEP Draft 8304400, Launch Multi-File Source-Code Programs, also submitted by Pressler, proposes to enhance the Java Launcher to execute an application supplied as one or more files of Java source code. This allows a more gradual transition from small applications to larger ones by postponing a full-blown project setup.
JDK 20
JDK 20 remains in its release candidate phase with the anticipated GA release on March 21, 2023. Build 36 remains the current build in the JDK 20 early-access builds. More details on this build may be found in the release notes.
JDK 21
Build 14 of the JDK 21 early-access builds was also made available this past week featuring updates from Build 13 that include fixes to various issues. Further details on this build may be found in the release notes.
For JDK 20 and JDK 21, developers are encouraged to report bugs via the Java Bug Database.
GraalVM
Oracle Labs has published the latest early-access developer builds for GraalVM 23.0.0. New features include: initial support for Native Image Bundles; improved support for AWT on Linux; and native image recommendations. More details on this release may be found in the release notes.
Spring Framework
The release of Spring Tools 4.18.0 ships with: an upgraded Eclipse 2023-03 IDE; new and improved content-assist for Spring Data repository query methods; a fix for an issue that caused regular Java content-assist in VSCode to stop working; and a fix in m2e
that caused resource files, such as application.properties
, to not be copied into the target folder. More details on this release may be found in the release notes.
Quarkus
The sixth alpha release of Quarkus 3.0.0 provides these two new features: enabling OpenTelemetry for JDBC by setting the quarkus.datasource.jdbc.telemetry
property to true
; and the CredentialsProviders
interface now supports MongoDB connections. There were also dependency upgrades to SnakeYaml 2.0, Maven Compiler Plugin 3.11.0, Maven OpenRewrite Maven Plugin 4.41.0, SmallRye Common 2.1.0 and JBoss Threads 3.5.0.Final. More details on this release may be found in the changelog.
Hibernate
The fourth release candidate of Hibernate ORM 6.2 provides 33 bug fixes and 28 refinements based on Java community feedback. It is expected that this is the last release candidate before the final release.
Micrometer
The second milestone release of Micrometer Metrics 1.11.0 delivers new features such as: a new metric, jvm.threads.started
, that reports the total number of active application threads in the JVM; a new Elasticsearch endpoint, \_index\_template
, to create index templates; add the GC name to the jvm.gc.pause
metric; and support for micrometer libraries on OSGi-based Java runtimes.
Similarly, the second milestone release of Micrometer Tracing 1.1.0 features: parity with Spring Cloud Sleuth annotations; and dependency upgrades to Micrometer 1.11.0-M2 and OpenTelemetry 1.24.0.
Infinispan
Infinispan 14.0.7.Final has been released featuring support for Spring Framework 6 and Spring Boot 3. Some notable bug fixes include: a NullPointerException in the MetricsCollector
class; JSON parser doesn't correctly report error locations; the Redis Serialization Protocol (RESP) endpoint cannot parse requests larger than the packet size; and concurrent access to Spring Session integrations result in lost session attributes.
Piranha
The release of Piranha 23.3.0 provides notable changes such as: an updated CodeQL workflow; add JUnit tests for the DefaultAnnotationManager
class; and a fix for the RuntimeException
when the endpoint application is still in the process of being deployed. More details on this release may be found in their documentation and issue tracker.
Project Reactor
Project Reactor 2022.0.5, the fifth maintenance release, provides dependency upgrades to reactor-core
3.5.4, reactor-addons
3.5.1, reactor-netty
1.1.5, reactor-kafka
1.3.17 and reactor-kotlin-extensions
1.2.2.
Eclipse Mojarra
Eclipse Mojarra 4.0.2 has been released with notable changes such as: cleanup of the MockServletContext
class to remove unused methods and add the @Override
annotation; cleanup of the ParseXMLTestCase
class to remove unused methods, variables and commented code; ensure the version()
method in the @FacesConfig
annotation cannot return null
; and a fix for a NumberFormatException
upon updating buttons inside a facet header of a data table. More details on this release may be found in the release notes.
Apache Software Foundation
The release of Apache Groovy 4.0.10 delivers notable bug fixes and improvements such as: a confusing error message from the GroovyScriptEngine
class; a memory leak where local variable values are not discarded; the @Builder
annotation not working on JDK 16; and the MissingPropertyException
truncates the name of a nested class name. More details on this release may be found in the release notes.
Similarly, the release of Apache Groovy 3.0.16 ships with notable bug fixes such as: unable to call methods from the BiPredicate
interface on closures or lambdas on JRE 16+; the use of the @CompileStatic
annotation confuses statically importing instances and methods; and an IllegalAccessException
using the default interface methods with JDK 17 and Groovy 3.0.9. This release also supports JDK 16. More details on this release may be found in the release notes.
JHipster
The JHipster team has released JHipster Lite 0.29.0 with new features and enhancements such as: removing dependencies from the JHipsterModulePackageJson
class based on user feedback; removing the warning messages when more than four active ApplicationContext
sessions within Cassandra database applications are being tested; and a new dependency and configuration for Redis. More details on this release may be found in the release notes.
JReleaser
Version 1.5.1 of JReleaser, a Java utility that streamlines creating project releases, has been released delivering notable fixes such as: add the missing graalVMNativeImage
property to the Native Image assembler utility; the Java Archive utility generates the wrong format for the JAVA_OPTS
environmental variable; and improved error handling when executing external commands. More details on this release may be found in the release notes.
JobRunr
JobRunr 6.1.2 has been released featuring two bug fixes: a failure to update metadata, with eventual shut down, when using MySQL and the useServerPrepStmts
property set to true
; and an issue with the JobRunr Quarkus Extension in which the JobRunrDocumentDBStorageProviderProducer
class is not using proper configuration.