<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JAVAPRO International</title><link>https://javapro-en.svenruppert.com/</link><description>Recent content 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/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>Do You Still Write Code without Hexagon?</title><link>https://javapro-en.svenruppert.com/do-you-still-write-code-without-hexagon/</link><pubDate>Tue, 14 Jul 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/do-you-still-write-code-without-hexagon/</guid><description>&lt;p&gt;During our training in architecture, we often ask participants if they are familiar with Hexagonal architecture, and it’s surprising to see only a few hands raised initially. After a brief presentation, we see a few more hands go up, as participants realize they have been using Hexagonal architecture without realizing it.&lt;/p&gt;
&lt;p&gt;As hands-on architects, we rely heavily on Hexagonal architecture in our daily work. However, we notice that many people are still unaware of the significant benefits it can bring to their projects. &lt;/p&gt;</description></item><item><title>When Product Owners Commit Code: Small Steps, Big Impact</title><link>https://javapro-en.svenruppert.com/when-product-owners-commit-code-small-steps-big-impact/</link><pubDate>Thu, 09 Jul 2026 10:01:52 +0000</pubDate><guid>https://javapro-en.svenruppert.com/when-product-owners-commit-code-small-steps-big-impact/</guid><description>&lt;p&gt;&lt;em&gt;Disclaimer: No Product Owners were harmed in the making of this story.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Spoiler: They survived. In fact… they thrived.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We never planned to tell this story.. and certainly not six years later. Back when it happened, it didn’t feel revolutionary. It felt… practical. A small fix to a small annoyance. The sort of thing teams do every day just to make life a bit easier.&lt;/p&gt;
&lt;p&gt;But today, in a world where AI blurs boundaries and workflows become more fluid, the lesson behind this tiny experiment has become surprisingly relevant again. Because even before the age of “AI copilots”, our Product Owners had to leap across a much wider gap and yet what unfolded wasn’t about tools at all. It was about mindset. About curiosity. About empathy. And about what happens when teams stretch just a little bit beyond the edges of their roles.&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>BoxLang’s First 11 Months: Explosive Growth, Developer Empowerment, and the Return of Dynamic Language!</title><link>https://javapro-en.svenruppert.com/boxlangs-first-11-months-explosive-growth-developer-empowerment-and-the-return-of-dynamic-language/</link><pubDate>Fri, 03 Jul 2026 12:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlangs-first-11-months-explosive-growth-developer-empowerment-and-the-return-of-dynamic-language/</guid><description>&lt;blockquote class="pullquote"&gt;
 &lt;span class="pullquote-mark" aria-hidden="true"&gt;“&lt;/span&gt;
 &lt;div class="pullquote-body"&gt;&lt;p&gt;&lt;em&gt;11 months. 13 releases. Production workloads already running. If you haven&amp;rsquo;t evaluated BoxLang yet, now is the time.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.ortussolutions.com/blog/boxlangs-first-11-months-explosive-growth-developer-empowerment-and-the-return-of-dynamic-languages"&gt;https://www.ortussolutions.com/blog/boxlangs-first-11-months-explosive-growth-developer-empowerment-and-the-return-of-dynamic-languages&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;&lt;hr&gt;
&lt;p&gt;At Into the Box 2026, &lt;a href="https://ai.ortussolutions.com"&gt;Ortus Solutions&lt;/a&gt; pulled back the curtain on something that deserves serious attention from every technical leader building on the JVM: &lt;a href="https://boxlang.io/"&gt;BoxLang&lt;/a&gt; is not a hobbyist language experiment. It is a production-grade, actively evolving development platform with enterprise adoption already underway and a runtime footprint that now reaches places Java simply cannot go.&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>BoxLang 1.14.0 : Query Transformers: Take Full Control of Your Query Results</title><link>https://javapro-en.svenruppert.com/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/</link><pubDate>Wed, 01 Jul 2026 12:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/</guid><description>&lt;p&gt;BoxLang 1.14.0 ships a lot of exciting features &amp;ndash; Dynamic Sets, Ranges, Inner Classes, JSONPath navigation &amp;ndash; but one quietly powerful addition will change the way you think about every database call in your application: &lt;strong&gt;Query Transformers&lt;/strong&gt;, and this is just the start, we have plans for a whole lot more cool query features.&lt;/p&gt;
&lt;p&gt;If you have ever executed a query and then immediately written a loop to reshape the result into what you actually needed, this feature is for you.&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>API Development: Implementing an HTTP POST/SSE event in Jakarta REST</title><link>https://javapro-en.svenruppert.com/api-development-implementing-an-http-post-sse-event-in-jakarta-rest/</link><pubDate>Tue, 30 Jun 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/api-development-implementing-an-http-post-sse-event-in-jakarta-rest/</guid><description>&lt;p&gt;In this article, we’ll learn how to send messages to a client using Server-Sent Events (SSE) initiated by a client&amp;rsquo;s persistent HTTP POST connection.&lt;/p&gt;
&lt;h2 id="1-what-is-server-sent-events-sse"&gt;1. What is Server-Sent Events (SSE)?&lt;/h2&gt;
&lt;p&gt;Server-Sent Events (SSE) is a web push technology, based on the HTTP protocol, that allows clients to subscribe to a stream of events, pushed by the servers over a persistent HTTP connection. The server sends chunks of data (as data event streams) asynchronously to the client, once the client connection is established.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Introducing Inner Classes</title><link>https://javapro-en.svenruppert.com/boxlang-1-14-0-introducing-inner-classes/</link><pubDate>Mon, 29 Jun 2026 12:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlang-1-14-0-introducing-inner-classes/</guid><description>&lt;p&gt;BoxLang has always embraced a simple truth: the way you organize code shapes the way you think about problems. For a long time, if you needed a helper class, you needed a file. One class, one &lt;code&gt;.bx&lt;/code&gt; file, no exceptions. This also stemmed from the CFML days. That&amp;rsquo;s clean and predictable, but it creates real friction when a class is tightly coupled to exactly one caller and has no business existing anywhere else.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : BoxSet is Here: BoxLang's New First-Class Set Type</title><link>https://javapro-en.svenruppert.com/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/</link><pubDate>Fri, 26 Jun 2026 12:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/</guid><description>&lt;p&gt;BoxLang 1.14.0 ships with a new &lt;strong&gt;dynamic first-class Set type&lt;/strong&gt; baked directly into the language. Not a wrapper you reach for manually, not a &lt;code&gt;createObject( &amp;quot;java&amp;quot;, &amp;quot;java.util.HashSet&amp;quot; )&lt;/code&gt; incantation you paste from a Stack Overflow answer years ago. A real &lt;code&gt;BoxSet&lt;/code&gt; with literal syntax, operator overloads, a full functional pipeline, change listeners, JSON serialization, and deep Java interop.&lt;/p&gt;
&lt;p&gt;If you have ever deduplicated an array with a loop, compared two collections element by element, or modeled a permission system on top of a struct &amp;ndash; Sets are the tool you were missing. Let&amp;rsquo;s dig in.&lt;/p&gt;</description></item><item><title>From Prototype to Production: Building Safe and Reliable AI Agents with Spring AI and MCP</title><link>https://javapro-en.svenruppert.com/from-prototype-to-production-building-safe-and-reliable-ai-agents-with-spring-ai-and-mcp/</link><pubDate>Thu, 25 Jun 2026 07:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/from-prototype-to-production-building-safe-and-reliable-ai-agents-with-spring-ai-and-mcp/</guid><description>&lt;p&gt;The AI agent demo works perfectly in the development environment. Your prototype handles natural language queries, executes tool calls, and generates sensible responses. But when stakeholders ask &amp;lsquo;Can we deploy this?&amp;rsquo;, reality sets in. That question exposes the massive gap between a functional prototype and a Spring AI production system ready for real traffic, unexpected failures, and business-critical operations.&lt;/p&gt;
&lt;p&gt;That question reveals the massive gap between a working prototype and a production system. The demo doesn&amp;rsquo;t handle failures gracefully. It has no guardrails against harmful outputs. There&amp;rsquo;s no visibility into what the agent is actually doing. Cost per request? Unknown. Error rates? No idea. Recovery strategy when the LLM provider goes down? Haven&amp;rsquo;t thought about it.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0 : Sets, Ranges, Inner Classes, and a Runtime That Talks Back</title><link>https://javapro-en.svenruppert.com/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</link><pubDate>Wed, 24 Jun 2026 12:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlang-1-14-0-sets-ranges-inner-classes-and-a-runtime-that-talks-back/</guid><description>&lt;p&gt;BoxLang has never stood still, but &lt;strong&gt;version 1.14.0&lt;/strong&gt; is something different. This is the release where the language stops filling gaps and starts defining what a modern dynamic JVM language looks like on its own terms. Sixty-five issues closed. Four innovative language features. A formatter that has grown up. And a companion module - &lt;code&gt;bx-mcp&lt;/code&gt; - that fundamentally changes how you operate a running BoxLang application with AI.&lt;/p&gt;
&lt;p&gt;This could have easily been a major release for the team. This has been a really amazing effort by everybody at Ortus, and we&amp;rsquo;ve received great feedback from our clients migrating to BoxLang and coming up with innovative ideas for this platform. We have only just begun!&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>Introducing bx-jwt: Enterprise-Grade JSON Web Tokens for BoxLang</title><link>https://javapro-en.svenruppert.com/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</link><pubDate>Tue, 23 Jun 2026 12:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</guid><description>&lt;p&gt;JWT authentication is everywhere. But rolling it correctly — with proper algorithm enforcement, key management, clock skew handling, JWE encryption, and zero security footguns — is anything but trivial. Today, we&amp;rsquo;re shipping &lt;strong&gt;bx-jwt&lt;/strong&gt;, a production-ready JWT/JWE module for BoxLang that handles all of it out of the box, so you can focus on building, not fighting cryptography.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;bx-jwt&lt;/strong&gt; is part of the &lt;a href="https://www.boxlang.io/plans"&gt;BoxLang+ and BoxLang++ subscription tiers&lt;/a&gt; — our enterprise-grade module collection built for teams that take security seriously.&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>Introducing BoxLings! An interactive teacher for BoxLang and TDD/BDD</title><link>https://javapro-en.svenruppert.com/introducing-boxlings-an-interactive-teacher-for-boxlang-and-tdd-bdd/</link><pubDate>Wed, 17 Jun 2026 12:00:03 +0000</pubDate><guid>https://javapro-en.svenruppert.com/introducing-boxlings-an-interactive-teacher-for-boxlang-and-tdd-bdd/</guid><description>&lt;p&gt;We believe the best way to learn a programming language is by writing code — real code, with real feedback, and real tests. That&amp;rsquo;s exactly why we built &lt;strong&gt;BoxLings&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Inspired by the beloved &lt;a href="https://github.com/rust-lang/rustlings"&gt;Rustlings&lt;/a&gt; project, &lt;strong&gt;BoxLings&lt;/strong&gt; is an interactive CLI tool that teaches you &lt;strong&gt;BoxLang&lt;/strong&gt; through hands-on exercises. You read failing tests, fix broken code, and level up — one exercise at a time.&lt;/p&gt;
&lt;p&gt;Oh, and the whole thing is written in BoxLang itself. 🥊 Dogfooding at its finest.&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>BoxLang v1.13.0: Compatibility, Concurrency, and Formatter Maturity</title><link>https://javapro-en.svenruppert.com/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</link><pubDate>Mon, 15 Jun 2026 12:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlang-v1-13-0-compatibility-concurrency-and-formatter-maturity/</guid><description>&lt;p&gt;&lt;strong&gt;BoxLang 1.13.0&lt;/strong&gt; is a stability-first release with deep compatibility work and runtime hardening. This build closes 48 issues, with the majority focused on CFML compatibility edge cases, concurrency correctness, formatting parity, and miniserver/runtime reliability under real production loads.&lt;/p&gt;
&lt;p&gt;While this release is bug-fix heavy, it still introduces several meaningful features and quality-of-life improvements: character-aware trimming, class metadata lookup by absolute path, process environment control in SystemExecute(), SOAP headers, new query column rename capabilities, and safer miniserver routing/security defaults.&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>BoxLang Goes Serverless on Google Cloud</title><link>https://javapro-en.svenruppert.com/boxlang-goes-serverless-on-google-cloud/</link><pubDate>Wed, 10 Jun 2026 12:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlang-goes-serverless-on-google-cloud/</guid><description>&lt;p&gt;We just shipped the &lt;strong&gt;BoxLang Google Cloud Functions Runtime&lt;/strong&gt; — and it brings the same write-once-run-anywhere serverless experience you already know from our AWS Lambda runtime, now running natively on &lt;strong&gt;Google Cloud Functions Gen2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The big idea is simple: the same &lt;code&gt;.bx&lt;/code&gt; handler file you deploy to AWS Lambda works on GCF without modification. One codebase. Two clouds. Zero rewrites.&lt;/p&gt;
&lt;h2 id="the-architecture"&gt;The Architecture&lt;/h2&gt;
&lt;p&gt;The GCF experience is intentionally split into two projects:&lt;/p&gt;</description></item><item><title>Beyond UML: Clean Software Architecture in the Age of AI‑Generated Code</title><link>https://javapro-en.svenruppert.com/beyond-uml-clean-software-architecture-in-the-age-of-aigenerated-code/</link><pubDate>Wed, 10 Jun 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/beyond-uml-clean-software-architecture-in-the-age-of-aigenerated-code/</guid><description>&lt;h2 id="abstract"&gt;Abstract&lt;/h2&gt;
&lt;p&gt;Today we write more code in less time than ever before. AI systems act like permanently available junior programmers: They produce thousands of lines of code in minutes – but who takes responsibility for the software architecture?&lt;/p&gt;
&lt;p&gt;The real problem is therefore often not “bad AI code,” but the growing difficulty for people to keep an overview and make sound architectural decisions.&lt;/p&gt;
&lt;p&gt;This article discusses an idea for quickly building a mental model of existing code, spotting architectural problems early, and making targeted changes – without having to maintain static documentation in parallel.&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>Build Cross-Platform Desktop Apps with BoxLang</title><link>https://javapro-en.svenruppert.com/build-cross-platform-desktop-apps-with-boxlang/</link><pubDate>Mon, 08 Jun 2026 12:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/build-cross-platform-desktop-apps-with-boxlang/</guid><description>&lt;p&gt;Today we&amp;rsquo;re shipping the &lt;strong&gt;initial release of the BoxLang Desktop Runtime&lt;/strong&gt; — powered by Electron, BoxLang, and Vite. With one starter, one &lt;code&gt;npm run dev&lt;/code&gt;, and one packaging command, you can build and distribute professional desktop applications for &lt;strong&gt;macOS, Windows, and Linux&lt;/strong&gt; using the BoxLang you already know. 🎯&lt;/p&gt;
&lt;p&gt;This is BoxLang&amp;rsquo;s newest runtime joining a deliberately growing list — web servers, AWS Lambda, Google Cloud Functions, Android (in development), and now &lt;strong&gt;desktop&lt;/strong&gt;. Same language, same idioms, same modules — different shell. Write once, deploy where your users are. 🚀&lt;/p&gt;</description></item><item><title>BoxLang AI 3.2.0 — Image Generation, Web Search, Fluent Audio, Agent Registry &amp; MCP Observability</title><link>https://javapro-en.svenruppert.com/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/</link><pubDate>Fri, 05 Jun 2026 12:00:01 +0000</pubDate><guid>https://javapro-en.svenruppert.com/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/</guid><description>&lt;p&gt;BoxLang AI 3.2.0 is here, and it&amp;rsquo;s a landmark release. We&amp;rsquo;re shipping five major features: &lt;strong&gt;image generation, web search, a fluent audio builder API, a centralized agent registry, and deep MCP observability along with a suite of analytics improvements and a critical bug fix.&lt;/strong&gt; Let&amp;rsquo;s dig in. 🎉&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="-image-generation--aiimage"&gt;🖼️ Image Generation — &lt;code&gt;aiImage()&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;You can now generate images directly from BoxLang using any provider that supports &lt;code&gt;text-to-image&lt;/code&gt; generation. The &lt;code&gt;aiImage()&lt;/code&gt; BIF follows the same &lt;strong&gt;fluent, chainable philosophy&lt;/strong&gt; as the rest of bx-ai then act on the result with expressive method calls.&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>Introducing skills.boxlang.io — The Open Agent Skills Ecosystem for BoxLang &amp; the Ortus World</title><link>https://javapro-en.svenruppert.com/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</link><pubDate>Wed, 03 Jun 2026 12:00:03 +0000</pubDate><guid>https://javapro-en.svenruppert.com/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</guid><description>&lt;p&gt;Today we&amp;rsquo;re launching something we&amp;rsquo;ve been quietly building for months: &lt;strong&gt;&lt;a href="https://skills.boxlang.io"&gt;skills.boxlang.io&lt;/a&gt;&lt;/strong&gt; — a public, agent-agnostic directory for AI skills covering BoxLang, ColdBox, TestBox, CommandBox, and the entire Ortus ecosystem.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve ever pasted a 400-line system prompt into yet another AI agent, watched two of your bots drift onto subtly different versions of the same coding standard, or spent half a Friday afternoon trying to convince an LLM that BoxLang is &lt;strong&gt;not&lt;/strong&gt; Java and is &lt;strong&gt;not&lt;/strong&gt; CFML, or how to code for Modern CFML; this launch is for you. 🎯&lt;/p&gt;</description></item><item><title>The Gen AI Iceberg - Java Tooling Edition</title><link>https://javapro-en.svenruppert.com/the-gen-ai-iceberg-java-tooling-edition/</link><pubDate>Wed, 03 Jun 2026 07:00:03 +0000</pubDate><guid>https://javapro-en.svenruppert.com/the-gen-ai-iceberg-java-tooling-edition/</guid><description>&lt;h3 id="from-autowired-chatclient-to-compiling-gpu-kernels-from-pure-java-bytecode-a-lovecraftian-descent-through-everything-a-jvm-developer-needs-or-fears-to-build-ai-powered-applications"&gt;From &lt;code&gt;@Autowired ChatClient&lt;/code&gt; to Compiling GPU Kernels From Pure Java Bytecode: A Lovecraftian Descent Through Everything a JVM Developer Needs (or Fears) to Build AI-Powered Applications&lt;/h3&gt;
&lt;p&gt;The &amp;ldquo;Iceberg&amp;rdquo; meme is an internet phenomenon that humorously, and sometimes unsettlingly, illustrates levels of knowledge or initiation into a given topic – from simple, widely known facts at the tip of the iceberg to the dark, esoteric depths comprehensible only to the most battle-hardened veterans. Picture an iceberg floating on water: what&amp;rsquo;s visible on the surface is just the beginning, while the real magic (or nightmare) lurks beneath, in increasingly inaccessible layers.&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>Announcing MatchBox Open Beta: BoxLang, Now Running in New Places</title><link>https://javapro-en.svenruppert.com/announcing-matchbox-open-beta-boxlang-now-running-in-new-places/</link><pubDate>Mon, 01 Jun 2026 12:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/announcing-matchbox-open-beta-boxlang-now-running-in-new-places/</guid><description>&lt;p&gt;Ortus Solutions is excited to announce the open beta of &lt;strong&gt;&lt;a href="https://boxlang.ortusbooks.com/boxlang-framework/matchbox"&gt;MatchBox&lt;/a&gt;&lt;/strong&gt;, a new open source project in the BoxLang ecosystem. MatchBox is a custom BoxLang virtual machine written in Rust. It is built for the places where a full JVM runtime is not the right fit: small native command-line tools, compact web services, browser applications, WebAssembly containers, and even embedded hardware like ESP32 devices.&lt;/p&gt;
&lt;p&gt;The project started in early March and has been moving quickly - already at &lt;strong&gt;v0.5.0&lt;/strong&gt;. That speed is part of why we are opening the beta now. MatchBox is already capable enough to build real experiments, prototypes, and early applications, but it is still beta software. APIs will change. Some language features are still being implemented. Some deployment targets are intentionally limited while we harden the runtime. We want developers to try it, break it, ask questions, and help shape where it goes next.&lt;/p&gt;</description></item><item><title>JCON EUROPE 2026: Why the Java Community Still Meets in Person</title><link>https://javapro-en.svenruppert.com/jcon-europe-2026-why-the-java-community-still-meets-in-person/</link><pubDate>Mon, 01 Jun 2026 07:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/jcon-europe-2026-why-the-java-community-still-meets-in-person/</guid><description>&lt;p&gt;Every year, when we start planning JCON EUROPE, one question always guides us:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;How do we create a conference that developers genuinely enjoy attending?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not just another event with slides and sponsor booths. Not a place where people passively consume information and leave. We wanted to create an environment where developers actively connect, discuss, challenge ideas, and solve real-world problems together.&lt;/p&gt;
&lt;p&gt;Looking back at JCON EUROPE 2026, I believe this spirit was visible everywhere.&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>05-2026 | From AI as a Feature to AI as Infrastructure</title><link>https://javapro-en.svenruppert.com/05-2026-from-ai-as-a-feature-to-ai-as-infrastructure/</link><pubDate>Thu, 28 May 2026 10:41:04 +0000</pubDate><guid>https://javapro-en.svenruppert.com/05-2026-from-ai-as-a-feature-to-ai-as-infrastructure/</guid><description>&lt;p&gt;&lt;a href="https://javapro-en.svenruppert.com/uploads/2026/05/JAVAPRO_05-2026.pdf"&gt;&lt;figure class="post-figure"&gt;
 &lt;img src="https://javapro-en.svenruppert.com/uploads/2026/05/Cover.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/05/JAVAPRO_05-2026.pdf"&gt;DOWNLOAD&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;JCON&lt;br&gt;
▪️JCON Europe 2026: Why the Java Community Still Meets in Person&lt;/p&gt;
&lt;p&gt;CORE JAVA&lt;br&gt;
▪️Java 26 Is Boring&lt;br&gt;
▪️Structured Concurrency in Java 26 (JEP 525 Deep Dive)&lt;br&gt;
▪️Are the Classic Design Patterns Still Valid with Modern Java?&lt;/p&gt;
&lt;p&gt;API &amp;amp; FRAMEWORKS&lt;br&gt;
▪️The Gen AI Iceberg – Java Tooling Edition&lt;br&gt;
▪️Building AI-Driven Java Systems with Spring AI and Java 26&lt;br&gt;
▪️LangChain4j Agentic Workflows: From AI Calls to Multi-Agent Systems in Java&lt;/p&gt;</description></item><item><title>Unlocking Developer Productivity with Java 25: Features You’ll Actually Use</title><link>https://javapro-en.svenruppert.com/unlocking-developer-productivity-with-java-25-features-youll-actually-use/</link><pubDate>Thu, 28 May 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/unlocking-developer-productivity-with-java-25-features-youll-actually-use/</guid><description>&lt;h2 id="summary"&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Java 25 features for developers bring practical enhancements you can use daily. From improved switch expressions and record patterns to simplified error handling, these Java 25 features reduce boilerplate, improve clarity, and simplify your code. Discover practical, real-world examples you can drop directly into your codebase.&lt;/p&gt;
&lt;h2 id="introduction-a-java-release-that-makes-a-difference"&gt;&lt;strong&gt;&lt;a href="A%20Java%20Release%20That%20Makes%20a%20Difference"&gt;Introduction: A Java Release that makes a difference&lt;/a&gt;&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;For many developers, Java release cycles blur together. Each version arrives with a list of JEPs, often full of improvements that, while important for the platform, they don’t immediately translate into productivity gains for everyday coding.&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>OpenJ9 GC Policies: How to Choose the Right Collector</title><link>https://javapro-en.svenruppert.com/openj9-gc-policies-how-to-choose-the-right-collector/</link><pubDate>Thu, 21 May 2026 07:00:02 +0000</pubDate><guid>https://javapro-en.svenruppert.com/openj9-gc-policies-how-to-choose-the-right-collector/</guid><description>&lt;p&gt;For many OpenJ9 users, garbage collection tuning starts with the wrong question.&lt;/p&gt;
&lt;p&gt;They ask, &amp;ldquo;Which collector is the fastest?&amp;rdquo; or &amp;ldquo;Which one is best for cloud?&amp;rdquo; In practice, the better question is: &lt;strong&gt;what does my application actually need from the heap?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That is the right starting point because OpenJ9 gives you several distinct GC policies, each designed around a different balance of throughput, pause time, heap geometry, and operational behavior. The default is &lt;strong&gt;&lt;code&gt;gencon&lt;/code&gt;&lt;/strong&gt;, and for a broad spectrum of Java applications that is still the right place to start. But once heaps grow, pause spikes become operationally expensive, or throughput becomes the dominant goal, a different policy may be the better fit.&lt;/p&gt;</description></item><item><title>Will AI Replace Me? Understanding Our Value in the AI Era</title><link>https://javapro-en.svenruppert.com/will-ai-replace-me-understanding-our-value-in-the-ai-era/</link><pubDate>Wed, 20 May 2026 07:00:00 +0000</pubDate><guid>https://javapro-en.svenruppert.com/will-ai-replace-me-understanding-our-value-in-the-ai-era/</guid><description>&lt;p&gt;&lt;a href="https://schedule.jcon.one/2026/session/1045663"&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 tried to keep up with &lt;em&gt;all the content&lt;/em&gt; that’s flooding the internet on the topic of “Will AI replace software developers?”, you’d probably found a new &lt;em&gt;full-time&lt;/em&gt; job. &lt;a href="https://x.com/rakyll/status/2007239758158975130"&gt;Social media posts&lt;/a&gt;, &lt;a href="https://www.youtube.com/watch?v=VGq5JjQmrXc"&gt;vlogs&lt;/a&gt; or &lt;a href="https://www.youtube.com/watch?v=fP5URbP30j0&amp;amp;list=PL2Fq-K0QdOQjn5tWtT_y29WYEmYdXrDic&amp;amp;index=19"&gt;entire channels&lt;/a&gt;, even &lt;a href="https://www.youtube.com/watch?v=3Y1G9najGiI"&gt;CTO keynotes&lt;/a&gt;… not a day goes by without new content.&lt;/p&gt;
&lt;p&gt;This article cannot predict the future. But it can offer some orientation in a messy debate by structuring it and making its implicit (and often false) assumptions visible. Because the biggest fallacy may not be overestimating AI - but underestimating what software engineering actually is about.&lt;/p&gt;</description></item></channel></rss>