<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vincent Vauban on foojay.io - Friends of OpenJDK</title><link>https://foojayio.github.io/website/today/author/vincent-vauban/</link><description>Articles written by Vincent Vauban on foojay.io - Friends of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sat, 11 Jul 2026 00:34:03 +0000</lastBuildDate><atom:link href="https://foojayio.github.io/website/today/author/vincent-vauban/index.xml" rel="self" type="application/rss+xml"/><item><title>🛑⚡ When NOT TO USE Event-Driven Architecture (EDA)</title><link>https://foojayio.github.io/website/today/when-not-to-use-event-driven-architecture-eda/</link><pubDate>Sat, 11 Jul 2026 00:34:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/when-not-to-use-event-driven-architecture-eda/</guid><description>&lt;h2 id="h2-0-when-event-driven-architecture-is-not-the-right-choice"&gt;When Event-Driven Architecture Is Not the Right Choice&lt;/h2&gt;
&lt;p&gt;Event-Driven Architecture (EDA) can help teams build scalable, loosely coupled and highly responsive distributed systems. Technologies such as Apache Kafka, RabbitMQ, Pulsar and cloud messaging platforms have made this architectural style increasingly popular.&lt;/p&gt;
&lt;p&gt;However, EDA also introduces significant complexity. Asynchronous communication requires teams to manage retries, duplicate events, eventual consistency, schema evolution, observability and failure recovery. When these challenges are introduced without a clear business or technical need, an event-driven system can become harder to develop, operate and debug than a simpler synchronous architecture.&lt;/p&gt;</description></item><item><title>Ask a Lille Dev</title><link>https://foojayio.github.io/website/today/ask-a-lille-dev-what-java-developers-really-think-about-quality-frameworks-communities-and-careers/</link><pubDate>Tue, 16 Jun 2026 00:35:19 +0000</pubDate><guid>https://foojayio.github.io/website/today/ask-a-lille-dev-what-java-developers-really-think-about-quality-frameworks-communities-and-careers/</guid><description>&lt;p&gt;During the DevLille 2026 conference in Lille, I interviewed several Java developers and tech professionals with one simple goal: collecting authentic and spontaneous insights from the Java ecosystem. ☕🎤&lt;/p&gt;
&lt;p&gt;The result became &lt;strong&gt;&amp;ldquo;Ask a Lille Dev&amp;rdquo;&lt;/strong&gt;, a mini podcast made of short interviews recorded directly during the conference. Instead of long talks or polished marketing speeches, the idea was simple: ask practical questions to people working in tech every day.&lt;/p&gt;</description></item><item><title>💪😤 THE 12 LABOURS OF PRIMEFACES 15.0.15 #release</title><link>https://foojayio.github.io/website/today/the-12-labours-of-primefaces-15-0-15-release/</link><pubDate>Sun, 10 May 2026 08:15:26 +0000</pubDate><guid>https://foojayio.github.io/website/today/the-12-labours-of-primefaces-15-0-15-release/</guid><description>&lt;br /&gt;
&lt;img fetchpriority="high" decoding="async" class="size-medium wp-image-123733" src="toge-herculer-700x394.png" alt="💪😤 THE 12 LABOURS OF PRIMEFACES 15.0.15 #release" width="700" height="394"&gt;
&lt;br /&gt;
&lt;p&gt;💪😤 THE 12 LABOURS OF PRIMEFACES 15.0.15 #release&lt;/p&gt;
&lt;br /&gt;
&lt;h3 id="h3-0-primefaces-15-0-15-has-just-been-released"&gt;PrimeFaces 15.0.15 has just been released. 🚀&lt;/h3&gt;
&lt;p&gt;And no, this is not &amp;ldquo;React for Java&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;PrimeFaces is a component library for JSF / Jakarta Faces.&lt;/p&gt;
&lt;p&gt;Its goal is simple:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;build server-side Java web applications with rich UI components without writing everything manually in HTML, CSS and JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This release is mostly about polish:&lt;/p&gt;</description></item><item><title>No Keys, No LLM: Building a Wikidata Definition API with Embabel</title><link>https://foojayio.github.io/website/today/embabel-spring-boot-wikidata-definition-api/</link><pubDate>Thu, 05 Mar 2026 08:00:25 +0000</pubDate><guid>https://foojayio.github.io/website/today/embabel-spring-boot-wikidata-definition-api/</guid><description>&lt;h2 id="h2-0-tl-dr"&gt;TL;DR&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;I built a &lt;strong&gt;Spring Boot 4&lt;/strong&gt; API that defines terms via &lt;strong&gt;Wikidata&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The app is fully reproducible: &lt;strong&gt;no API keys&lt;/strong&gt; and &lt;strong&gt;no model installation&lt;/strong&gt; needed.&lt;/li&gt;
&lt;li&gt;Embabel orchestrates the pipeline as a sequence of actions to achieve the goal &lt;code&gt;DefinitionResult&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The logs show planning, execution, and typed object binding&amp;mdash;the most useful part for teaching agentic flows.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/TiuYS6K3HaU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;p&gt;I wanted a demo that is &lt;strong&gt;simple&lt;/strong&gt; , &lt;strong&gt;reproducible&lt;/strong&gt; , and still &lt;strong&gt;shows agentic orchestration&lt;/strong&gt; in a way that&amp;rsquo;s easy to explain on video.&lt;/p&gt;</description></item><item><title>Micrometer &amp; Prometheus in Spring Boot: Kafka Burger Orders</title><link>https://foojayio.github.io/website/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</link><pubDate>Fri, 14 Nov 2025 10:13:03 +0000</pubDate><guid>https://foojayio.github.io/website/today/micrometer-prometheus-in-spring-boot-kafka-burger-orders/</guid><description>&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/eSreg0xPGqo?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;p&gt;👨‍💻 GitHub: &lt;a href="https://github.com/vinny59200/dukeburger" target="_blank" rel="noopener noreferrer"&gt;https://github.com/vinny59200/dukeburger&lt;/a&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪⚪&lt;/p&gt;
&lt;p&gt;This guide shows how to use &lt;strong&gt;Micrometer and Prometheus in Spring Boot&lt;/strong&gt; to track a custom metric for a Kafka-driven Burger Orders app. You&amp;rsquo;ll post a burger order to a REST endpoint, publish it to Kafka, consume the topic, and increment a counter for all &amp;ldquo;DukeBurger&amp;rdquo; orders. Copy the snippets, run, and you&amp;rsquo;ll see your metric on &lt;code&gt;/actuator/prometheus&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Monolith vs Microservices in 2025</title><link>https://foojayio.github.io/website/today/monolith-vs-microservices-2025/</link><pubDate>Mon, 04 Aug 2025 13:45:09 +0000</pubDate><guid>https://foojayio.github.io/website/today/monolith-vs-microservices-2025/</guid><description>&lt;p&gt;In recent years, the tech world has been buzzing with debates about architecture choices. However, 2025 offers a more balanced perspective.&lt;/p&gt;
&lt;p&gt;Simplicity, developer experience, and maintainability are reshaping how teams design software.&lt;/p&gt;
&lt;p&gt;From Infrastructure as Code (IaC) to &amp;ldquo;vibecoding&amp;rdquo; culture, and from startups to enterprises, many rethink their position on the monolith vs microservices 2025 spectrum.&lt;/p&gt;
&lt;p&gt;So, what has actually changed?&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;🔵⚪⚪⚪⚪⚪&lt;/p&gt;
&lt;h2 id="h2-0-terraform-and-iac-changing-architecture-with-confidence"&gt;🔁 Terraform and IaC: Changing Architecture with Confidence&lt;/h2&gt;
&lt;h3 id="h3-1-how-infrastructure-as-code-helps-teams-adapt-architecture-efficiently"&gt;How Infrastructure as Code helps teams adapt architecture efficiently&lt;/h3&gt;
&lt;p&gt;Infrastructure as Code tools like Terraform make architecture changes easier. Nevertheless, the process is not effortless.&lt;/p&gt;</description></item><item><title>Spring Boot documentation with Redocusaurus</title><link>https://foojayio.github.io/website/today/spring-boot-api-documentation-redocusaurus/</link><pubDate>Wed, 16 Jul 2025 06:45:38 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-api-documentation-redocusaurus/</guid><description>&lt;h4 id="create-clear-and-interactive-api-documentation-quickly"&gt;&lt;em&gt;Create clear and interactive API documentation quickly.&lt;/em&gt;&lt;/h4&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/fs6wiUqJGo8?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;hr&gt;
&lt;h4 id="heading"&gt;🔵⚪⚪⚪⚪⚪⚪⚪&lt;/h4&gt;
&lt;h3 id="h3-0-introduction-why-use-redocusaurus-for-spring-boot"&gt;📘 Introduction: Why Use Redocusaurus for Spring Boot?&lt;/h3&gt;
&lt;h4 id="discover-why-clean-api-docs-matter-and-how-redocusaurus-makes-it-easy"&gt;&lt;em&gt;Discover why clean API docs matter and how Redocusaurus makes it easy.&lt;/em&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Firstly&lt;/strong&gt;, clear API documentation is very important.&lt;/p&gt;
&lt;p&gt;It helps users understand your API better. This is true whether your API is for coworkers or external users.&lt;/p&gt;</description></item><item><title>SpringBoot and Kafka Streams – Event Routing &amp; Testing</title><link>https://foojayio.github.io/website/today/spring-boot-kafka-streams-event-routing-testing/</link><pubDate>Thu, 19 Jun 2025 08:37:11 +0000</pubDate><guid>https://foojayio.github.io/website/today/spring-boot-kafka-streams-event-routing-testing/</guid><description>&lt;p&gt;Welcome to this hands-on guide to building a Spring Boot Kafka Streams application! (SpringBoot and Kafka Streams).&lt;/p&gt;
&lt;p&gt;In this article, I&amp;rsquo;ll walk you through a project I built during the first day of a three-day Kafka Streams training. The goal? Validate sightseeing events in Lille based on predefined timetables and route the data accordingly.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s explore how Kafka Streams powers a real-time city tour experience! 🧭&lt;/p&gt;
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;
			&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/s07d3SmoBMI?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"&gt;&lt;/iframe&gt;
		&lt;/div&gt;

&lt;br /&gt;
&lt;hr&gt;
&lt;p&gt;🔵⚪⚪⚪⚪⚪⚪⚪⚪⚪&lt;/p&gt;</description></item><item><title>Speed up your Spring Batch with Native Image and GraalVM</title><link>https://foojayio.github.io/website/today/speed-up-your-spring-batch-with-native-image-and-graalvm/</link><pubDate>Tue, 10 Dec 2024 15:47:53 +0000</pubDate><guid>https://foojayio.github.io/website/today/speed-up-your-spring-batch-with-native-image-and-graalvm/</guid><description>&lt;p&gt;&lt;strong&gt;Spring Batch is often used for&lt;/strong&gt; data processing &lt;strong&gt;jobs that don&amp;rsquo;t run continuously.&lt;/strong&gt; Instead, they start, process, and stop,&lt;strong&gt;which makes them a perfect candidate for GraalVM Native Image.&lt;/strong&gt; Unlike traditional Java applications that require a long JVM startup time, Native Images execute almost instantly, giving a significant performance boost.&lt;/p&gt;
&lt;p&gt;In this article, you&amp;rsquo;ll learn how to build a Spring Batch application that reads a CSV file, logs its content, and writes it to a PostgreSQL database.&lt;strong&gt;We&amp;rsquo;ll see how to compile it into a Native Image using GraalVM&lt;/strong&gt; , and most importantly**, we&amp;rsquo;ll benchmark the difference between** running it as &lt;strong&gt;a traditional JAR and&lt;/strong&gt; as &lt;strong&gt;a native binary&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Prevent LDAP injection in #java 💥💉with #springboot</title><link>https://foojayio.github.io/website/today/prevent-ldap-injection-in-java-with-springboot/</link><pubDate>Wed, 04 Dec 2024 14:45:35 +0000</pubDate><guid>https://foojayio.github.io/website/today/prevent-ldap-injection-in-java-with-springboot/</guid><description>&lt;p&gt;&lt;strong&gt;LDAP (Lightweight Directory Access Protocol)&lt;/strong&gt; is essential for managing and accessing directory information in Java web applications. However, it&amp;rsquo;s crucial to understand and prevent &lt;strong&gt;LDAP Injection&lt;/strong&gt;, a serious security vulnerability that can lead to unauthorized access and data breaches.&lt;/p&gt;
&lt;p&gt;Following &lt;strong&gt;OWASP Recommendations&lt;/strong&gt; , such as validating user inputs and using parameterized queries, is vital for securing your applications. In this article, we&amp;rsquo;ll dive into LDAP, explore LDAP Injection, share OWASP&amp;rsquo;s best practices, and demonstrate secure coding in &lt;strong&gt;Spring Boot&lt;/strong&gt;.&lt;/p&gt;</description></item></channel></rss>