This week's Java roundup for November 15th, 2021, features news from OpenJDK JEPs, JDK 18, Project Loom, numerous point releases on Spring projects, MicroProfile 5.0-RC2, Payara Platform, a proposed new Jakarta EE specification, JHipster 7.4.0, TornadoVM 0.12, Apache Camel K 1.7 and Kotlin 1.6.0.
OpenJDK
JEP 419, Foreign Function & Memory API (Second Incubator), has been promoted from Candidate to Proposed to Target for JDK 18. This JEP evolves the first incubator, JEP 412, Foreign Function & Memory API (Incubator), delivered in JDK 17, to incorporate improvements based on Java community feedback. Changes in this second incubator include: support for more carriers in memory access var handles such as boolean
and MemoryAddress
interface; a more general dereference API for the MemoryAddress
and MemorySegment
interfaces; a simpler API to obtain downcall methods handles such that passing a MemoryType
enumeration is no longer necessary; and a new API to copy Java arrays to and from memory segments. The review for JEP 419 concludes on November 23, 2021.
JEP 420, Pattern Matching for switch (Second Preview), has been promoted from Candidate to Proposed to Target for JDK 18. This JEP allows a target switch
expression to be tested against a number of patterns, each with a specific action, allowing complex data-oriented queries to be expressed concisely and safely. This is the second preview following JEP 406, Pattern Matching for switch (Preview), that was delivered in JDK 17. Enhancements include: an improvement in dominance checking that forces a constant case
label to appear before a guarded pattern of the same type; and an exhaustiveness checking of the switch block is now more precise with sealed hierarchies. The review for JEP 420 concludes on November 23, 2021.
Brian Goetz, Java language architect at Oracle, spoke to InfoQ in September 2017 when pattern matching was still in its proof-of-concept phase. Pattern matching for the instanceof
operator, JEP 394, was delivered in JDK 16.
JEP 422, Linux/RISC-V Port, has been promoted from Draft to Candidate status. This JEP proposes to port the JDK to Linux/RISC-V, a free and open-source RISC instruction set architecture. The template interpreter, C1 and C2 JIT compilers, and all current mainline GCs, including ZGC and Shenandoah, will be supported. The main focus of this JEP is to integrate the port into the JDK main-line repository.
JDK 18
Build 24 of the JDK 18 early-access builds was made available this past week, featuring updates from Build 23 that include fixes to various issues. More details may be found in the release notes.
The feature set for JDK 18 currently stands as follows:
- JEP 400: UTF-8 by Default
- JEP 408: Simple Web Server
- JEP 413: Code Snippets in Java API Documentation
- JEP 416: Reimplement Core Reflection with Method Handles
- JEP 417: Vector API (Third Incubator)
- JEP 418: Internet-Address Resolution SPI
- JEP 419: Foreign Function & Memory API (Second Incubator) (Proposed to Target)
- JEP 420: Pattern Matching for switch (Second Preview) (Proposed to Target)
Developers are encouraged to report bugs via the Java Bug Database.
Project Loom
Build 18-loom+5-274 of the Project Loom early-access builds was made available to the Java community and is based on Build 22 of the JDK 18 early access builds.
Spring Framework
It was a busy week over at Spring as the team provided point releases on multiple projects.
Spring Boot 2.6 has been released featuring dependency upgrades to Spring Data 2021.1, Spring HATEOAS 1.4, Spring AMQP 2.4, Spring Kafka 2.8, Spring Security 5.6 and Spring Session 2021.1. Other new features include: an enhanced /info
endpoint with Java runtime information; and support for testing Spring MVC applications using the WebTestClient
interface.
Spring Boot version 2.4.13 and version 2.5.7 have also been released featuring 26 bug fixes and 35 bug fixes, respectively, along with documentation improvements and dependency upgrades.
After three milestone releases and one release candidate, Spring Security 5.6.0 has been made available to the Java community featuring: a new interface, SecurityContextChangedListener
, that may be used as the assignment target for a lambda expression or method reference; support for SAML 2.0 single logout; and support to propagate the TestSecurityContextHolder
class to the SecurityContextHolder
class. More details may be found in the release notes.
Spring Cloud Netflix version 2.2.10.RELEASE has been released to address CVE-2021-22053, a vulnerability that exposes a way to execute code submitted within the request URI path, /hystrix/monitor;[user-provided data]
, during resolution of view templates with applications using spring-cloud-netflix-hystrix-dashboard
and spring-boot-starter-thymeleaf
.
Spring Batch versions 4.3.4 and 4.2.8 were made available featuring bug fixes such as: ensuring that the getParameters()
method defined in the JobParameters
class returns a set of immutable parameters; fixing the "IllegalArgumentException: Only 1 out of 2 arguments could be assigned" error message upon invoking the MethodInvokingTaskletAdapter
and NamedParameterJdbcTemplate
classes; and ensuring that the getLastJobExecution()
method defined in the SimpleJobExplorer
class fetches step executions and execution contexts.
Spring for Apache Kafka 2.8 has been released featuring: support for out-of-order manual commits; a new set of common error handlers to replace the separate record
and batch
error handlers; and the KafkaTemplate<K,V>
class may now be used to receive specific records from known partitions.
Spring AMQP (Spring for RabbitMQ) 2.4 has been made available featuring initial support for the RabbitMQ Stream Plugin and declaring that support for Spring Remote Method Invocation (RMI) has been deprecated. Further details may be found in the release notes.
The Road to MicroProfile 5.0
On the road to MicroProfile 5.0, the MicroProfile Working Group has provided the second release candidate that includes the latest updates of the eight community-developed specifications:
- Config 3.0-RC5
- Health 4.0-RC3
- Fault Tolerance 4.0-RC5
- Metrics 4.0-RC4
- JWT 2.0-RC2
- OpenAPI 3.0-RC5
- OpenTracing 3.0-RC4
- RestClient 3.0-RC5
These specifications will be aligned with Jakarta EE 9.1.
Payara
Payara has released their November 2021 edition of the Payara Platform. The Payara Platform Community 5.2021.9 release offers 11 improvements, six bug fixes and 11 component upgrades and the Payara Platform Enterprise 5.33.0 offers four improvements, four bug fixes, and two component upgrades. Support for JDK 17 has been implemented in the Community edition, but further testing to ensure stability is in progress for the Enterprise Edition. A breaking change for both versions is the removal of the TLS 1.0 and TLS 1.1 protocols which are now disabled by default.
More details may be found in the release notes for the Community and Enterprise editions.
Jakarta EE
The Jakarta EE Working Group has introduced a proposal for a new Jakarta EE specification, Jakarta Commons, to satisfy the need for a specification to handle common APIs, functionality, and libraries to ensure consistency among the specifications. The working group is soliciting feedback from the Java community by viewing and commenting on this document.
JHipster
Version 7.4.0 of JHipster has been released to include: fix the User
entity relationship names; add support for ECMAScript Modules (ESM) and the Micro-Frontend architecture on Vue.js; update the React JHipster library to Bootstrap 5.0; and handle Auth0 claims when acting as an OAuth 2.0 resource server.
TornadoVM
TornadoVM, an open-source software technology company, has released TornadoVM version 0.12 featuring: a new backend, Level-Zero dispatcher for SPIR-V integrated; an improved benchmarking framework; new metrics, kernel time
and data transfers
, added to the benchmarking framework; and an improved profiler that introduces new command line options --enableProfiler <silent|console>
and --dumpProfiler <jsonFile>
.
Juan Fumero, research associate, Advanced Processor Technologies Research Group at The University of Manchester, introduced TornadoVM at QCon London in March 2020 and has since contributed this InfoQ technical article.
An example application using Docker may be found on this GitHub repository.
Apache Camel K
Version 1.7 of Apache Camel K was released featuring: support for Quarkus Native Build and Kustomize; a secondary integration platform; and new Kamelets in the Apache Camel Kamelet Catalog.
Camel K, a lightweight integration framework, is built with Apache Camel K Runtime 1.10.0, Apache Camel Quarkus 2.4.0 Apache Camel 3.12.0 and Apache Camel Kamelets 0.5.0.
Kotlin
JetBrains has released Kotlin 1.6.0 with many new features such as sealed when
statements; improved suspend
functional types and conversions; instantiation of annotation classes; and improved type inference for recursive generic types. There are also enhancements in Kotlin/JVM, KotlinJS and KotlinNative. Developers may learn more in this YouTube video hosted by Anton Arhipov, Kotlin developer advocate at JetBrains. InfoQ will follow up with a more detailed news story.