<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~files/feed-premium.xsl"?>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedpress="https://feed.press/xmlns" xmlns:podcast="https://podcastindex.org/namespace/1.0" version="2.0">
  <channel>
    <feedpress:locale>en</feedpress:locale>
    <atom:link rel="self" href="https://feeds.dzone.com/java"/>
    <atom:link rel="hub" href="https://feedpress.superfeedr.com/"/>
    <title>DZone Java Zone</title>
    <link>https://dzone.com/java</link>
    <description>Recent posts in Java on DZone.com</description>
    <item>
      <title>Detecting Bugs and Vulnerabilities in Java With SonarQube</title>
      <link>https://dzone.com/articles/detecting-bugs-vulnerabilities-java-sonarqube</link>
      <description><![CDATA[<p>The security audit report landed unexpectedly. It highlighted a critical vulnerability in our payment processing module. We had passed all unit tests. We had passed all integration tests. The code review looked clean. Yet the auditors found a hardcoded API key hidden in a utility class. This key allowed access to our third-party payment gateway. Anyone with access to the repository could see it. We were lucky the auditors found it before a malicious actor did. This incident was a wake-up call. We realized manual code reviews were not enough. We needed automated static analysis. We needed SonarQube.</p>
<p>In this article, I will share how we integrated SonarQube into our Java development workflow. I will explain the specific rules that exposed our vulnerabilities. I will detail how we configured quality gates to prevent future regressions. This is not a generic installation guide. It is a record of how we shifted security left in our pipeline. Static analysis is not just about finding bugs. It is about building a culture of quality.</p>]]></description>
      <pubDate>Wed, 20 May 2026 18:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3641714</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18990885&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>Introduction to Tactical DDD With Java: Steps to Build Semantic Code</title>
      <link>https://dzone.com/articles/tactical-ddd-with-java</link>
      <description><![CDATA[<p>Modern software systems rarely fail due to poor coding skills. Most failures occur when teams lose sight of the business problem they are addressing. As systems evolve, requirements shift, teams expand, and new integrations are added, codebases often become collections of technical decisions that lack business context. Classes become generic managers and services, methods devolve into procedural scripts, and communication between developers and domain experts diminishes. <a href="https://dzone.com/articles/tactical-domain-driven-design-bringing-strategy-to">Tactical Domain-Driven Design</a> (DDD) addresses this issue by emphasizing software that directly reflects business language in code, rather than focusing solely on infrastructure or frameworks.</p>
<p>The term “semantic” comes from the Greek semantikos, meaning “significant” or “meaningful,” which is central to Tactical DDD. The objective is not just to reorganize classes, but to ensure code communicates intent clearly to both engineers and business experts. In modern Java systems, where complexity increases due to distributed architectures, integrations, and ongoing business changes, this clarity is essential for long-term maintainability.&nbsp;</p>]]></description>
      <pubDate>Wed, 20 May 2026 15:30:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3654633</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=19025106&amp;w=600"/>
      <dc:creator>Otavio Santana</dc:creator>
    </item>
    <item>
      <title>AI Agents in Java: Architecting Intelligent Health Data Systems</title>
      <link>https://dzone.com/articles/ai-agents-in-java-architecting-intelligent-health</link>
      <description><![CDATA[<h2 data-end="688" data-start="175"><strong data-end="197" data-start="175">Executive Summary</strong></h2>
<p data-end="688" data-start="175">Modern <a href="https://dzone.com/articles/advancements-in-ai-for-health-data-analysis">health data analytics increasingly leverage AI</a> agent software components that process information and make decisions, often using large language models (LLMs) or machine learning models. In Java, you can build agentic systems using libraries like DJL (Deep Java Library), <a href="https://dzone.com/articles/aspects-to-advisors-modular-cross-cutting-spring-ai">Spring AI</a>, or by integrating LLM APIs. This document includes Maven setup, minimal Spring Boot code (controllers and services), a simple agent example, diagrams, and a comparison of different agent approaches.</p>
<h2 data-end="688" data-start="175">Flowchart</h2>
<p><img style="width: 757px;" class="fr-fic fr-dib lazyload" data-image="true" data-new="false" data-sizeformatted="79.4 kB" data-mimetype="image/png" data-creationdate="1776425104400" data-creationdateformatted="04/17/2026 11:25 AM" data-type="temp" data-url="https://dz2cdn1.dzone.com/storage/temp/18991552-mermaid-diagram.png" data-modificationdate="null" data-size="79350" data-name="mermaid-diagram.png" data-id="18991552" alt="Flowchart image" data-src="https://dz2cdn1.dzone.com/storage/temp/18991552-mermaid-diagram.png"></p>]]></description>
      <pubDate>Wed, 20 May 2026 15:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3640425</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18991570&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>Ujorm3: A New Lightweight ORM for JavaBeans and Records</title>
      <link>https://dzone.com/articles/ujorm3-lightweight-orm-java</link>
      <description><![CDATA[<blockquote>
 <p>"Do the simplest thing that could possibly work."</p>
 <p>— Kent Beck, creator of Extreme Programming and pioneer of Test-Driven Development.</p>]]></description>
      <pubDate>Tue, 19 May 2026 18:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3650248</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18988005&amp;w=600"/>
      <dc:creator>Pavel Ponec</dc:creator>
    </item>
    <item>
      <title>OpenAPI From Code With Spring and Java: A Recipe for Your CI</title>
      <link>https://dzone.com/articles/openapi-ci-spring-java</link>
      <description><![CDATA[<p>This is not "just another article about Springdoc," I promise. This is a ready-to-use recipe I was struggling to find one day, and had to build it from scratch.</p>
<p>Have you ever needed to generate OpenAPI documentation directly from your code and, more importantly, do it in a way that fits cleanly into a CI pipeline? <a href="https://dzone.com/articles/test-a-web-service-using-swagger-ui">Swagger UI</a> is commonly used in Spring Boot applications to visualize and test APIs from the browser. It can also expose the generated OpenAPI definition through a configurable endpoint, and that endpoint is exactly what we will use in this article.</p>]]></description>
      <pubDate>Tue, 19 May 2026 14:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3649980</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18987750&amp;w=600"/>
      <dc:creator>Roman Dubinin</dc:creator>
    </item>
    <item>
      <title>Building an Image Classification Pipeline With Apache Camel and Deep Java Library (DJL)</title>
      <link>https://dzone.com/articles/image-classification-pipeline-camel-djl</link>
      <description><![CDATA[<p>Image classification is now a key part of many applications. Whether you’re automating photo organization, filtering uploaded content, or enriching product catalogs with visual tags, knowing what’s in an image can be just as important as knowing what a user typed.</p>
<p>For Java developers, the challenge is familiar: most computer vision examples live in Python notebooks, while the systems that actually need image classification run on the JVM. Bridging that gap usually means standing up a separate Python microservice, managing REST calls, and dealing with serialization overhead. That’s a lot of ceremony for what should be a single processing step.</p>]]></description>
      <pubDate>Fri, 15 May 2026 20:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3646826</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18969280&amp;w=600"/>
      <dc:creator>Vignesh Durai</dc:creator>
    </item>
    <item>
      <title>How to Test a DELETE API Request With REST-Assured Java</title>
      <link>https://dzone.com/articles/test-delete-api-rest-assured-java</link>
      <description><![CDATA[<p name="eb45">API testing has become increasingly popular in recent times. Since it doesn’t involve a UI, it is generally faster and easier to execute. This makes API testing a preferred choice for validating end-to-end system functionality. Additionally, integrating automated API tests into CI/CD pipelines enables teams to receive quicker feedback on their builds.</p>
<p name="f9bd">In this tutorial, we will explore DELETE API requests and learn how to handle them with Rest-Assured in Java for automated testing. The following topics will be covered:</p>]]></description>
      <pubDate>Thu, 14 May 2026 14:30:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3654489</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=19020007&amp;w=600"/>
      <dc:creator>Faisal Khatri</dc:creator>
    </item>
    <item>
      <title>How to Test a PATCH API Request With REST-Assured Java</title>
      <link>https://dzone.com/articles/test-patch-api-rest-assured-java</link>
      <description><![CDATA[<p name="d2ab">Testing is an essential step in the API development process to ensure that APIs are working correctly. There are multiple HTTP methods in RESTful APIs, including POST, GET, PUT, PATCH, and DELETE. In our earlier articles, we learned how to perform automated testing of <a data-href="https://medium.com/javarevisited/how-to-test-post-requests-with-rest-assured-java-for-api-testing-part-ii-30dfe04a533a" href="https://dzone.com/articles/rest-assured-java-test-post-requests-part-ii" rel="noopener noreferrer" target="_blank">POST</a>, <a data-href="https://medium.com/@iamfaisalkhatri/how-to-test-put-api-request-using-rest-assured-java-da58fa361217" href="https://dzone.com/articles/test-put-api-rest-assured-java" rel="noopener noreferrer" target="_blank">PUT</a>, and <a data-href="https://medium.com/javarevisited/how-to-test-a-get-api-request-using-rest-assured-java-90c75eaccdd0" href="https://dzone.com/articles/test-get-api-rest-assured-java" rel="noopener noreferrer" target="_blank">GET</a> APIs using Rest-Assured Java.</p>
<p name="18d6">In this tutorial article, we will discuss and cover the following points:</p>]]></description>
      <pubDate>Wed, 13 May 2026 13:30:06 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3654488</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=19016688&amp;w=600"/>
      <dc:creator>Faisal Khatri</dc:creator>
    </item>
    <item>
      <title>Solving the Mystery: Why Java RSS Grows in Docker on M1 Macs</title>
      <link>https://dzone.com/articles/java-rss-growth-docker-m1</link>
      <description><![CDATA[<h2>The Problem</h2>
<p>You're running a Java application in a Docker container on your M1 Mac. Everything works fine, but you notice something strange: The <a href="https://dzone.com/articles/how-to-decrease-jvm-memory-consumption-in-docker-u">resident set size</a> (RSS) keeps growing, even though your heap usage is stable. After hours of investigation, you find mysterious <code>rwxp</code> memory regions, each exactly 128 MB, accumulating in your process memory map.</p>
<p>What's causing this? Is it a memory leak? A JVM bug? Something else entirely?</p>]]></description>
      <pubDate>Tue, 12 May 2026 19:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3638995</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18977781&amp;w=600"/>
      <dc:creator>Sumeet Sharma</dc:creator>
    </item>
    <item>
      <title>Improving Java Application Reliability with Dynatrace AI Engine</title>
      <link>https://dzone.com/articles/improving-java-application-reliability-with-dyna</link>
      <description><![CDATA[<p>Modern Java applications require <strong>robust observability and automated intelligence</strong> to ensure reliability at scale. Dynatrace’s AI-driven platform continuously learns application behavior, establishes statistical baselines and applies deterministic, causation based analysis to detect anomalies and pinpoint root causes.</p>
<p>By correlating metrics, logs, traces, and topology context across applications, services and infrastructure, <a href="https://dzone.com/articles/opentelemetry-vs-dynatrace">Dynatrace</a> can automatically highlight the true source of problems and assess their impact. This drastically reduces alert noise and <em>MTTR</em> .</p>]]></description>
      <pubDate>Mon, 11 May 2026 12:00:17 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3641540</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18974393&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>How AI Is Rewriting Full-Stack Java Systems: Practical Patterns with Spring Boot, Kafka and WebSockets</title>
      <link>https://dzone.com/articles/how-ai-is-rewriting-full-stack-java-systems-practi</link>
      <description><![CDATA[<p data-end="606" data-start="75">Building real-time applications means balancing user responsiveness with heavy backend processing. A proven solution is to <strong data-end="267" data-start="198">decouple heavy workloads using events and asynchronous processing</strong>. In this approach, a <a href="https://dzone.com/articles/spring-h2-tutorial">Spring Boot application</a> quickly publishes events to Kafka instead of processing requests inline. Then <strong data-end="410" data-start="391">Kafka consumers</strong> (with AI/ML logic) handle the data in the background, and the results are <strong data-end="534" data-start="485">pushed to clients in real time via WebSockets</strong>. This article highlights three key patterns enabling this architecture:</p>
<ol>
 <li data-end="660" data-start="611"><strong data-end="658" data-start="611">Event Production with Spring Boot and Kafka</strong></li>
 <li data-end="709" data-start="664"><strong data-end="707" data-start="664">AI-Driven Processing in Kafka Consumers</strong></li>
 <li data-end="761" data-start="713"><strong data-end="761" data-start="713">Real-Time WebSocket Delivery to the Frontend</strong></li>
</ol>
<h2 data-end="809" data-start="763">Event Production with Spring Boot and Kafka</h2>
<p data-end="1110" data-start="811">The first step is capturing an event and publishing it to Kafka. By offloading work to Kafka the application can respond immediately to the user without waiting for processing. Spring Boot’s integration with Apache Kafka provides a <code data-end="1082" data-start="1067">KafkaTemplate</code> to send messages to topics.</p>]]></description>
      <pubDate>Fri, 08 May 2026 14:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3640373</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18972871&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>How to Test PUT API Request Using REST-Assured Java</title>
      <link>https://dzone.com/articles/test-put-api-rest-assured-java</link>
      <description><![CDATA[<p data-selectable-paragraph="">PUT requests are typically used for updating an existing resource. This means replacing the current data for the target resource with the data sent in the API request body.</p>
<p data-selectable-paragraph="">Just like POST requests, the content-type header is important because it tells the server how to interpret the data we’re sending.</p>]]></description>
      <pubDate>Thu, 07 May 2026 14:30:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3653332</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=19009785&amp;w=600"/>
      <dc:creator>Faisal Khatri</dc:creator>
    </item>
    <item>
      <title>Comparing Top Gen AI Frameworks for Java in 2026</title>
      <link>https://dzone.com/articles/top-genai-java-frameworks</link>
      <description><![CDATA[<p>Java has always been a serious language for production systems, and in 2026, the Generative AI ecosystem has finally caught up. For years, Java developers watched from the sidelines as Python and TypeScript accumulated framework after framework for building LLM-powered applications. Today, the picture is very different. Java has multiple mature, actively maintained AI frameworks, each with its own philosophy and trade-offs.</p>
<p>This article covers the four frameworks I have personally used to ship Java AI applications: <strong>Genkit Java</strong>, <strong>Spring AI</strong>, <strong>LangChain4j</strong>, and <strong>Google ADK Java</strong>. Each one represents a meaningfully different bet on what a Java AI framework should be, and understanding those differences will save you from picking the wrong tool.</p>]]></description>
      <pubDate>Thu, 07 May 2026 12:30:01 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3653228</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=19012055&amp;w=600"/>
      <dc:creator>Xavier Portilla Edo</dc:creator>
    </item>
    <item>
      <title>Java ProcessBuilder: Deadlocks, Zombies, and the 64 KB Wall</title>
      <link>https://dzone.com/articles/java-processbuilder-deadlocks-zombies</link>
      <description><![CDATA[<p>Recently at IBM Software Labs, I worked on a task that forced me to understand something many Java developers rarely think about — how Java interacts with the operating system.</p>
<p>Most of our daily work happens safely inside the <a href="https://dzone.com/articles/jvm-performance-tuning-for-high-throughput-and-low-latency">JVM</a>. Memory management, threads, and file handling — the JVM abstracts these away nicely.</p>]]></description>
      <pubDate>Thu, 30 Apr 2026 17:00:01 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3642039</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18954948&amp;w=600"/>
      <dc:creator>Haider Kagalwala</dc:creator>
    </item>
    <item>
      <title>Java Backend Development in the Era of Kubernetes and Docker</title>
      <link>https://dzone.com/articles/java-backend-kubernetes-docker</link>
      <description><![CDATA[<p>We moved our monolithic Java application to Kubernetes last year. The promise was scalability and resilience. The reality was a series of silent failures during deployments. Users reported dropped connections every time we pushed a new version. Our monitoring showed zero downtime, but the customer experience told a different story. Requests vanished into the void during rolling updates. We spent weeks chasing network ghosts before finding the root cause. The issue was not the network. It was how our Java application handled termination signals.</p>
<p>In this article, I will share how we adapted our Java backend for container orchestration. I will explain the specific lifecycle issues we encountered. I will detail the configuration changes that solved the dropout problem. This is not a guide on writing Dockerfiles. It is a record of the operational friction we faced when Java met Kubernetes. Building cloud-native Java apps requires more than just packaging a JAR. It requires understanding how the orchestration layer interacts with the JVM.</p>]]></description>
      <pubDate>Tue, 28 Apr 2026 16:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3641690</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18949999&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>Java in a Container: Efficient Development and Deployment With Docker</title>
      <link>https://dzone.com/articles/java-in-containers-docker</link>
      <description><![CDATA[<p>There is a specific kind of frustration reserved for Java developers who have just containerized their application. You spend hours optimizing your Spring Boot microservice, ensuring your logic is sound and that your tests pass. You wrap it in a Docker container, push it to the registry, and deploy. Then the reality sets in. Your image is 800MB, your startup time is 40 seconds, and during load testing, the container is killed silently by the OS.</p>
<p>In my recent work, migrating a monolithic Java application to a microservices architecture, we faced this exact triad of issues. We were treating <a href="https://dzone.com/articles/getting-started-with-docker-5-easy-steps">Docker containers</a> like lightweight virtual machines and ignoring the nuances of how the JVM interacts with container boundaries. The result was bloated infrastructure costs, slow CI/CD pipelines, and unstable production pods.</p>]]></description>
      <pubDate>Tue, 28 Apr 2026 14:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3641716</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18949979&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>Preventing Prompt Injection by Design: A Structural Approach in Java</title>
      <link>https://dzone.com/articles/preventing-prompt-injection-structural-java</link>
      <description><![CDATA[<h2>The Problem With How We're Sending Data to AI Models</h2>
<p>Most Java applications that integrate with AI models do something like this:</p>
<div class="codeMirror-wrapper" contenteditable="false">
 <div contenteditable="false">
  <div class="codeHeader">
   <div class="nameLanguage">
    Java
   </div><i class="icon-cancel-circled-1 cm-remove">&nbsp;</i>
  </div>
  <div class="codeMirror-code--wrapper" data-code="String userInput = request.getParameter(&quot;topic&quot;);
String prompt = &quot;Summarize the following topic for a financial analyst: &quot; + userInput;" data-lang="text/x-java">
   <pre><code lang="text/x-java">String userInput = request.getParameter("topic");
String prompt = "Summarize the following topic for a financial analyst: " + userInput;</code></pre>
  </div>
 </div>
</div>
<p><br></p>]]></description>
      <pubDate>Fri, 24 Apr 2026 20:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3641961</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18944840&amp;w=600"/>
      <dc:creator>suman Baatth</dc:creator>
    </item>
    <item>
      <title>The Invisible OOMKill: Why Your Java Pod Keeps Restarting in Kubernetes</title>
      <link>https://dzone.com/articles/java-pod-oomkill-kubernetes</link>
      <description><![CDATA[<p><span>Imagine deploying a robust Spring Boot microservice that passes every integration test in your local Docker environment, only to watch it crash loop endlessly shortly after launching to your Kubernetes production cluster. Everything ran fine on your laptop, but in the live environment, your pods start terminating en masse. Requests to your critical endpoints begin failing with 503 errors. Panic sets in as your service, the backbone of your transaction pipeline, is effectively brought down by an invisible foe.</span></p>
<p><span>In our recent migration to a cloud-native architecture, the culprit was a hidden memory configuration issue involving how the&nbsp;</span><a href="https://dzone.com/articles/mastering-the-jvm-elevating-java-development"><span>Java Virtual Machine</span></a><span>&nbsp;interacts with Kubernetes container limits. A tiny mismatch in resource allocation, something that went unnoticed during development, led to a chain reaction of OOMKilled events in production.</span></p>]]></description>
      <pubDate>Wed, 22 Apr 2026 14:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3641717</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18941889&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>From APIs to Event-Driven Systems: Modern Java Backend Design</title>
      <link>https://dzone.com/articles/apis-to-event-driven-java-backend</link>
      <description><![CDATA[<p>The outage happened during our biggest sales event of the year. Our order processing system ground to a halt. Customers could add items to their carts, but checkout failed repeatedly. The engineering team scrambled to check the logs. We found a chain of synchronous REST API calls that had collapsed under load. Service A called Service B, which called Service C. When Service C slowed down due to database locks, the latency rippled back up the chain. Service A timed out. Service B timed out. The entire order pipeline froze. We were losing revenue by the minute. This incident forced us to rethink our architecture. We realized that synchronous APIs were not suitable for every interaction. We needed to decouple our services. We needed an event-driven system.</p>
<p>In this article, I will share how we migrated from a tightly coupled API architecture to an event-driven design using Java and Kafka. I will explain the specific challenges we faced during the transition. I will detail the code changes required to handle asynchronous communication. This is not a theoretical discussion about microservices. It is a record of the practical steps we took to stabilize our platform. Building resilient backend systems requires more than just choosing the right tools. It requires understanding the trade-offs between consistency and availability.</p>]]></description>
      <pubDate>Mon, 20 Apr 2026 17:00:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3641689</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18941201&amp;w=600"/>
      <dc:creator>Ramya vani Rayala</dc:creator>
    </item>
    <item>
      <title>Jakarta EE Glossary: The Terms Every Java Engineer Should Actually Understand</title>
      <link>https://dzone.com/articles/jakarta-ee-glossary</link>
      <description><![CDATA[<p>Most developers don’t have a problem writing code. They have a problem understanding the platform they are building on.</p>
<p>And that difference shows up later — in architectural decisions, debugging complexity, vendor lock-in, and, ultimately, career growth.</p>]]></description>
      <pubDate>Mon, 20 Apr 2026 15:30:00 GMT</pubDate>
      <guid isPermaLink="false">https://dzone.com/articles/3652358</guid>
      <media:thumbnail url="https://dz2cdn1.dzone.com/thumbnail?fid=18990276&amp;w=600"/>
      <dc:creator>Otavio Santana</dc:creator>
    </item>
  </channel>
</rss>
