<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java on JAVAPRO International</title><link>https://javapro-en.svenruppert.com/tags/java/</link><description>Recent content in Java on JAVAPRO International</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 23 Jul 2026 07:00:03 +0000</lastBuildDate><atom:link href="https://javapro-en.svenruppert.com/tags/java/index.xml" rel="self" type="application/rss+xml"/><item><title>Are Classic Design Patterns Still Valid With Modern Java?</title><link>https://javapro-en.svenruppert.com/are-classic-design-patterns-still-valid-with-modern-java/</link><pubDate>Thu, 23 Jul 2026 07:00:03 +0000</pubDate><guid>https://javapro-en.svenruppert.com/are-classic-design-patterns-still-valid-with-modern-java/</guid><description>&lt;p&gt;The classic GoF design patterns helped developers build maintainable object-oriented software for a long time. In the past years the languages, like Java, have changed a lot; they evolved! What was a design pattern back then became a language feature today. This article analyses which patterns are still needed and which became obsolete.&lt;/p&gt;
&lt;h2 id="once-upon-a-time"&gt;Once upon a time…&lt;/h2&gt;
&lt;h3 id="object-oriented-programming"&gt;Object-Oriented Programming&lt;/h3&gt;
&lt;p&gt;Object-oriented programming emerged with the invention of Simula 67. Ole-Johan Dahl and Kristen Nygaard invented Simula 67 while working at the Norwegian Computing Center in Oslo to run simulations. A few years later Alan Kay et al. invented Smalltalk as a purely object-oriented programming language. In the 80s, C++ brought the breakthrough in the mainstream for object-oriented programming. The first large-scale object-oriented systems were developed. In the 90s, object-oriented programming was the dominating programming paradigm.&lt;/p&gt;</description></item><item><title>Lazy Constants in Java 26: Deferred Immutability and JVM Trust</title><link>https://javapro-en.svenruppert.com/lazy-constants-in-java-26-deferred-immutability-and-jvm-trust/</link><pubDate>Wed, 22 Jul 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/lazy-constants-in-java-26-deferred-immutability-and-jvm-trust/</guid><description>&lt;p&gt;Java developers have long lived with an awkward trade-off. If you want the clarity and optimization benefits of &lt;code&gt;final&lt;/code&gt;, you must initialize eagerly, in a constructor or static initializer. If you want to defer expensive setup until first use, you usually fall back to mutable lazy-initialization patterns, nullable fields, or double-checked locking. Those techniques work, but they also make code harder to reason about and harder for the JVM to optimize.&lt;/p&gt;</description></item><item><title>UNDERSTANDING AOT</title><link>https://javapro-en.svenruppert.com/understanding-aot/</link><pubDate>Tue, 21 Jul 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/understanding-aot/</guid><description>&lt;h2 id="what-is-aot"&gt;What is AOT?&lt;/h2&gt;
&lt;p&gt;Ahead-of-Time (AOT) compilation in Java is a crucial technique that translates Java bytecode into native machine code before the application is executed. In traditional Java execution, source code is compiled into bytecode that the Java Virtual Machine (JVM) loads and runs. By performing the translation to native code beforehand, AOT allows direct execution by the operating system, which eliminates the initial need for the JVM to interpret bytecode or wait for standard compilation paths during runtime. This proactive process significantly optimizes resource utilization right from the start.&lt;/p&gt;</description></item><item><title>Solving Spring AI's UI Challenge with AG-UI's Java SDK</title><link>https://javapro-en.svenruppert.com/solving-spring-ais-ui-challenge-with-ag-uis-java-sdk/</link><pubDate>Thu, 16 Jul 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/solving-spring-ais-ui-challenge-with-ag-uis-java-sdk/</guid><description>&lt;h2 id="introduction-the-missing-link-in-java-ai-development"&gt;Introduction: The Missing Link in Java AI Development&lt;/h2&gt;
&lt;p&gt;Ask any Java developer who has tried to build an AI feature in a production application and they&amp;rsquo;ll tell you the same thing: the backend isn&amp;rsquo;t the hard part anymore. Spring AI makes it easy to invoke an LLM, define prompts, and create tools. But turning these interactions into a smooth, interactive user experience? That&amp;rsquo;s where the struggle begins.&lt;/p&gt;
&lt;p&gt;Most developers solve this by inventing custom message formats, WebSocket events, and ad-hoc rules for how the UI should render tool calls. Each application reinvents the bridge between frontend interactions and agent intelligence. The result? A fragile, inconsistent layer that must be rebuilt for every project.&lt;/p&gt;</description></item><item><title>Serverless Functions Reimagined with Java 25</title><link>https://javapro-en.svenruppert.com/serverless-functions-reimagined-with-java-25/</link><pubDate>Wed, 15 Jul 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/serverless-functions-reimagined-with-java-25/</guid><description>&lt;p&gt;Serverless computing whether on AWS Lambda, Azure Functions, or Google Cloud Functions plays a vital role in modern distributed systems. By abstracting infrastructure away from application code, serverless platforms allow developers to focus on business logic. These functions scale automatically and can be highly cost-efficient when applied to the right use cases.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
In serverless platforms, applications may be started many times a day and often run only for a few seconds. They are scaled up and down automatically and may be paused or frozen between requests. This behavior does not only affect performance; it also directly impacts cost, since billing is often based on execution time and allocated memory.&lt;/p&gt;</description></item><item><title>LangChain4j Agentic Workflows: From AI Calls to Multi-Agent Systems in Java</title><link>https://javapro-en.svenruppert.com/langchain4j-agentic-workflows-from-ai-calls-to-multi-agent-systems-in-java/</link><pubDate>Wed, 08 Jul 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/langchain4j-agentic-workflows-from-ai-calls-to-multi-agent-systems-in-java/</guid><description>&lt;p&gt;You have built AI features into your Java application. Your model is wrapped in a service, RAG is feeding it context, tools are wired, and calls are flowing. It works. Then requirements evolve. A single prompt-and-response is no longer enough. You need steps that follow each other, branches based on decisions, retries when things fail, and multiple actions running concurrently. The question shifts from &amp;ldquo;how do I call an LLM?&amp;rdquo; to &amp;ldquo;how do I orchestrate multiple LLM-driven tasks into a coherent system?&amp;rdquo;&lt;/p&gt;</description></item><item><title>From ‘Class Not Found’ to Calm: Practical Shading and Shadowing for Java Apps</title><link>https://javapro-en.svenruppert.com/from-class-not-found-to-calm-practical-shading-and-shadowing-for-java-apps/</link><pubDate>Tue, 07 Jul 2026 07:07:12 +0000</pubDate><guid>https://javapro-en.svenruppert.com/from-class-not-found-to-calm-practical-shading-and-shadowing-for-java-apps/</guid><description>&lt;p&gt;Your pipeline is green, the app is deployed, and everything looks fine… until production says &amp;ldquo;nope&amp;rdquo;. A request fails and the logs show &lt;code&gt;ClassNotFoundException&lt;/code&gt;, or worse, &lt;code&gt;NoSuchMethodError&lt;/code&gt;. These are among the most confusing runtime errors because the code compiled successfully, but the JVM is acting differently than you would expect.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive in and explore how the class loader works, what class shadowing is (when one class silently wins over another on the classpath) and what class shading is (when you deliberately relocate packages so multiple versions can coexist). We&amp;rsquo;ll also see how these two concepts can help solve mysterious production issues and make your app more stable and secure.&lt;/p&gt;</description></item><item><title>Paketo Buildpacks: ready for Java 26 &amp; more!</title><link>https://javapro-en.svenruppert.com/paketo-buildpacks-ready-for-java-26-more/</link><pubDate>Thu, 02 Jul 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/paketo-buildpacks-ready-for-java-26-more/</guid><description>&lt;p&gt;Paketo Buildpacks, the default way to create container images with Spring Boot, will include support for Java 26 the same week it will be released in major OpenJDK distributions (Oracle, BellSoft Liberica, Azul Zulu, etc.)&lt;br&gt;
Let&amp;rsquo;s take this as an opportunity to (re)discover what Paketo Buildpacks are and what they allow you to do!&lt;/p&gt;
&lt;h2 id="paketo-buildpacks-not-the-only-buildpacks-around"&gt;Paketo Buildpacks: Not the Only Buildpacks Around!&lt;/h2&gt;
&lt;h3 id="a-world-of-buildpacks"&gt;A World of Buildpacks&lt;/h3&gt;
&lt;p&gt;My first memory of using buildpacks dates back to when I worked for a bank around 2020 (yes, that year!) and my team created and maintained a bunch of shell scripts that would copy a templated Dockerfile, add the public certificates from the corporate Certification Authority (CA), and then build the Dockerfile into an image (and even create a Helm chart!); but we soon learned that there were open-source buildpacks that supported most of our use cases!&lt;/p&gt;</description></item><item><title>The 5 Knights of the MCP Apocalypse</title><link>https://javapro-en.svenruppert.com/the-5-knights-of-the-mcp-apocalypse/</link><pubDate>Wed, 01 Jul 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/the-5-knights-of-the-mcp-apocalypse/</guid><description>&lt;p&gt;Let&amp;rsquo;s talk about that new &lt;strong&gt;MCP (Model Context Protocol) Server&lt;/strong&gt; your team is using to connect to your real data services. It&amp;rsquo;s awesome, right? It&amp;rsquo;s the &amp;ldquo;magic box&amp;rdquo; that gives your AI Agent access to the &lt;strong&gt;real world&lt;/strong&gt;—live databases, internal APIs, and all your tools.&lt;/p&gt;
&lt;p&gt;But here&amp;rsquo;s the catch: &lt;strong&gt;you don&amp;rsquo;t own the code.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s a vendor product, an open-source project, or another team&amp;rsquo;s platform. You can&amp;rsquo;t just change its code when you find a security hole, unless you have the code and recompile it and deploy it.&lt;/p&gt;</description></item><item><title>Stay Updated with Every New Free PDF Edition!</title><link>https://javapro-en.svenruppert.com/stay-updated-with-every-new-free-pdf-edition-26-6/</link><pubDate>Tue, 30 Jun 2026 08:50:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/stay-updated-with-every-new-free-pdf-edition-26-6/</guid><description>&lt;p&gt;&lt;strong&gt;Want to make sure you always receive the latest JAVAPRO magazine?&lt;/strong&gt;&lt;br&gt;
By &lt;a href="https://javapro.io/#pdf-newsletter"&gt;subscribing to our news&lt;/a&gt;, you’ll automatically get notified and receive every new PDF — free and direct to your inbox, no extra steps required.&lt;/p&gt;
&lt;p&gt;Enjoy exclusive content, special editions, and stay connected to everything new.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://javapro.io/#pdf-newsletter"&gt;Subscribe now to all future PDF editions&lt;/a&gt; and be the first to know!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://javapro-en.svenruppert.com/uploads/2026/06/JAVAPRO_06-2026.pdf"&gt;Download free PDF here&lt;/a&gt;: Edition 06/2026 | Autonomous Java&lt;/p&gt;
&lt;p&gt;&lt;a href="https://javapro.io/#pdf-newsletter"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/06/Subscribe-Newsletter-JAVAPRO-Magazine-PDF-26-6-1024x576.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>06-2026 | Autonomous Java</title><link>https://javapro-en.svenruppert.com/06-2026-autonomous-java/</link><pubDate>Tue, 30 Jun 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/06-2026-autonomous-java/</guid><description>&lt;p&gt;&lt;a href="https://javapro-en.svenruppert.com/uploads/2026/06/JAVAPRO_06-2026.pdf"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/06/Cover-1.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://javapro-en.svenruppert.com/uploads/2026/06/JAVAPRO_06-2026.pdf"&gt;DOWNLOAD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;CORE JAVA&lt;br&gt;
▪️Learning Java Automation the SOLID Way: A Beginner’s Guide to Learn Page Object Model with Java SOLID Principles&lt;br&gt;
▪️OpenJ9 GC Policies: How to Choose the Right Collector&lt;/p&gt;
&lt;p&gt;API &amp;amp; FRAMEWORKS&lt;br&gt;
▪️Elasticsearch Java SDK: No Magic, Just Solid Design Choices&lt;br&gt;
▪️Java Developers, You’re Already Ready for Blockchain — You Just Don’t Know It Yet&lt;br&gt;
▪️Connecting Java Reinforcement Learning to Python Gymnasium&lt;br&gt;
▪️Beyond Text Search: A Smarter Way to Understand Your Code&lt;br&gt;
▪️The 3 A.M. Deadlock&lt;/p&gt;</description></item><item><title>The Foundations of Data-Oriented Programming in Java</title><link>https://javapro-en.svenruppert.com/the-foundations-of-data-oriented-programming-in-java/</link><pubDate>Wed, 24 Jun 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/the-foundations-of-data-oriented-programming-in-java/</guid><description>&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Java has traditionally been an object-oriented language, urging developers to structure code around &lt;strong&gt;objects&lt;/strong&gt;, encapsulate state and behavior, hide implementation details, and extend functionality through inheritance. This method has advanced modularity and reusability. However, with recent enhancements, Java has evolved, revolutionizing how systems are developed and offering powerful tools for developers.&lt;/p&gt;
&lt;p&gt;Have you ever been in the midst of debugging a complex Java application, only to find that the mutable state across various objects left you tangled in a web of unexpected behaviors and racing conditions? These frustrations are common among Java developers accustomed to Object-Oriented Programming (OOP), where mutable objects often lead to more complex, less predictable systems. Fortunately, with recent language enhancements, Java developers now have capable tools to treat &lt;strong&gt;data&lt;/strong&gt; as a first-class citizen.&lt;/p&gt;</description></item><item><title>1BRC - The First 80% of the Journey</title><link>https://javapro-en.svenruppert.com/1brc-the-first-80-of-the-journey/</link><pubDate>Tue, 23 Jun 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/1brc-the-first-80-of-the-journey/</guid><description>&lt;p&gt;The &lt;a href="https://www.morling.dev/blog/one-billion-row-challenge/"&gt;One Billion Row Challenge (1BRC)&lt;/a&gt; started as a way to kill time during the 2023/2024 holidays, asking a simple question: How fast can Java crunch temperature values from a text file and calculate the min, mean, and max per weather station? The catch is that the file contains one billion rows, totaling approximately 13.8 GB.&lt;/p&gt;
&lt;p&gt;Thomas Wuerthinger, Quan Anh Mai, and Alfonso Peterssen achieved the best result of 1.5 seconds on 8 cores. That was insanely and unexpectedly fast. But when you take a closer look at the code, you will see that it is beyond your daily dose of Java. It is a complex, single-use-case-oriented implementation, skipping safety features, and most of the tunings applied cannot be easily reused.&lt;/p&gt;</description></item><item><title>Open J Proxy 0.5.0-beta — The Caching and Read/Write Splitting Release</title><link>https://javapro-en.svenruppert.com/open-j-proxy-0-5-0-beta-the-caching-and-read-write-splitting-release/</link><pubDate>Mon, 22 Jun 2026 12:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/open-j-proxy-0-5-0-beta-the-caching-and-read-write-splitting-release/</guid><description>&lt;p&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/06/ChatGPT-Image-Jun-11-2026-07_54_46-AM-1024x576.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;When we shipped 0.4.0-beta, the core value of Open J Proxy was already clear: a database control plane for Java applications that lets you scale dozens of application instances without overwhelming your database, because the server — not the application — owns and controls the real connection pools. What 0.5.0-beta adds on top of that foundation is two features that take the pressure off the database even further. The first is query result caching: the ability to answer repeated SELECT queries directly from memory without touching the database at all. The second is read/write splitting: the ability to automatically route reads to replica databases and leave the primary free for writes. Together, they advance OJP&amp;rsquo;s role as a full database control plane — governing not just connections but query results, routing decisions, and admission under load.&lt;/p&gt;</description></item><item><title>2: The Jakarta Cliff: Why Modern Java Leaves Struts 1 Behind</title><link>https://javapro-en.svenruppert.com/2-the-jakarta-cliff-why-modern-java-leaves-struts-1-behind/</link><pubDate>Thu, 18 Jun 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/2-the-jakarta-cliff-why-modern-java-leaves-struts-1-behind/</guid><description>&lt;p&gt;This is the second in a series of articles exploring the realities of modernisation. In this article, you&amp;rsquo;ll learn about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Modern Java Breakpoint:&lt;/strong&gt; Why the shift from &lt;code&gt;javax&lt;/code&gt; to &lt;code&gt;jakarta&lt;/code&gt; creates an unfixable compatibility break for Struts 1 on modern containers like Tomcat 10 and Jetty 11.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The External Pressure Cooker:&lt;/strong&gt; How platform baselines, security policies, and cloud migrations force the issue, even if the application code itself hasn&amp;rsquo;t changed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Why &amp;ldquo;Shims&amp;rdquo; Fail:&lt;/strong&gt; A look at why attempting to patch compatibility with shims is not a viable long-term solution for production environments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Safe Operation Strategies:&lt;/strong&gt; What it practically means to run Struts securely on older containers without exposing the rest of your infrastructure to risk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Path to Modernisation:&lt;/strong&gt; How to use incremental migration patterns and extended support to modernise on your own terms, avoiding risky &amp;ldquo;big-bang&amp;rdquo; rewrites.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2025/12/struts1-banner-1024x358.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Enterprise-grade AI for Java Developers: Behind the Bar of the AI Revolution</title><link>https://javapro-en.svenruppert.com/enterprise-grade-ai-for-java-developers-behind-the-bar-of-the-ai-revolution/</link><pubDate>Wed, 17 Jun 2026 16:45:24 +0000</pubDate><guid>https://javapro-en.svenruppert.com/enterprise-grade-ai-for-java-developers-behind-the-bar-of-the-ai-revolution/</guid><description>&lt;p&gt;There is a moment many Java developers experience today. After years spent building reliable systems, modernizing monoliths, shaping APIs, orchestrating containers, and keeping distributed applications alive, someone suddenly asks whether you can “add a bit of AI.” At first it sounds innocent. You try a model endpoint, run a quick experiment in Quarkus, watch a few responses appear in your terminal, and feel the spark of possibility. It looks easy. Almost too easy.&lt;/p&gt;</description></item><item><title>1: Why Struts 1.3 Still Matters in 2026</title><link>https://javapro-en.svenruppert.com/1-why-struts-1-3-still-matters-in-2026/</link><pubDate>Tue, 16 Jun 2026 16:41:08 +0000</pubDate><guid>https://javapro-en.svenruppert.com/1-why-struts-1-3-still-matters-in-2026/</guid><description>&lt;p&gt;What You’ll Learn&lt;/p&gt;
&lt;p&gt;&lt;br&gt;
This article is the first in a series that explores why Struts 1 still shows up (quietly but persistently) in enterprise systems in 2026, and what that means for teams trying to keep the lights on.&lt;/p&gt;
&lt;p&gt;We look at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The Discovery Effect&lt;/strong&gt;: How stable, forgotten Struts apps resurface during audits, migrations, and security scans.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Where the Friction Really Is&lt;/strong&gt;: The talent shortage, the tooling disconnect, and the Jakarta EE shift: all colliding to make legacy upkeep harder than it should be.&lt;/li&gt;
&lt;li&gt;Modernisation Without the Fantasy: Why the rewrite-or-risk framing misleads teams, and how approaches like embedding Struts in Spring Boot create workable transition paths.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Buying Breathing Room&lt;/strong&gt;: How extended support gives organisations time to avoid crisis-driven decision-making.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2025/12/struts1-banner-1024x358.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/p&gt;</description></item><item><title>Automating JVM Thread Dump Analysis with AI: Practical Observability for Java on Amazon ECS and EKS</title><link>https://javapro-en.svenruppert.com/automating-jvm-thread-dump-analysis-with-ai-practical-observability-for-java-on-amazon-ecs-and-eks/</link><pubDate>Thu, 11 Jun 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/automating-jvm-thread-dump-analysis-with-ai-practical-observability-for-java-on-amazon-ecs-and-eks/</guid><description>&lt;p&gt;Imagine the following scenario: a Java service that ran flawlessly yesterday suddenly starts consuming 90% CPU, barely responding to user requests. Users encounter timeouts, and the operations team is under immediate pressure to triage the incident. In these situations — whether the application appears stuck or CPU saturation has occurred — one of the most powerful diagnostic assets available is the thread dump. A thread dump captures the state of all JVM threads at a specific point in time, showing execution states, stack traces, and lock contention — the raw material needed to understand what the runtime is &lt;em&gt;actually doing&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Structured Concurrency in Java 26 (JEP 525 Deep Dive)</title><link>https://javapro-en.svenruppert.com/structured-concurrency-in-java-26-jep-525-deep-dive/</link><pubDate>Tue, 09 Jun 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/structured-concurrency-in-java-26-jep-525-deep-dive/</guid><description>&lt;h2 id="the-java-26-evolution-of-safer-predictable-multi-threading"&gt;&lt;strong&gt;The Java 26 Evolution of Safer, Predictable Multi-threading&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Java has long provided powerful concurrency primitives. Threads, executors, futures, and more recently virtual threads allow applications to scale across cores and I/O boundaries. Yet many production failures are not caused by insufficient parallelism, but by insufficient structure.&lt;/p&gt;
&lt;p&gt;Tasks outlive the operations that spawned them. Failures are detected but not propagated consistently. Interrupts are delivered but not observed in time. Thread dumps reveal activity, but not ownership or intent.&lt;/p&gt;</description></item><item><title>Comparing transitive dependency version resolution in Rust and Java</title><link>https://javapro-en.svenruppert.com/comparing-transitive-dependency-version-resolution-in-rust-and-java/</link><pubDate>Thu, 04 Jun 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/comparing-transitive-dependency-version-resolution-in-rust-and-java/</guid><description>&lt;p&gt;You learn by comparing to what you already know. I was recently bitten by assuming Rust worked as Java regarding transitive dependency version resolution. In this post, I want to compare the two.&lt;/p&gt;
&lt;h2 id="dependencies-transitivity-and-version-resolution"&gt;Dependencies, transitivity, and version resolution&lt;/h2&gt;
&lt;p&gt;Before diving into the specifics of each stack, let&amp;rsquo;s describe the domain and the problems that come with it.&lt;/p&gt;
&lt;p&gt;When developing any project above Hello World level, chances are you&amp;rsquo;ll face problems that others have faced before. If the problem is widespread, the probability is high that somebody was kind and civic-minded enough to have packaged the code that solves it, for others to re-use. Now you can use the package and focus on solving your core problem. It&amp;rsquo;s how industry builds most projects today, even if it brings &lt;a href="https://en.wikipedia.org/wiki/Supply_chain_attack"&gt;other problems&lt;/a&gt;: you sit on the shoulders of giants.&lt;/p&gt;</description></item><item><title>Virtual Threads Meet AI: Java Concurrency in the Age of Intelligent Systems</title><link>https://javapro-en.svenruppert.com/virtual-threads-meet-ai-java-concurrency-in-the-age-of-intelligent-systems/</link><pubDate>Tue, 02 Jun 2026 07:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/virtual-threads-meet-ai-java-concurrency-in-the-age-of-intelligent-systems/</guid><description>&lt;p&gt;AI workloads change how Java applications scale and behave. This article explains how Java 26 and virtual threads simplify concurrency in AI-heavy systems, replacing complex reactive setups with clearer and more efficient designs. It shows when virtual threads outperform traditional async models and how concurrency choices impact system architecture.&lt;/p&gt;
&lt;h2 id="introduction-java-ai-and-the-new-concurrency"&gt;Introduction: Java, AI, and the New Concurrency&lt;/h2&gt;
&lt;p&gt;The rapid growth of AI-driven systems is reshaping how we design and scale Java APIs. RAG systems, LLM inference, and recommendation pipelines bring thousands of simultaneous requests with heavy network I/O, vector databases, and external services.&lt;/p&gt;</description></item><item><title>Always Up to Date - with Every New Free PDF Edition!</title><link>https://javapro-en.svenruppert.com/always-up-to-date-with-every-new-free-pdf-edition-5/</link><pubDate>Thu, 28 May 2026 12:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/always-up-to-date-with-every-new-free-pdf-edition-5/</guid><description>&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t Want to Miss a Thing?&lt;/strong&gt;&lt;br&gt;
By &lt;a href="https://javapro.io/#pdf-newsletter"&gt;subscribing to our news&lt;/a&gt;, you’ll get each new PDF edition automatically — no extra steps, just delivered straight to your inbox. Enjoy exclusive JAVAPRO content, special editions, and stay connected to everything new.&lt;/p&gt;
&lt;p&gt;✔️ 100% free&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://javapro.io/#pdf-newsletter"&gt;Subscribe now&lt;/a&gt;&lt;/strong&gt; &lt;strong&gt;and be the first to receive every future issue &amp;amp; updates.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lsquo;From AI as a Feature to AI as Infrastructure&amp;rsquo; – &lt;a href="https://javapro-en.svenruppert.com/uploads/2026/05/JAVAPRO_05-2026.pdf"&gt;download free PDF here&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://javapro.io/#pdf-newsletter"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/05/Subscribe-Newsletter-JAVAPRO-Magazine-PDF-26-5-1024x576.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>From Spaghetti to Hexagons: A Practical Guide to Clean Java Architecture</title><link>https://javapro-en.svenruppert.com/from-spaghetti-to-hexagons-a-practical-guide-to-clean-java-architecture/</link><pubDate>Wed, 27 May 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/from-spaghetti-to-hexagons-a-practical-guide-to-clean-java-architecture/</guid><description>&lt;h2 id="a-culinary-warning-and-the-dark-side-of-code"&gt;A Culinary Warning and the Dark Side of Code&lt;/h2&gt;
&lt;p&gt;Welcome, fellow architect and beloved developer, to our hexagonal city-state—a realm where pragmatism reigns supreme and flexibility is our greatest strength. This guide is not an ivory tower doctrine filled with theoretical perfection, but rather a versatile toolbox tempered in the forge of real-world challenges and countless production battlefields.&lt;/p&gt;
&lt;p&gt;Before we can erect the citadel of clean architecture, we must first acknowledge the reality of our industry. We must navigate the &amp;ldquo;Dark Side of Code&amp;rdquo;. The software world is rife with culinary disasters that would make a chef weep. We are all too familiar with &lt;strong&gt;Spaghetti Code&lt;/strong&gt;^(&lt;a href="#c3600f8a-312d-40da-8d49-7a198c390a5d"&gt;1&lt;/a&gt;), a tangled mess where program flow twists and turns like pasta, making maintenance a nightmare where references and dependencies jump all over the place. But the menu of disaster is extensive.&lt;/p&gt;</description></item><item><title>Destructoring is the future of Javas Encapsulation</title><link>https://javapro-en.svenruppert.com/destructoring-is-the-future-of-javas-encapsulation/</link><pubDate>Tue, 26 May 2026 07:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/destructoring-is-the-future-of-javas-encapsulation/</guid><description>&lt;p&gt;Encapsulation in Java has been broken &lt;a href="https://openjdk.org/jeps/500#Serialization-libraries-should-use-sun-reflect-ReflectionFactory"&gt;since the Java Development Kit (JDK) 5&lt;/a&gt;. Objects &lt;em&gt;should&lt;/em&gt; guarantee that their inner state matches what we cast into code, but at runtime any &lt;code&gt;private&lt;/code&gt; and &lt;code&gt;final&lt;/code&gt; state can be set from the outside to any value — bypassing any checks and asserts. This is possible through the Reflection Api, which allows to &lt;code&gt;setAccessible&lt;/code&gt; any &lt;code&gt;private&lt;/code&gt; field and then &lt;code&gt;set&lt;/code&gt; the value of any &lt;code&gt;final&lt;/code&gt; field. This specific use of the Reflection Api to mutate an immutable &lt;code&gt;final&lt;/code&gt; field is called &lt;em&gt;deep reflection&lt;/em&gt;.&lt;/p&gt;</description></item><item><title>Open-Core with Core Java and Vaadin — Part 2</title><link>https://javapro-en.svenruppert.com/open-core-with-core-java-and-vaadin-part-2/</link><pubDate>Sat, 23 May 2026 11:33:42 +0000</pubDate><guid>https://javapro-en.svenruppert.com/open-core-with-core-java-and-vaadin-part-2/</guid><description>&lt;p&gt;&lt;em&gt;Editions, runtime, and quality assurance.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;All source code presented here is published on GitHub and available at &lt;strong&gt;&lt;a href="https://3g3.eu/naityh"&gt;https://3g3.eu/naityh&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="recap-of-part-one"&gt;Recap of part one&lt;/h2&gt;
&lt;p&gt;The first part of this article developed the abstract mechanics of the open-core application. From two independent Maven projects with strictly asymmetric dependency direction, a deliberately slim extension API with the contribution types &lt;code&gt;RouteContribution&lt;/code&gt;, &lt;code&gt;MenuContribution&lt;/code&gt;, &lt;code&gt;NavbarContribution&lt;/code&gt;, and &lt;code&gt;CounterEventListener&lt;/code&gt;, a &lt;code&gt;FeatureRegistry&lt;/code&gt; that discovers its contributions via the Java standard library&amp;rsquo;s &lt;code&gt;ServiceLoader&lt;/code&gt;, and a Vaadin integration consisting of &lt;code&gt;MainLayout&lt;/code&gt; and &lt;code&gt;OpenCoreRouteInitializer&lt;/code&gt;, an apparatus is now in place that can accept arbitrary contributions in ordered form, without the core needing to know their identity.&lt;/p&gt;</description></item><item><title>Open-Core with Core Java and Vaadin — Part 1</title><link>https://javapro-en.svenruppert.com/open-core-with-core-java-and-vaadin-part-1/</link><pubDate>Fri, 22 May 2026 11:33:04 +0000</pubDate><guid>https://javapro-en.svenruppert.com/open-core-with-core-java-and-vaadin-part-1/</guid><description>&lt;p&gt;&lt;em&gt;Architecture, extension API, and Vaadin integration.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-introduction-and-motivation"&gt;1. Introduction and motivation&lt;/h2&gt;
&lt;p&gt;The open-core model is often reduced in discussion to questions of licensing or commercial positioning. An open-source variant of a piece of software is complemented by a commercially distributed variant that brings additional features. Anyone who actually wants to implement such a separation in an existing codebase quickly discovers that the real difficulty lies neither in the licence text nor in the choice of repository, but in the code&amp;rsquo;s architecture.&lt;/p&gt;</description></item><item><title>Vaadin + Quarkus: The New Approach for Enterprise Apps</title><link>https://javapro-en.svenruppert.com/vaadin-quarkus-the-new-approach-for-enterprise-apps/</link><pubDate>Tue, 19 May 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/vaadin-quarkus-the-new-approach-for-enterprise-apps/</guid><description>&lt;p&gt;While Vaadin is commonly integrated with Spring, this article explores a powerful new full-stack solution: Vaadin with Quarkus. Quarkus provides a lightning-fast runtime and native images, complementing Vaadin’s Java-first UI, which eliminates JavaScript complexity. Readers will learn how to build scalable, reactive Vaadin Flow apps on Quarkus, covering simplified backend development, enhanced productivity with a unified Java stack, and superior deployment optimization compared to traditional approaches.&lt;/p&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Vaadin and Quarkus are both modern Java frameworks, each excelling in its domain: Vaadin for building rich web UIs in pure Java, and Quarkus for creating cloud-native, container-first Java applications. Together, they offer a compelling alternative to traditional full-stack Java development, especially for enterprise applications.&lt;/p&gt;</description></item><item><title>OpenFeature - one flag to rule them all!</title><link>https://javapro-en.svenruppert.com/openfeature-one-flag-to-rule-them-all/</link><pubDate>Thu, 14 May 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/openfeature-one-flag-to-rule-them-all/</guid><description>&lt;h2 id="feature-flags-and-where-to-find-them"&gt;Feature flags and where to find them&lt;/h2&gt;
&lt;p&gt;What are feature flags?&lt;/p&gt;
&lt;p&gt;To keep it simple it&amp;rsquo;s a way to change the system behaviour at runtime without hassle.&lt;/p&gt;
&lt;p&gt;Note: And if this &amp;ldquo;refresher&amp;rdquo; was the only theoretical thing you wanted to know or if you already use feature flags and want to jump straight to code/ OpenFeature demo, feel free to do so; otherwise, please bear with me for another couple of text pages.&lt;/p&gt;</description></item><item><title>Java Developers, You're Already Ready for Blockchain — You Just Don't Know It Yet</title><link>https://javapro-en.svenruppert.com/java-developers-youre-already-ready-for-blockchain-you-just-dont-know-it-yet/</link><pubDate>Fri, 08 May 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/java-developers-youre-already-ready-for-blockchain-you-just-dont-know-it-yet/</guid><description>&lt;p&gt;The Java ecosystem has a mature way of doing things. Pick your framework. Use Maven or Gradle. Write tests with JUnit. Run everything locally with Docker. These patterns have been stable for years exactly because they work.&lt;/p&gt;
&lt;p&gt;But most blockchain ecosystems were not built with Java developers in mind. Instead, Rust, JavaScript, and Go dominate. Cardano – my blockchain of choice – historically leaned on Haskell.&lt;/p&gt;
&lt;p&gt;At the end of the day, if you wanted to build on blockchain as a Java developer, you were largely on your own.&lt;br&gt;
&lt;br&gt;
&lt;a href="https://www.bloxbean.com/"&gt;BloxBean&lt;/a&gt; was built to fix this.&lt;br&gt;
&lt;br&gt;
No matter if you prefer Spring Boot, any other Java framework, or actually default to Maven,  Gradle, and writing clean Java services, you already have everything you need to start building on Cardano.&lt;/p&gt;</description></item><item><title>Kotlin kontra Java - Part 3 - Language for Interop</title><link>https://javapro-en.svenruppert.com/kotlin-kontra-java-part-3-language-for-interop/</link><pubDate>Thu, 07 May 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/kotlin-kontra-java-part-3-language-for-interop/</guid><description>&lt;p&gt;When you start a new project on the JVM, should you pick Java or Kotlin? Why not both?&lt;/p&gt;
&lt;p&gt;You can use any Java library you want in Kotlin, you can even co-write your software in both languages (e.g. one team I work with writes their JUnit tests in Kotlin, their main code in Java) and migrate to Kotlin or back to Java over time. &lt;a href="https://kotlinlang.org/docs/java-interop.html"&gt;Kotlin is designed with Java interoperability in mind&lt;/a&gt;, because JetBrains wanted to migrate their IDEs (IntelliJ IDEA, WebStorm, etc.) incrementally to the language. But how does that work? What does Kotlin do, so that interop to this degree becomes possible?&lt;/p&gt;</description></item><item><title>Java 26 in Practice: How the JVM Is Changing the Way We Write Code</title><link>https://javapro-en.svenruppert.com/java-26-in-practice-how-the-jvm-is-changing-the-way-we-write-code/</link><pubDate>Wed, 06 May 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/java-26-in-practice-how-the-jvm-is-changing-the-way-we-write-code/</guid><description>&lt;p&gt;Java 26 in practice shows a fundamental shift in how modern Java systems are built. Virtual threads, modern GC, AOT caching, and the Vector API are shifting long-standing responsibilities from the application into the JVM — forcing developers to rethink everyday design decisions.&lt;/p&gt;
&lt;h2 id="introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Java 26 in practice&lt;/strong&gt; changes how we think about new Java features. When we think about new Java, we usually look first at syntax. Pattern matching, records, new JDK APIs grab attention. With Java 26 in practice, however, the most profound impact is different. It is not in language constructs.&lt;/p&gt;</description></item><item><title>Final Is No Longer a Hint in Java 26</title><link>https://javapro-en.svenruppert.com/final-is-no-longer-a-hint-in-java-26/</link><pubDate>Wed, 29 Apr 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/final-is-no-longer-a-hint-in-java-26/</guid><description>&lt;p&gt;Java 26 (JEP 500) warns when code mutates final fields via deep reflection and introduces explicit controls to scope or deny that behavior. This article breaks down what changes, why it matters for JIT optimizations, and a migration loop you can put into CI.&lt;/p&gt;
&lt;h2 id="jep-500-and-the-performance-runway-behind-final-means-final"&gt;JEP 500 and the Performance Runway Behind &lt;em&gt;Final Means Final&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;For years, Java has carried a quiet contradiction: the language treats final fields as immutable after initialization, but deep reflection could still mutate them. That single escape hatch forces the JVM to be conservative about both correctness and optimization, because a final value might not actually be final.&lt;/p&gt;</description></item><item><title>Stay Updated with Every New Free PDF Edition!</title><link>https://javapro-en.svenruppert.com/stay-updated-with-every-new-free-pdf-edition-4/</link><pubDate>Tue, 28 Apr 2026 12:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/stay-updated-with-every-new-free-pdf-edition-4/</guid><description>&lt;p&gt;&lt;strong&gt;Want to make sure you always receive the latest JAVAPRO magazine?&lt;/strong&gt;&lt;br&gt;
By &lt;a href="https://javapro.io/#pdf-newsletter"&gt;subscribing to our news&lt;/a&gt;, you’ll automatically get notified and receive every new PDF — free and direct to your inbox, no extra steps required.&lt;/p&gt;
&lt;p&gt;Enjoy exclusive content, special editions, and stay connected to everything new.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://javapro.io/#pdf-newsletter"&gt;Subscribe now to all future PDF editions&lt;/a&gt; and be the first to know!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://javapro-en.svenruppert.com/uploads/2026/04/JAVAPRO_04-2026.pdf"&gt;Download free PDF here&lt;/a&gt;: Edition 04/2026 | Java in the Age of AI&lt;/p&gt;</description></item><item><title>Kotlin kontra Java - Part 2 - MultiPlatform</title><link>https://javapro-en.svenruppert.com/kotlin-kontra-java-part-2-multiplatform/</link><pubDate>Wed, 22 Apr 2026 07:45:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/kotlin-kontra-java-part-2-multiplatform/</guid><description>&lt;p&gt;When you start a new project on the JVM, should you pick Java or Kotlin?&lt;/p&gt;
&lt;p&gt;You might have a preference based on the ecosystem — the tooling around it, who we can ask for help, and the libraries we can use — which we discussed in &lt;a href="https://javapro.io/2026/04/16/kotlin-kontra-java-part-1-ecosystem/"&gt;part 1&lt;/a&gt; of this article series. Or you might have a preference based on the business modeling capabilities of Java or Kotlin, which we will show in &lt;a href="https://javapro.io/2026/05/07/kotlin-kontra-java-part-3-language-for-interop/"&gt;part 3&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Building an AI-Powered RPG - to Learn Enterprise AI Integration</title><link>https://javapro-en.svenruppert.com/building-an-ai-powered-rpg-to-learn-enterprise-ai-integration/</link><pubDate>Tue, 21 Apr 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/building-an-ai-powered-rpg-to-learn-enterprise-ai-integration/</guid><description>&lt;p&gt;This article shares insights from my hackathon project “Runes of Reason” - an AI-powered RPG - and uses it to explain &lt;strong&gt;concepts for AI integration with Spring AI&lt;/strong&gt;. Along the way, the game demonstrates how LLMs can fundamentally &lt;strong&gt;reshape our whole product design&lt;/strong&gt;. The RPG is an entertaining project for learning, but many insights &lt;strong&gt;can be transferred to real-world enterprise software use cases&lt;/strong&gt; (summarized in the “&lt;em&gt;Lessons Learned&lt;/em&gt;” sections).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; The code examples use the Spring AI &lt;strong&gt;milestone release 2.0.0-M2 - the API might change.&lt;/strong&gt; The article also assumes a basic understanding of LLMs and Spring. If it feels too fast-paced, JAVAPRO offers a &lt;a href="https://javapro.io/2025/04/22/building-ai-driven-applications-with-spring-ai/"&gt;Spring AI fundamentals tutorial&lt;/a&gt; as well as &lt;a href="https://javapro.io/category/ai-ml/"&gt;many other great articles&lt;/a&gt; that can help you getting started with the topic.&lt;/p&gt;</description></item><item><title>Java 26 Is Boring</title><link>https://javapro-en.svenruppert.com/java-26-is-boring/</link><pubDate>Fri, 17 Apr 2026 07:00:03 +0000</pubDate><guid>https://javapro-en.svenruppert.com/java-26-is-boring/</guid><description>&lt;h2 id="which-is-why-it-is-brilliant"&gt;Which Is Why It Is Brilliant&lt;/h2&gt;
&lt;p&gt;When people hear “boring tech”, they usually mean old, slow, or not innovative. But in production, boring implies something very different. Boring means predictable, with no surprises. Boring means your system still works at 3 a.m. when nobody wants to debug a memory leak. And boring also means that you can understand your system years after you wrote it.&lt;/p&gt;
&lt;p&gt;Many platforms try to impress developers with significant changes, shiny rewrites, or breaking updates. Java took another path. Java optimizes for trust.&lt;/p&gt;</description></item><item><title>Kotlin kontra Java - Part 1 - Ecosystem</title><link>https://javapro-en.svenruppert.com/kotlin-kontra-java-part-1-ecosystem/</link><pubDate>Thu, 16 Apr 2026 07:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/kotlin-kontra-java-part-1-ecosystem/</guid><description>&lt;p&gt;When you start a new project on the JVM, should you pick Java or Kotlin?&lt;/p&gt;
&lt;p&gt;Kotlin is used by Amazon, Atlassian, Duolingo, Google, JetBrains, Meta, Netflix, Uber and many more. Java is used by, well, &lt;a href="https://blogs.oracle.com/connect/25-years-java-technology-community-family"&gt;„more than 3 billion devices“&lt;/a&gt;. Which one provides the biggest benefit, which one can give us an edge, which one should we pick?&lt;/p&gt;
&lt;p&gt;After 20 years of building systems in Java and 8 years of doing the same in Kotlin, I’ve seen Kotlin earn its reputation as a natural evolution of Java. Rightfully so. Much of what we need can be expressed very cleanly with little verbosity.&lt;/p&gt;</description></item><item><title>Modernizing Production Containers to Resist the Constant CVE Flow</title><link>https://javapro-en.svenruppert.com/modernizing-production-containers-to-resist-the-constant-cve-flow/</link><pubDate>Tue, 14 Apr 2026 07:00:03 +0000</pubDate><guid>https://javapro-en.svenruppert.com/modernizing-production-containers-to-resist-the-constant-cve-flow/</guid><description>&lt;p&gt;Common Vulnerabilities and Exposures or CVEs is a catalog of publicly disclosed software security flaws that attackers can use to gain unauthorized access.&lt;/p&gt;
&lt;p&gt;With 40,003 CVEs recorded in 2024, denoting a 39% increase as compared to 2023, container vulnerabilities are no longer a minor cleanup task. It is a river that floods Kubernetes clusters, drowning the teams in operational burden while real exposures slip through.&lt;/p&gt;
&lt;p&gt;Chasing every single CVE is a road to nowhere as new vulnerabilities are discovered constantly. The solution is to build a centralized vulnerability management system that will serve as a dam resisting the CVE flood and enable controlled CVE identification and remediation. &lt;/p&gt;</description></item><item><title>Zero Migration Java - Staying Current Without Breaking Your App</title><link>https://javapro-en.svenruppert.com/zero-migration-java-staying-current-without-breaking-your-app/</link><pubDate>Fri, 10 Apr 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/zero-migration-java-staying-current-without-breaking-your-app/</guid><description>Keeping enterprise Java applications secure and up-to-date is critical but traditional runtime upgrades often come with painful migrations, broken dependencies, and retesting cycles. What if developers could upgrade their runtime without touching their code? In this article, we explore the concept of zero migration — a runtime model that allows Java applications to stay current with the latest pat</description></item><item><title>Java Vector API: Faster vector computations for the JVM</title><link>https://javapro-en.svenruppert.com/java-vector-api-faster-vector-computations-for-the-jvm/</link><pubDate>Thu, 09 Apr 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/java-vector-api-faster-vector-computations-for-the-jvm/</guid><description>&lt;h2 id="introduction"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Modern CPUs contain vector registers. These vector registers hold multiple numerical values as the same time. They enable SIMD (Single Instruction Multiple Data) which allows same instruction to be applied to multiple pairs of data which is present in these vector registers. SIMD is a natural choice for parallel data processing which is needed for processing arrays, large binary files, statistical analysis etc.&lt;/p&gt;
&lt;p&gt;Historically, Java developers relied on the HotSpot compiler to auto-vectorize simple loops. Auto-vectorization is an extremely fast choice when it applies, but it requires a lot of conditions to be met to be applied: many real-world loops are not transformed because the compiler cannot prove safety or profitability. Java’s Vector API was introduced to close this gap by providing a clear, explicit, platform-agnostic way to express vector computations so that they can be reliably compiled to the best available hardware instructions and still run correctly (with “graceful degradation”) when vector instructions are not available or not applicable.&lt;/p&gt;</description></item><item><title>A Big Screen Experience for Java Developers &amp; Architects</title><link>https://javapro-en.svenruppert.com/a-big-screen-experience-for-java-developers-architects/</link><pubDate>Wed, 08 Apr 2026 12:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/a-big-screen-experience-for-java-developers-architects/</guid><description>&lt;p&gt;&lt;strong&gt;JCON EUROPE 2026 | April 20–23, 2026 | Cinedom Cologne&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Anyone talking about modern software development today can hardly avoid Java. Few technologies have shaped the enterprise world as sustainably, and few communities are as vibrant, diverse, and innovation-driven. This is exactly where JCON comes in: as a meeting point, a platform, and an experiential space for developers from all over the world. With participants from more than 70 countries, JCON has long since become an international gathering. &lt;strong&gt;Openness, knowledge sharing&lt;/strong&gt;, and a &lt;strong&gt;strong sense of community&lt;/strong&gt; remain at its core.&lt;/p&gt;</description></item><item><title>Java Performance Optimization with Agentic AI: Autonomous Diagnostics and Actionable Recommendations</title><link>https://javapro-en.svenruppert.com/java-performance-optimization-with-agentic-ai-autonomous-diagnostics-and-actionable-recommendations/</link><pubDate>Tue, 07 Apr 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/java-performance-optimization-with-agentic-ai-autonomous-diagnostics-and-actionable-recommendations/</guid><description>&lt;p&gt;&lt;a href="https://schedule.jcon.one/2026/session/1050952"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/03/2026-Magazin-Artikel-Banner-1024x213.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Java performance diagnosis in production is manual, slow, and requires deep expertise. You get a Grafana alert, grab a thread dump, download a JFR recording, open it in JDK Mission Control, stare at flamegraphs, correlate with metrics — hours of work per incident. Most teams don&amp;rsquo;t have a dedicated performance engineer, so alerts get ignored or result in generic &amp;ldquo;add more replicas&amp;rdquo; responses.&lt;/p&gt;
&lt;p&gt;We built a system that does this autonomously. When a monitoring alert fires, it collects profiling data and thread dumps, extracts runtime metrics, generates flamegraphs, and sends everything to an AI model that produces a structured performance report — including root cause analysis and concrete code fixes with file paths and line numbers from the actual source repository. The pipeline runs on Kubernetes, triggered by Grafana webhooks, with results stored in Amazon S3.&lt;/p&gt;</description></item><item><title>Talk to Your Data: Natural Language Data Access in Java</title><link>https://javapro-en.svenruppert.com/talk-to-your-data-natural-language-data-access-in-java/</link><pubDate>Fri, 03 Apr 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/talk-to-your-data-natural-language-data-access-in-java/</guid><description>&lt;p&gt;&lt;a href="https://youtu.be/tMW5jxX6DoA"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/03/2026-Magazin-Artikel-Banner-1024x213.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For decades, Java developers have relied on robust frameworks to manage the complexity of enterprise applications. At the heart of this ecosystem lies &lt;strong&gt;Hibernate ORM&lt;/strong&gt;, the popular &lt;a href="https://hibernate.org/orm/"&gt;library&lt;/a&gt; for bridging the gap between object-oriented Java applications and relational databases. It allows developers to map complex domain models to database tables, and write type-safe, performant queries using the Hibernate Query Language (HQL).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quarkus&lt;/strong&gt; has emerged as a Java &lt;a href="https://quarkus.io/"&gt;framework&lt;/a&gt; for building applications and services, focusing on incredibly fast startup times, efficient resource consumption and developer joy.&lt;/p&gt;</description></item><item><title>The FFM API: OpenJDK Changed the Game for Native Interactions and #JavaOnRaspberryPi</title><link>https://javapro-en.svenruppert.com/the-ffm-api-openjdk-changed-the-game-for-native-interactions-and-javaonraspberrypi/</link><pubDate>Wed, 01 Apr 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/the-ffm-api-openjdk-changed-the-game-for-native-interactions-and-javaonraspberrypi/</guid><description>&lt;p&gt;&lt;a href="https://schedule.jcon.one/2026/session/1032099"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/03/2026-Magazin-Artikel-Banner-1024x213.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re working with &lt;a href="https://www.pi4j.com/"&gt;Pi4J&lt;/a&gt;, you&amp;rsquo;re essentially using a Java library that bridges the gap between your Java application and the GPIO hardware on a Raspberry Pi. The beauty of Pi4J lies in how it hides the complexity of native library integration and the &lt;a href="https://www.baeldung.com/jni"&gt;Java Native Interface (JNI)&lt;/a&gt;. It lets you focus on building great applications rather than dealing with low-level system calls.&lt;/p&gt;
&lt;p&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2025/12/pi4j-overview.webp" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;My involvement with Pi4J started around 2020 while writing the book &amp;ldquo;&lt;a href="https://webtechie.be/books/"&gt;Getting Started with Java on the Raspberry Pi&lt;/a&gt;&amp;rdquo;. Despite years of contributing to the project, the deeper layers of Pi4J&amp;rsquo;s codebase still challenge me. Take a look at this snippet and tell me if you understand what&amp;rsquo;s going on:&lt;/p&gt;</description></item><item><title>Agentic AI Patterns for Enterprise Software</title><link>https://javapro-en.svenruppert.com/agentic-ai-patterns-for-enterprise-software/</link><pubDate>Tue, 31 Mar 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/agentic-ai-patterns-for-enterprise-software/</guid><description>&lt;p&gt;It is no surprise that software development is increasingly shaped by the integration of AI. As the technology matures, we are moving beyond simple, monolithic AI models or single shot API calls. Modern enterprise architectures are rapidly adopting &lt;em&gt;agentic AI&lt;/em&gt; systems, which orchestrate multiple independent reasoning agents to accomplish complex, real-world tasks. This article explores these powerful patterns, covering the core concepts of agents, their coordination, orchestration models, and crucially how to implement them effectively in enterprise Java applications. &lt;/p&gt;</description></item><item><title>Always Up to Date - with Every New Free PDF Edition!</title><link>https://javapro-en.svenruppert.com/always-up-to-date-with-every-new-free-pdf-edition-26-3/</link><pubDate>Thu, 26 Mar 2026 12:05:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/always-up-to-date-with-every-new-free-pdf-edition-26-3/</guid><description>&lt;p&gt;&lt;strong&gt;Don&amp;rsquo;t Want to Miss a Thing?&lt;/strong&gt;&lt;br&gt;
By &lt;a href="https://javapro.io/#pdf-newsletter"&gt;subscribing to our news&lt;/a&gt;, you’ll get each new PDF edition automatically — no extra steps, just delivered straight to your inbox. Enjoy exclusive JAVAPRO content, special editions, and stay connected to everything new.&lt;/p&gt;
&lt;p&gt;✔️ 100% free&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="http://javapro.io/#pdf-newsletter"&gt;Subscribe now&lt;/a&gt;&lt;/strong&gt; &lt;strong&gt;and be the first to receive every future issue &amp;amp; updates.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;lsquo;From Coder To System Designer&amp;rsquo; – &lt;a href="https://javapro-en.svenruppert.com/uploads/2026/03/JAVAPRO_03-2026.pdf"&gt;download free PDF here&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;a href="http://javapro.io/#pdf-newsletter"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/03/Subscribe-Newsletter-JAVAPRO-Magazine-PDF-26-3-1-1024x576.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Semantic Versioning done automatically</title><link>https://javapro-en.svenruppert.com/semantic-versioning-done-automatically/</link><pubDate>Thu, 26 Mar 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/semantic-versioning-done-automatically/</guid><description>&lt;p&gt;Software evolves over time. Bugs are fixed, features are added, and occasionally design mistakes are corrected in ways that are incompatible with earlier releases. Version numbers exist to identify these distinct states of a software artifact and to allow consumers to reason about whether an upgrade is safe. Without versioning, it is impossible to distinguish between two builds of the same library or to express expectations about their compatibility.&lt;/p&gt;
&lt;h2 id="semantic-versioning"&gt;Semantic Versioning&lt;/h2&gt;
&lt;p&gt;Software versions come in many forms, ranging from simple incrementing numbers to schemes based on release dates. One of the most widely adopted approaches is Semantic Versioning, commonly abbreviated as SemVer. SemVer defines a structured MAJOR.MINOR.PATCH version format with explicit rules about how version numbers must change in response to different kinds of software changes.&lt;/p&gt;</description></item><item><title>Effective Pattern Matching 2026 Edition</title><link>https://javapro-en.svenruppert.com/effective-pattern-matching-2026-edition/</link><pubDate>Tue, 24 Mar 2026 16:58:41 +0000</pubDate><guid>https://javapro-en.svenruppert.com/effective-pattern-matching-2026-edition/</guid><description>&lt;p&gt;Since Java 14, the Java switch and instanceof statements have been enhanced, in multiple phases, to support pattern matching and a &amp;ldquo;data-oriented&amp;rdquo; programming style. In this article, I explore when this programming style is beneficial, and why. I describe the syntax of pattern matching, as it has evolved, and show how it will be further enhanced in upcoming versions of Java. I warn of corner cases of the switch syntax where modern usage clashes with legacy behavior. I conclude with a set of rules when to use pattern matching and &amp;ldquo;data orientation&amp;rdquo; now, how to prepare for future enhancements, and when to stay away.&lt;/p&gt;</description></item><item><title>A2A Building Interoperable AI Agents with Java</title><link>https://javapro-en.svenruppert.com/a2a-building-interoperable-ai-agents-with-java/</link><pubDate>Wed, 18 Mar 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/a2a-building-interoperable-ai-agents-with-java/</guid><description>&lt;p&gt;&lt;a href="https://schedule.jcon.one/2026/session/1052858"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/03/2026-Magazin-Artikel-Banner-1024x213.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="why-agents-need-friends"&gt;Why agents need friends?&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;ve recently seen a boom in AI &amp;ldquo;agents&amp;rdquo;. AI Agents are usually described as a service that talks to an AI model to perform some kind of goal-based operation using tools and context it assumes.&lt;/p&gt;
&lt;p&gt;But most of these agents are still working in an isolated environment. You build an agent into your application and it offers some capabilities, but that&amp;rsquo;s it. You&amp;rsquo;re basically building a monolith with AI in it.&lt;/p&gt;</description></item><item><title>Open J Proxy 0.4.0-beta: Flexibility, Observability, and a Big Step Toward Production</title><link>https://javapro-en.svenruppert.com/open-j-proxy-0-4-0-beta-flexibility-observability-and-a-big-step-toward-production/</link><pubDate>Tue, 17 Mar 2026 12:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/open-j-proxy-0-4-0-beta-flexibility-observability-and-a-big-step-toward-production/</guid><description>&lt;p&gt;By Rogerio Robetti – OJP Founder and Lead Developer&lt;/p&gt;
&lt;p&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/03/ChatGPT-Image-Mar-8-2026-04_12_25-PM-1024x683.png" alt="" loading="lazy" decoding="async"&gt;
 
 
 
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Every few releases a project crosses a threshold where the changes stop being incremental and start reshaping how the system can be used.&lt;br&gt;
&lt;strong&gt;Open J Proxy 0.4.0-beta&lt;/strong&gt; is one of those releases.&lt;/p&gt;
&lt;p&gt;This version touches nearly every layer of OJP: integration with popular Java frameworks, observability, security, extensibility, and developer tooling. The result is a release that makes OJP easier to integrate, easier to operate, and far more flexible internally.&lt;/p&gt;</description></item></channel></rss>