<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Otavio Santana on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/otavio-santana/</link><description>Articles written by Otavio Santana on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 02 Jul 2026 10:00:00 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/otavio-santana/index.xml" rel="self" type="application/rss+xml"/><item><title>Building AI Systems with MongoDB: Implementing the Planning Pattern</title><link>https://foojayio.github.io/website/today/building-ai-systems-with-mongodb-implementing-the-planning-pattern/</link><pubDate>Thu, 02 Jul 2026 10:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/building-ai-systems-with-mongodb-implementing-the-planning-pattern/</guid><description>&lt;p&gt;Artificial Intelligence has swiftly evolved from a niche research topic to a technology that impacts nearly every aspect of the software industry. Developers now use AI to generate code, review pull requests, create documentation, and accelerate workflows through methods like vibe coding and specification-driven development. While these applications position AI as an engineering tool, a new trend is emerging: integrating AI directly into business workflows within applications.&lt;/p&gt;
&lt;p&gt;This shift offers new challenges for software architects and engineers. Traditional applications rely on deterministic flows, where execution paths are explicitly defined by methods, conditions, loops, and business rules. In contrast, machine learning systems can make decisions during execution, select actions, and adjust dynamically based on context and available information. Architects must therefore design systems that balance the predictability of conventional software with the flexibility of AI-powered reasoning. The Planning Pattern is an effective approach for uniting these domains. Instead of having an LLM address a complex objective in a single step, this pattern breaks the goal into smaller, feasible tasks that interact with deterministic code, external services, and data sources. This creates a more reliable and observable path toward autonomous AI applications.&lt;/p&gt;</description></item><item><title>Introduction to CQRS using MongoDB</title><link>https://foojayio.github.io/website/today/introduction-to-cqrs-using-mongodb/</link><pubDate>Tue, 09 Jun 2026 10:00:00 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-cqrs-using-mongodb/</guid><description>&lt;p&gt;In enterprise environments, projects often begin with a simple structure: one model, one service, and one document, using a single class and data transfer object for both read and write operations. While this unified approach works at first, it becomes problematic as requirements grow. Operations become more complex, requiring additional validations, rules, and constraints. Over time, read operations may demand different formats, such as aggregations, summaries, or custom views. Relying on a single model for both reading and writing leads to maintenance challenges and inefficient queries. This approach can result in returning unnecessary data or omitting required information, violating the single responsibility principle and making the design less effective.&lt;/p&gt;</description></item><item><title>Introduction to Behavior Driving Development with Java and MongoDB</title><link>https://foojayio.github.io/website/today/introduction-to-behavior-driving-development-with-java-and-mongodb/</link><pubDate>Tue, 27 Jan 2026 16:35:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-behavior-driving-development-with-java-and-mongodb/</guid><description>&lt;p&gt;When we face software development, the biggest mistake is about delivering what the client wants. It sounds like a cliché, but after decades, we are still facing this problem. One good way to solve it is to start the test focusing on what the business needs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Behavior-driven development&lt;/strong&gt; (BDD) is a software development methodology where the focus is on behavior and the domain terminology or ubiquitous language. It utilizes a shared, natural language to define and test software behaviors from the user&amp;rsquo;s perspective. BDD builds upon test-driven development (TDD) by focusing on scenarios that are relevant to the business. These scenarios are written as plain-language specifications that can be automated as tests, simultaneously serving as living documentation.&lt;/p&gt;</description></item><item><title>Introduction to Data-Driven Testing with Java and MongoDB</title><link>https://foojayio.github.io/website/today/introduction-to-data-driven-testing-with-java-and-mongodb/</link><pubDate>Thu, 25 Sep 2025 13:53:57 +0000</pubDate><guid>https://foojayio.github.io/website/today/introduction-to-data-driven-testing-with-java-and-mongodb/</guid><description>&lt;p&gt;As applications expand, the complexity of the rules they enforce also increases. In many systems, these rules are embedded within the data, primarily in database queries that filter, join, or compute based on real-world conditions. However, the tests for these queries are often shallow, repetitive, or, worse yet, completely absent. When there is an error in the database logic, the application may still compile successfully, but the business can suffer significant consequences.&lt;/p&gt;</description></item><item><title>Java Virtual Threads in Action: Optimizing MongoDB Operation</title><link>https://foojayio.github.io/website/today/java-virtual-threads-in-action-optimizing-mongodb-operation/</link><pubDate>Tue, 01 Jul 2025 08:12:24 +0000</pubDate><guid>https://foojayio.github.io/website/today/java-virtual-threads-in-action-optimizing-mongodb-operation/</guid><description>&lt;p&gt;Virtual threads have become one of the most popular resources in Java and are trending inside the language. Indeed, this resource introduced a cheap way to create threads inside the JVM. In this tutorial, we will explain how to use it with MongoDB.&lt;/p&gt;
&lt;p&gt;You can find all the code presented in this tutorial in the &lt;a href="https://github.com/soujava/mongodb-virtual-threads" target="_blank" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
:&lt;/p&gt;
&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group=""&gt;git clone &lt;a href="https://foojayio.github.io/website/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="fe99978abe99978a968b9cd09d9193"&gt;[email&amp;nbsp;protected]&lt;/a&gt;:soujava/mongodb-virtual-threads.git
&lt;/pre&gt;
&lt;h2 id="h2-0-prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;For this tutorial, you&amp;rsquo;ll need:&lt;/p&gt;</description></item></channel></rss>