On the 16th of September 2025, Java 25 was released. Time to take a closer look at the changes since the last LTS release, which is Java 21. In this blog, some of the changes between Java 21 and Java 25 are highlighted, mainly by means of examples. Enjoy!
Introduction
What has changed between Java 21 and Java 25? A complete list of the JEPs (Java Enhancement Proposals) can be found at the OpenJDK website. Here you can read the nitty-gritty details of each JEP. For a complete list of what has changed per release since Java 21, the Oracle release notes give a good overview.
Unblocking a Failed Solr 5 to Solr 8 Migration in a Large-Scale Ads Retrieval System
Major version upgrades of search infrastructure are often treated as dependency and configuration exercises. In practice, when search sits upstream of machine-learning pipelines and directly impacts revenue, such upgrades can fail in far more subtle — and harder to diagnose — ways.
This article describes how a long-stalled migration of a production ads retrieval system from Apache Solr/Apache Lucene 5 to 8 was unblocked after multiple prior attempts had failed. The failures were not caused by missing dependencies or misconfiguration, but by cumulative semantic drift and execution-path changes that only manifested under real production conditions.
Square, SumUp, Shopify: Data Streaming for Real-Time Point-of-Sale (POS)
Point-of-Sale (POS) systems are no longer just cash registers. They are becoming real-time, connected platforms that handle payments, manage inventory, personalize customer experiences, and feed business intelligence. Small and medium-sized merchants can now access capabilities once reserved for enterprise retailers. Mobile payment platforms like Square, SumUp, and Shopify make it easy to sell anywhere and integrate sales channels seamlessly.
At the same time, data streaming technologies such as Apache Kafka and Apache Flink are transforming retail operations. They enable instant insights and automated actions across every store, website, and supply chain partner.
Building a Java 17-Compatible TLD Generator for Legacy JSP Tag Libraries
When TLD Generation Tooling Falls Behind Java 17
The vulnerabilities introduced by upgrades to the Java platform tend not to lie in the application code itself, but rather in the ecosystem of build-time tools that enterprise systems rely on. This was made clear by a migration to Java 17, in which a long-standing dependency on TldDoclet to generate Tag Library Descriptor (TLD) was compromised.
TldDoclet, a widely used tool for generating TLD metadata from Java tag handler classes, is no longer supplied or compatible with current Java versions. The effect of this gap was not so obvious. The application itself compiled and executed well with Java 17, and the underlying JSP tag handlers remained functional. But TLD generation did not come up with a congenial mechanism, consequently placing a hard blocker late in the build. What once was a constant and unseen component of the toolchain turned into a migration issue with a high risk.