In a month where Java's flirting with AI and Google's playing corporate Jenga, our October Java digest brings you the latest developments from the world of coffee-fueled programming. From Oracle's ambitious AI plans to Microsoft's AI-powered coding companion, and Google's potential tech breakup drama, buckle up for a journey through the evolving landscape of Java technology that's becoming more interesting than your average debugging session.
Let’s talk about Java 24, baby! There are several new JEPs that have been linked with the upcoming Java version.
JEP 485: Stream GatherersNow targeted for JDK 24 after two previews (JDK 22 and 23). This update enhances the Stream API with custom intermediate operations, enabling more flexible data transformations than existing built-in operations allow.
JEP 490: ZGC - Remove Non-Generational ModeMoves forward with removing ZGC's non-generational mode. With generational mode now the default in JDK 23, this change streamlines ZGC development, focusing efforts on a single mode. Review concludes on October 29, 2024.
JEP 487: Scoped Values (Fourth Preview)Proposes a fourth preview of Scoped Values, previously Extent-Local Variables, with adjustments to improve usability in large virtual thread contexts. The callWhere() and runWhere() methods have been removed for API fluency. Review ends October 30, 2024.
JEP 478: Key Derivation Function API (Preview)Introduces a KDF API to streamline cryptographic key derivation, enhancing security provider flexibility and supporting JEP 452 (Key Encapsulation Mechanism). Review wraps up on October 31, 2024.
JEP 404: Generational Shenandoah (Experimental)Originally aimed at JDK 21, this feature focuses on enhancing Shenandoah with generational garbage collection capabilities. Review closes on October 30, 2024.
JEP 495: Simple Source Files and Instance Main Methods (Fourth Preview) Seeks to simplify Java for beginners, enabling basic program writing without requiring complex language constructs. Brian Goetz and Gavin Bierman lead this effort, now in its fourth preview.
JEP 494: Module Import Declarations (Second Preview)Allows simplified import of all packages from a module, making modular library reuse easier. Changes include removing restrictions on transitive dependencies for the java.base module and expanding on-demand imports for java.se.
JEP 493: Linking Run-Time Images without JMODsAims to reduce JDK size by 25% by allowing jlink to create custom runtime images without JMOD files. This feature supports more flexible runtime image creation.
One of the current virtual threads problems is platform threads pinning. Guess what? In JDK 24 this will be changed. JEP 491: Synchronize Virtual Threads without Pinning is set to change the JVM's implementation of the synchronized keyword so that virtual threads can acquire, hold, and release monitors, independently of their carriers. The mounting and unmounting operations will do the bookkeeping necessary to allow a virtual thread to unmount and re-mount when inside a synchronized method or statement, or when waiting on a monitor. Interested in learning more about JEP 491 - read this article.
For those eager to try JDK 24 out, Build 22 of the JDK 24 early-access builds was made available. 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.
And, of course, our selection of videos worth watching:
Spring Framework 6.2 has received its final release candidate (RC3), and the GA (General Availability) version is expected later this month. Be sure to check out all the new features.
Spring Framework 6.1.14 is now available, primarily fixing two security vulnerabilities:
CVE-2024-38819: Path traversal vulnerability in functional web frameworks (second report).
CVE-2024-38820: Case-sensitive match exception in DataBinder.
Spring Boot 3.4.0-RC1 has been released, introducing several notable features:
Enhanced Buildpacks Support: Now supports both ARM and x86 architectures.
Improved ClientHttpRequestFactory Support: Includes new builders and offers more customization options.
Better Control Over Actuator Endpoints: Provides improved support for managing access to Actuator endpoints.
Spring Boot 3.3.5 is available for use. If you're using R2DBC, we highly recommend upgrading to this version. It provides a significant performance boost with higher throughput and lower latency under high concurrency.
Spring Security 6.4.0-RC1 is now available, introducing support for passkeys, enhanced access token requests with RestClient and WebClient, improved authorization handling, and selectable security observations. Check out the "What's New" section in the 6.4 documentation for more details on each feature.
In addition, the Spring Security team has released three maintenance versions: 6.3.4, 6.2.7, and 5.8.15. These updates primarily include bug fixes, dependency upgrades, and documentation improvements. Be sure to update dependencies in your projects!
Spring Data 2024.1.0 has reached the Release Candidate 1 (RC1) stage. This release finalizes Value Expression support across all modules, allowing you to use property placeholders in @Query annotations alongside existing SpEL support. For more details, please refer to the release notes.
Spring Cloud 2024.0.0-RC1 (Moorgate) has been released with key updates:
Spring Cloud Gateway: Enhanced response modification and updated HTTP client configuration mechanism.
Spring Cloud Netflix: RestClient is now the default HTTP client for Eureka.
Spring Cloud Commons: Added support for a load-balanced RestTemplateBuilder.
Spring Cloud Config: Config Server now handles multiple labels instead of relying on the client.
Spring Cloud Bus: Introduced a shutdown event, endpoint, and listener.
Spring Cloud Data Flow 3.0 has been announced, aligning with Spring Framework 7.0 and Spring Boot 4.0. This major release updates the entire SCDF ecosystem - including core server components, task runners, deployer implementations for Cloud Foundry and Kubernetes, the UI, and workloads based on Spring Boot 4.0. The GA release is planned for November 2025, shortly after the release of Spring Boot 4.0 and Spring Cloud 2025.1.
Spring AI 1.0.0 M3 brings significant enhancements and new features across various areas:
Observability Improvements: Refinements to the observability stack, especially for streaming responses from Chat Models. Observability now covers ChatClient, ChatModel, Embedding Models, and Vector stores. Support has been expanded to include Azure OpenAI, Google Vertex AI, Transformers (ONNX), MiniMax, Moonshot, Baidu QianFan, and Zhipu AI.
Advisor API Enhancements: The Advisor API model has been redesigned for better handling of streaming requests and responses. This improves the ability to intercept and modify chat-completion requests and responses.
Function Calling Improvements: Introduced a ToolContext class to pass additional contextual information to function callbacks via key-value pairs, allowing extra data to be used within function execution.
Fact-Based Evaluation: Implemented Spring AI FactCheckingEvaluator based on Bespoke-minicheck deployed on Ollama.
Embedding Model Batch Processing: Now supports batching multiple documents together for embeddings, enhancing performance by reducing the number of individual calls to the model.
For more details on these updates, be sure to check out the article by Mark Pollack covering all the changes in this version.
Spring Integration 6.4 RC1 is now available, bringing notable improvements and new features:
Python Scripting Support Migrated to GraalVM Polyglot: You can now use Python 3 in your scripts, gaining access to third-party libraries.
Enhanced RedisLockRegistry: Configurable with a TaskScheduler for automatic lock renewal in the store.
Custom TaskScheduler in SourcePollingChannelAdapterSpec: Allows for specific TaskDecorator use-cases.
Spring Modulith has announced the availability of version 1.3 RC1, along with maintenance releases 1.2.5 and 1.1.10. The service releases include bug fixes and dependency updates, while the 1.3 release candidate introduces several new features and improvements.
Kafka 3.3.0 is scheduled for general availability this month. In the meantime, we recommend checking out the release notes for Spring for Apache Kafka 3.3.0-RC1, which includes improvements in observability for asynchronous processing and much more.
Spring AMQP has released its first release candidate, version 3.2 RC1. Notable features include improved server-side retry logic for compatibility with RabbitMQ 4.0.x and enhanced observability with additional OpenTelemetry semantic tags.
Ollama now supports Hugging Face GGUF models, providing access to over 45,000 community-created models through Spring AI's Ollama integration for local use.
Steve Riesenberg has published an excellent article on RestClient support for OAuth2 in Spring Security 6.4. It's highly recommended for those interested in the latest enhancements in Spring Security.
AWS Console-to-Code is now in GA. This service can record your manual actions in AWS console and generate corresponding CLI commands, CloudFormation templates or code for various Cloud Development Kits including Java
Azul shared it's vision on how Azul Platform Prime can enhance your experience with Java on AWS
Microsoft keeps improving the Azure tooling experience for Java developers on Intellij (highlighting Managed Identity Support for Azure Functions) and Java, Spring support on Visual Studio Code
CRaC can improve the startup time for Java and especially Spring applications by order of magnitude as well as decrease the resources that are needed for startup. For those who use Azure and are interested in CRaC - here is a new blogpost with code and video demos on how to use CRaC with azul zulu-openjdk:17, Azure Container Registry and Kubernetes Service.
Google announced GA of C4A VMs with a custom Arm-based CPU by Google. Axion CPUs are intended for data centers and there is a short java-centered tutorial available.
Hold onto your neural networks, folks - Java is getting cozy with AI! Oracle's brewing something interesting in their coding cauldron, and it's not just another garbage collector update. They're working on Project Babylon, which aims to bring AI capabilities right into the Java ecosystem. Think of it as giving Java a PhD in Machine Learning, complete with fancy new APIs for running Large Language Models and handling vectors (because apparently, regular arrays are so 2023). But wait, there's more! The Java team isn't just dipping their toes in the AI pool - they're doing a cannonball splash with plans for model training, inferencing, and even specialized hardware support. They're particularly excited about making Java play nice with AI accelerators, because apparently, CPUs need some trendy friends too. Interestingly, Oracle emphasizes that all this AI jazz will maintain Java's core principles of "Write Once, Run Anywhere" - though now it's more like "Train Once, Infer Anywhere." The best part? They're planning to make it as easy as possible for developers to jump on the AI bandwagon without needing a PhD in quantum mechanics or a secret handshake with ChatGPT. Time will tell if Java can keep its promise of making AI as simple as System.out.println("Hello, Artificial World!");
Well, well, well, looks like the Java community is getting a bit of a technological makeover, courtesy of the fine folks at Microsoft. First up, they've cooked up a little something called the "GitHub Copilot Upgrade Assistant for Java" - a mouthful, I know, but bear with me. Essentially, this nifty little tool is here to hold your hand (or rather, your code) and will analyze your project and work with you to specify things such as parameters like JDK and Maven paths, a feature branch name and more. It will further assess your project for dependencies like Spring Boot and unit test frameworks like JUnit too.. Because, you know, Java developers just can't seem to get enough of having an AI write their code for them. But hey, who are we to judge? If it means less time staring at a blank screen and more time sipping on artisanal coffee, we're all for it. And the best part? The Upgrade Assistant is currently in technical preview, so you can be one of the cool kids on the block, flaunting your AI-infused Java skills before all your friends. Just try not to let the AI take over completely, or the next thing you know, you'll be debugging lines of code that say "System.out.println('Hello, world! - Love, Skynet')."
For those of you fans of Visual Studio, you are not forgotten - the latest release of VS Code Update is just lovely!!! Why? Well, as myself you have been into a situation where you have difficulties understanding SpEL expressions, query statements? Now you have your friend helping you out there “Java on Visual Studio Code Update”. Ohhh nice, you get a clear explanation with a nice summary overview and great detailed explanation after that. Check this out right here guys!
What about IBM? Wait, what? You heard it, it looks like IBM is stepping up its game in the world of AI-driven development tools. Introducing the new "watsonx Code Assistant"—an AI helper built for developers, from Java pros to Python enthusiasts. This smart buddy doesn’t just give code suggestions; it also generates unit tests, writes documentation, and translates code across languages. Basically, it's here to take the mundane out of coding and leave you with the fun parts. Available as SaaS and on-premises from November 2024.
Scala 3.6.0 is announced as broken, users are recommended to use the stable 3.5.2 or 3.6.1 - which is in effect the RC version. More details in the public post mortem.
All Kafka clusters on the Confluent Cloud are now using KRaft which removes the need for Zookeeper. With Zookeeper removal from new Kafka versions on the horizon, it's time for Kafka users to plan a migration and this article explains how the Confluent performed the migration in a safe manner and without service interruption.
Hazelcast has recently added a new data structure for storing and searching vectorized data - VectorCollection. A new blogpost showcases VectorCollection and its java api in a demo where elements of the periodic table are vectorized, stored and searched to find the most similar elements. Additionally, the Debezium CDC connector got an update described in this blog post with a demo using java, MySQL as a CDC source, Debezium and Hazelcast's VectorCollection to inspect payment transactions and classify them as legit or fraudulent.
Debezium3.0.1.Final has been released. Additionally, a new blogpost shows how one of its new experimental metrics - NumberOfCreateEventsSeen - can be mapped to meaningful business metrics with minimal efforts by using table names and other metadata as metrics tags.
Integration between vert.x and hazelcast plays a very important role in the vert.x cluster operations and a new blogpost goes into details on this topic. It also shows a relatively less known option of using vertx-hazelcast-enterprise module instead of the default vertx-hazelcast.
A thorough explanation of Netflix's TimeSeries abstraction for temporal event data storage has been published on netflixtechblog.
Apache Pulsar 4.0.0 introduces significant updates, including the new AvgShredder load balancer algorithm, which optimizes resource usage by redistributing bundles to keep broker resources within set limits. Additionally, broker-level metrics have been enhanced to provide deeper insights into the performance and behavior of Pulsar services. For more information, see the release notes.
Apache Camel versions 4.8.1 and 4.4.4 (both LTS), comes with bug fixes, dependency updates, and new features. Highlights include a new ThreadPoolFactory interface for OpenTelemetry context propagation and a starter for easily exposing a Jolokia endpoint to monitor Camel in Spring Boot applications. For further details, see the release notes for versions 4.4.4 and 4.8.1.
The Micronaut Foundation is excited to announce the release of Micronaut framework 4.6.3! It contains patch releases of Core, Security, Test Resources, MQTT, Data, gRPC, and Oracle Cloud.
Finch, a tool for container development originally released by AWS, now supports Linux in addition to Windows and macOS
The Log4Shell incident still causes waves and prompts questions on how do we proactively identify similar issues in the future? This article on RedHat tries to answer the question.
Model-based testing a Spring Boot application with jqwik - a java engine for model testing - and JUnit 5 can speed up corner case testing in your code. An example of using testcontainers for orchestrating database integration tests is available at docker blogs.
In a plot twist that surprised absolutely no one, Google finds itself in the hot seat as the Justice Department suggests the tech giant might need to part ways with some of its favorite toys. The government's attorneys are eyeing Chrome and Android – you know, just the browser that 63% of the internet uses and the operating system running on 70% of the world's smartphones. No biggie! The DOJ's argument? Google's been playing a bit too much monopoly in real life, allegedly using these platforms to dominate the search market. Who would've thought that owning the most popular browser, mobile OS, and search engine might raise some eyebrows? This legal battle, which could potentially force Google to sell off parts of its empire, reminds us of the age-old saying: "Don't put all your eggs in one basket" – unless, of course, you own the basket, the chickens, and the entire farm. The tech world watches with bated breath as this David vs. Goliath battle unfolds, though in this case, David happens to be wearing a government suit.
However, not the first time for Google. U.S. District Judge Amit Mehta ruled in August that Google's search engine has been illegally exploiting its dominance to squash competition and stifle innovation. He's outlined a timeline for a trial on the proposed remedies next spring and plans to issue a decision by August 2025. Google has already said it plans to appeal Mehta's ruling, but the tech giant must wait until he finalizes a remedy before doing so. The appeals process could take as long as five years, predicts George Hay, a law professor at Cornell University who was the chief economist for the Justice Department's antitrust division for most of the 1970s.
Thanks for reading the digest!
Remember to like and subscribe to our monthly newsletter on LinkedIn. We also appreciate your ideas on how we can improve our future articles.