<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog of Vincent VAUBAN</title>
    <description>Vincent VAUBAN's blog: github | coding | freebies | book | video | mashup | angular | quote | self-promo | java | mooc | workplace | anglican | team</description>
    <link>https://blog.vvauban.com/</link>
    <atom:link href="https://blog.vvauban.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>🧭☕ ASK VINCENT: HOW TO GROW AS A JAVA ENGINEER FOR INTERNATIONAL MARKETS</title>
      <pubDate>Mon, 25 May 2026 16:58:09 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/ask-vincent-how-to-grow-as-a-java-engineer-for-international-markets</link>
      <guid>https://blog.vvauban.com/blog/ask-vincent-how-to-grow-as-a-java-engineer-for-international-markets</guid>
      <description>&lt;p&gt;A Java backend/full-stack developer recently asked me a very good question:&lt;/p&gt;&lt;p class=" undefined"&gt;“How can I improve technically and become strong enough to work remotely or internationally for the European or U.S. market?”&lt;/p&gt;&lt;p class=" undefined"&gt;Here is my honest answer. 👇&lt;/p&gt;&lt;p&gt;🔸 TL;DR&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Master Java + Spring Boot, but don’t ignore Jakarta EE. &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Then expand toward frontend, cloud-native, Kafka, Kubernetes, and AI-assisted engineering. &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ A strong developer writes code. A remarkable engineer also shares, communicates, teaches, mentors, and builds trust. &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ For Europe or the U.S., English, visibility, network, and consistency matter a lot.&lt;/p&gt;&lt;p&gt;🔸 1. FOCUS FIRST ON A SOLID JAVA BACKEND FOUNDATION&lt;/p&gt;&lt;p class=" undefined"&gt;As I position myself as an Oracle ACE and vExpert, my advice is simple:&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Go deep on Java ☕ &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Become very comfortable with Spring Boot 🌱 &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Also learn Jakarta EE, because it is still very relevant in enterprise environments 🏢&lt;/p&gt;&lt;p class=" undefined"&gt;Once this first step is reached at a good enough level, choose your expansion path:&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Either go toward frontend: React, Vite, Angular, TypeScript &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Or go toward platform/backend depth: Kubernetes, Kafka, cloud-native architecture&lt;/p&gt;&lt;p class=" undefined"&gt;And all along this path, get acquainted with AI.&lt;/p&gt;&lt;p class=" undefined"&gt;Not to replace your skills.&lt;/p&gt;&lt;p class=" undefined"&gt;But to amplify them. &lt;/p&gt;&lt;p class=" undefined"&gt;The direction I like to call it is:&lt;/p&gt;&lt;p class=" undefined"&gt;Java Fullstack = Back + Front + Ops + Stream + AI-assisted engineering&lt;/p&gt;&lt;p&gt;🔸 2. WHAT SEPARATES A GOOD JAVA DEVELOPER FROM A WORLD-CLASS ENGINEER?&lt;/p&gt;&lt;p class=" undefined"&gt;A good Java developer can deliver value in their daily role.&lt;/p&gt;&lt;p class=" undefined"&gt;But a developer who...&lt;a href=https://blog.vvauban.com/blog/ask-vincent-how-to-grow-as-a-java-engineer-for-international-markets&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>🖥️🌱 SPRING SHELL: WHEN YOUR SPRING BOOT APP NEEDS A TERMINAL</title>
      <pubDate>Mon, 25 May 2026 16:52:36 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/spring-shell-when-your-spring-boot-app-needs-a-terminal</link>
      <guid>https://blog.vvauban.com/blog/spring-shell-when-your-spring-boot-app-needs-a-terminal</guid>
      <description>&lt;p&gt;🔸 TL;DR&lt;/p&gt;&lt;p class=" undefined"&gt;Spring Shell lets you build interactive CLI / REPL applications with the Spring programming model.&lt;/p&gt;&lt;p class=" undefined"&gt;Not every internal tool needs a REST API. Not every admin task needs a web UI. Sometimes, a clean terminal command is enough. ⚡&lt;/p&gt;&lt;p class=" undefined"&gt;Spring Shell gives you:&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Commands &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Arguments and options &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Tab completion &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Help output &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Input reading &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Spring beans, DI, config, validation &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Interactive and non-interactive execution&lt;/p&gt;&lt;p class=" undefined"&gt;Basically: Spring Boot, but for terminal-first tools.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;a href="https://docs.spring.io/spring-shell/reference/index.html" data-type="undefined" target="_blank"&gt;https://docs.spring.io/spring-shell/reference/index.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 1. CREATE A SIMPLE COMMAND&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;Run it:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This is the Spring Shell sweet spot: expose business or operational logic as a simple command instead of creating a web endpoint just to trigger it.&lt;/p&gt;&lt;p&gt;🔸 2. GROUP COMMANDS LIKE A REAL CLI&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;Run it:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This makes your CLI discoverable.&lt;/p&gt;&lt;p class=" style="&gt;Instead of a flat list of random commands, you can organize features around business domains:&lt;/p&gt;&lt;p class=" style="&gt;▪️ user create &lt;/p&gt;&lt;p class=" style="&gt;▪️ user disable &lt;/p&gt;&lt;p class=" style="&gt;▪️ batch run &lt;/p&gt;&lt;p class=" style="&gt;▪️ report export &lt;/p&gt;&lt;p class=" style="&gt;▪️ cache clear&lt;/p&gt;&lt;p class=" style="&gt;Very close to how developers already think with tools like git, kubectl, or docker. 🧠&lt;/p&gt;&lt;p&gt;🔸 3. ASK FOR INPUT INSIDE A COMMAND&lt;/p&gt;&lt;p&gt;This is useful when a command needs an interactive flow:&lt;/p&gt;&lt;p class=" style="&gt;▪️ ask for a value &lt;/p&gt;&lt;p class=" style="&gt;▪️ hide a password &lt;/p&gt;&lt;p class="...&lt;a href=https://blog.vvauban.com/blog/spring-shell-when-your-spring-boot-app-needs-a-terminal&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>🧩🔄 EVENTUAL CONSISTENCY: WHEN YOUR SYSTEM IS NOT WRONG, JUST NOT SYNCHRONIZED YET</title>
      <pubDate>Mon, 25 May 2026 16:45:42 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/eventual-consistency-when-your-system-is-not-wrong-just-not-synchronized</link>
      <guid>https://blog.vvauban.com/blog/eventual-consistency-when-your-system-is-not-wrong-just-not-synchronized</guid>
      <description>&lt;p&gt;🔸 TL;DR&lt;/p&gt;&lt;p class=" undefined"&gt;Eventual consistency means your distributed system may be temporarily out of sync… but it is designed to converge toward a coherent state. ✅&lt;/p&gt;&lt;p class=" undefined"&gt;In modern Java applications, this often happens when you use events, queues, projections, caches, or read models.&lt;/p&gt;&lt;p class=" undefined"&gt;The trap? Thinking “not immediately consistent” means “broken.” Sometimes, it just means “asynchronous by design.” ⚙️&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 WHAT DOES EVENTUAL CONSISTENCY MEAN?&lt;/span&gt;&lt;/p&gt;&lt;h3 class=" ember-view reader-text-block__heading-3" style="text-align: start; font-size: 20px;"&gt;&lt;span style="color: #000000;"&gt;In a monolith, you often expect this:&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;Everything happens in one flow.&lt;/span&gt;&lt;/p&gt;&lt;h3 class=" ember-view reader-text-block__heading-3" style="text-align: start; font-size: 20px;"&gt;&lt;span style="color: #000000;"&gt;But in distributed systems, we often do this instead:&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;Then other parts of the system react later:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The system is temporarily incomplete.&lt;/p&gt;&lt;p class=" style="&gt;But after all events are processed, the global state becomes coherent again. 🔄&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 EXAMPLE 1: THE ORDER IS CREATED FIRST&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The order exists immediately. But the invoice, stock reservation, email notification, or analytics update may arrive later.&lt;/p&gt;&lt;p class=" style="&gt;That is not necessarily a bug. That is an architectural choice.&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 EXAMPLE 2: THE READ MODEL IS UPDATED LATER&lt;/span&gt;&lt;span style="color: #ffffff;"&gt;@Componen&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Your write model may already know the order exists. Your read model may not know it yet.&lt;/p&gt;&lt;p class=" style="&gt;For a short time, the UI might say:&lt;/p&gt;&lt;p&gt;That can be acceptable… if the user experience explains it properly.&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 EXAMPLE 3: MAKE EVENT HANDLING IDEMPOTENT&lt;/span&gt;&lt;/p&gt;&lt;p&gt;With eventual consistency,...&lt;a href=https://blog.vvauban.com/blog/eventual-consistency-when-your-system-is-not-wrong-just-not-synchronized&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>🧩⚙️ FLOWLOGIX EE COMPONENTS: JAKARTA EE HELPERS THAT REMOVE BORING BOILERPLATE</title>
      <pubDate>Mon, 25 May 2026 16:38:35 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/flowlogix-ee-components-jakarta-ee-helpers-that-remove-boring-boilerplate</link>
      <guid>https://blog.vvauban.com/blog/flowlogix-ee-components-jakarta-ee-helpers-that-remove-boring-boilerplate</guid>
      <description>&lt;p&gt;🔸 TL;DR&lt;/p&gt;&lt;p class=" undefined"&gt;FlowLogix EE Components is not “yet another framework”.&lt;/p&gt;&lt;p class=" undefined"&gt;It is a small utility layer for Jakarta EE apps that helps with:&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ PrimeFaces lazy DataTables &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ JPA finder logic &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ CDI-friendly plumbing &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Less repetitive enterprise code&lt;/p&gt;&lt;p class=" undefined"&gt;Basically: less ceremony, more useful code. 😄&lt;/p&gt;&lt;p&gt;&lt;a href="https://github.com/flowlogix/flowlogix" data-type="undefined" target="_blank"&gt;https://github.com/flowlogix/flowlogix&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 1. JPA FINDER WITHOUT A GIANT BASE DAO&lt;/span&gt;&lt;/p&gt;&lt;p&gt;You get reusable JPA finder behavior without forcing every DAO to extend a massive abstract class.&lt;/p&gt;&lt;p class=" style="&gt;That is very Jakarta EE-friendly:&lt;/p&gt;&lt;p class=" style="&gt;▪️ composition &lt;/p&gt;&lt;p class=" style="&gt;▪️ CDI injection &lt;/p&gt;&lt;p class=" style="&gt;▪️ less inheritance magic &lt;/p&gt;&lt;p class=" style="&gt;▪️ cleaner DAOs&lt;/p&gt;&lt;p class=" style="&gt;Simple. Useful. Boring in the best possible way. ✅&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 2. COMPOSABLE QUERY LOGIC&lt;/span&gt;&lt;/p&gt;&lt;p&gt;This is where FlowLogix starts to feel practical.&lt;/p&gt;&lt;p class=" style="&gt;Instead of scattering query logic everywhere, you can compose it.&lt;/p&gt;&lt;p class=" style="&gt;The value is not “wow syntax”.&lt;/p&gt;&lt;p class=" style="&gt;The value is:&lt;/p&gt;&lt;p class=" style="&gt;▪️ reusable filters &lt;/p&gt;&lt;p class=" style="&gt;▪️ cleaner query code &lt;/p&gt;&lt;p class=" style="&gt;▪️ less DAO duplication &lt;/p&gt;&lt;p class=" style="&gt;▪️ easier maintenance&lt;/p&gt;&lt;p class=" style="&gt;For enterprise apps, this matters. A lot.&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 3. PRIMEFACES LAZY DATATABLE WITH LESS PAIN&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;And in the JSF page:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;PrimeFaces lazy tables are powerful.&lt;/p&gt;&lt;p class=" style="&gt;But wiring pagination, sorting and filtering manually can quickly become painful.&lt;/p&gt;&lt;p class=" style="&gt;FlowLogix gives you a cleaner integration...&lt;a href=https://blog.vvauban.com/blog/flowlogix-ee-components-jakarta-ee-helpers-that-remove-boring-boilerplate&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>🧩🗄️ how do you fetch a multi-level object graph? JOIN/ MULTISET/ SPLIT/ DEPENDS</title>
      <pubDate>Mon, 25 May 2026 15:42:02 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/how-do-you-fetch-a-multi-level-object-graph-join-multiset-split-depends</link>
      <guid>https://blog.vvauban.com/blog/how-do-you-fetch-a-multi-level-object-graph-join-multiset-split-depends</guid>
      <description>&lt;p&gt;Let’s say you have this kind of model:&lt;/p&gt;&lt;p class=" undefined"&gt;Post -&gt; Comments -&gt; Votes -&gt; Tags&lt;/p&gt;&lt;p class=" undefined"&gt;And now you need to fetch it efficiently.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;What would you choose? 👇&lt;/p&gt;&lt;p class=" undefined"&gt;Poll options:&lt;/p&gt;&lt;p class=" undefined"&gt;1️⃣ One giant JOIN fetch 🧨&lt;/p&gt;&lt;p class=" undefined"&gt;2️⃣ jOOQ MULTISET DTO 🧩&lt;/p&gt;&lt;p class=" undefined"&gt;3️⃣ Split JPA queries 🎯&lt;/p&gt;&lt;p class=" undefined"&gt;4️⃣ It depends 🤷‍♂️&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;🔸 WHAT EACH OPTION MEANS&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ One giant JOIN fetch 🧨&lt;/p&gt;&lt;p class=" undefined"&gt;Everything in one query: posts, comments, votes, tags.&lt;/p&gt;&lt;p class=" undefined"&gt;It looks attractive, but it can create a Cartesian product:&lt;/p&gt;&lt;p class=" undefined"&gt;posts × comments × votes × tags.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ jOOQ MULTISET DTO 🧩&lt;/p&gt;&lt;p class=" undefined"&gt;Instead of flattening everything into duplicated rows, you shape the result as nested DTOs.&lt;/p&gt;&lt;p class=" undefined"&gt;Very interesting for read models and API responses.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Split JPA queries 🎯&lt;/p&gt;&lt;p class=" undefined"&gt;Fetch the root first, then fetch one collection at a time.&lt;/p&gt;&lt;p class=" undefined"&gt;Less magical, but often more predictable with Hibernate/JPA.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ It depends 🤷‍♂️&lt;/p&gt;&lt;p class=" undefined"&gt;Because the right answer depends on the use case: detail page, paginated list, read-only API, collection size, caching, and performance constraints.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;As Martin Fowler said:&lt;/p&gt;&lt;p class=" undefined"&gt;“Any fool can write code that a computer can understand....&lt;a href=https://blog.vvauban.com/blog/how-do-you-fetch-a-multi-level-object-graph-join-multiset-split-depends&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>🚀☕ JAVA 26 &amp; 27: WHAT DEVELOPERS SHOULD REALLY WATCH</title>
      <pubDate>Mon, 25 May 2026 15:39:57 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/java-26-27-what-developers-should-really-watch</link>
      <guid>https://blog.vvauban.com/blog/java-26-27-what-developers-should-really-watch</guid>
      <description>&lt;p&gt;&lt;span style="color: #000000;"&gt;Java 26 and Java 27 are not just “another JDK release cycle”.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph" style="text-align: start; font-size: 16px;"&gt;&lt;span style="color: #000000;  "&gt;They bring a mix of features that impact how we write code, how we run applications, and how we think about long-term platform security.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph" style="text-align: start; font-size: 16px;"&gt;&lt;span style="color: #000000;  "&gt;Some features are directly visible in code.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph" style="text-align: start; font-size: 16px;"&gt;&lt;span style="color: #000000;  "&gt;Some are runtime improvements you may benefit from without changing a single line.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph" style="text-align: start; font-size: 16px;"&gt;&lt;span style="color: #000000;  "&gt;And some are still preview/incubator features, which means: interesting to test, but not something to blindly push into production tomorrow. 😉&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;🔸 TL;DR&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Java 26 brings developer-facing features around HTTP/3, PEM encoding, Structured Concurrency, Lazy Constants, Vector API, and primitive patterns. &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Java 27 continues several previews and adds important runtime/security directions like post-quantum TLS, G1 everywhere, and compact object headers. &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ The big theme is not “Java is changing everything”. &lt;/p&gt;&lt;p class=" undefined"&gt;▪️ The big theme is: Java keeps modernizing carefully, while preserving stability.&lt;/p&gt;&lt;p&gt;🔸 LANGUAGE: PRIMITIVE PATTERNS GET MORE NATURAL&lt;/p&gt;&lt;p class=" undefined"&gt;JEP 530 / JEP 532 improve pattern matching by allowing primitive types in more places&lt;/p&gt;&lt;p class=" undefined"&gt;That means instanceof, switch, and primitive conversions become more expressive and safer.&lt;/p&gt;&lt;p class=" undefined"&gt;Example idea:&lt;/p&gt;&lt;p&gt;The interesting part is not only...&lt;a href=https://blog.vvauban.com/blog/java-26-27-what-developers-should-really-watch&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>LESSON of MULTI-LEVEL Fetch with Java champion Vlad Mihalcea ☕🦸‍♂️</title>
      <pubDate>Mon, 25 May 2026 13:51:13 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/lesson-of-multi-level-fetch-with-java-champion-vlad-mihalcea</link>
      <guid>https://blog.vvauban.com/blog/lesson-of-multi-level-fetch-with-java-champion-vlad-mihalcea</guid>
      <description>&lt;p&gt;&lt;span style="color: #000000;"&gt;Fetching data is not just about reducing the number of SQL queries.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph" style="text-align: start; font-size: 16px;"&gt;&lt;span style="color: #000000;  "&gt;Sometimes, &lt;/span&gt;&lt;span style="color: #000000;  "&gt;&lt;strong&gt;one query is worse than five&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #000000;  "&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph white-space-pre" style="text-align: start; font-size: 16px;"&gt;&lt;span style="color: #000000;  "&gt;Today, while following a Virtual JUG session with Vlad Mihalcea, we discussed a classic trap:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;At first, the temptation is obvious:&lt;/p&gt;&lt;p class=" style="&gt;“Let’s fetch everything with one big JOIN.”&lt;/p&gt;&lt;p class=" style="&gt;But this can quickly become a Cartesian product.&lt;/p&gt;&lt;p&gt;And suddenly, your “optimized query” becomes a data duplication machine. 🧨&lt;/p&gt;&lt;p&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;🔸 TL;DR&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ JOIN FETCH is not bad.&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Fetching several to-many associations at once is dangerous.&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ DISTINCT may hide duplicate root entities, but not the cost of duplicated SQL rows.&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Splitting the fetch into several small queries is often cleaner.&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ jOOQ MULTISET offers another elegant option: nested results without the flat Cartesian explosion.&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;🔸 THE JDBC TEMPLATE TRAP&lt;/span&gt;&lt;/p&gt;&lt;h3 class=" ember-view reader-text-block__heading-3" style="text-align: start; font-size: 20px;"&gt;&lt;span style="color: #000000;"&gt;With plain JDBC or JdbcTemplate, the Cartesian product is visible.&lt;/span&gt;&lt;/h3&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;The SQL result is flat.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph" style="text-align: start; font-size: 16px;"&gt;&lt;span style="color: #000000;  "&gt;But your object graph is nested.&lt;/span&gt;&lt;/p&gt;&lt;p class=" ember-view reader-text-block__paragraph"...&lt;a href=https://blog.vvauban.com/blog/lesson-of-multi-level-fetch-with-java-champion-vlad-mihalcea&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>Java 26 — JEP 529: Vector API (Incubator)</title>
      <pubDate>Mon, 25 May 2026 13:01:06 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/java-26-jep-529-vector-api-incubator</link>
      <guid>https://blog.vvauban.com/blog/java-26-jep-529-vector-api-incubator</guid>
      <description>&lt;p&gt;• The Vector API is Java’s portable SIMD story for data-heavy workloads.&lt;/p&gt;&lt;p class=" style="&gt;• You write vector operations in Java and let the JVM map them to the best hardware instructions available.&lt;/p&gt;&lt;p class=" style="&gt;• It is still incubating, so it is best suited to performance-focused code paths and libraries.&lt;/p&gt;&lt;p class=" style="&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" style="&gt;#java #java26 #jep529 #vector #performance &lt;/p&gt;&lt;p class=" style="&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" style="&gt;Go further with Java certification:&lt;/p&gt;&lt;p class=" style="&gt;Java👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/javaOCP" data-type="undefined" target="_blank"&gt;https://bit.ly/javaOCP&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;Spring👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/2v7222" data-type="undefined" target="_blank"&gt;https://bit.ly/2v7222&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;SpringBook👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/springtify" data-type="undefined" target="_blank"&gt;https://bit.ly/springtify&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;JavaBook👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/jroadmap" data-type="undefined" target="_blank"&gt;https://bit.ly/jroadmap&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href=https://blog.vvauban.com/blog/java-26-jep-529-vector-api-incubator&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>☕ Java 26 — JEP 526: Lazy constants (Preview)</title>
      <pubDate>Mon, 25 May 2026 12:58:38 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/java-26-jep-526-lazy-constants-preview</link>
      <guid>https://blog.vvauban.com/blog/java-26-jep-526-lazy-constants-preview</guid>
      <description>&lt;p&gt;• LazyConstant gives Java a standard way to delay initialization while keeping immutable semantics.&lt;/p&gt;&lt;p class=" style="&gt;• It helps when object creation is expensive but the value should still behave like a constant after first use.&lt;/p&gt;&lt;p class=" style="&gt;• This is a cleaner alternative to ad hoc lazy holder code.&lt;/p&gt;&lt;p class=" style="&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" style="&gt;#java #java26 #lazyconstants #jep526 &lt;/p&gt;&lt;p class=" style="&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" style="&gt;Go further with Java certification:&lt;/p&gt;&lt;p class=" style="&gt;Java👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/javaOCP" data-type="undefined" target="_blank"&gt;https://bit.ly/javaOCP&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;Spring👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/2v7222" data-type="undefined" target="_blank"&gt;https://bit.ly/2v7222&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;SpringBook👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/springtify" data-type="undefined" target="_blank"&gt;https://bit.ly/springtify&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;JavaBook👇&lt;/p&gt;&lt;p class=" style="&gt;&lt;a href="https://bit.ly/jroadmap" data-type="undefined" target="_blank"&gt;https://bit.ly/jroadmap&lt;/a&gt;&lt;/p&gt;&lt;p class=" style="&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href=https://blog.vvauban.com/blog/java-26-jep-526-lazy-constants-preview&gt;Read More&lt;/a&gt;</description>
    </item>
    <item>
      <title>🧑‍💻📉 COMPUTER SCIENCE HITS A WALL, NOT A DEAD END</title>
      <pubDate>Mon, 25 May 2026 12:53:00 -0700</pubDate>
      <link>https://blog.vvauban.com/blog/computer-science-hits-a-wall-not-a-dead-end</link>
      <guid>https://blog.vvauban.com/blog/computer-science-hits-a-wall-not-a-dead-end</guid>
      <description>&lt;p&gt;For 15 years, “learn to code” sounded like one of the safest bets in education.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;According to The Washington Post, undergraduate computer science enrollment at four-year U.S. colleges fell 8.1% in fall 2025.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;That is a real signal.&lt;/p&gt;&lt;p class=" undefined"&gt;But it is not the signal some people will try to sell you.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;It does not mean: “don’t become a developer.”&lt;/p&gt;&lt;p class=" undefined"&gt;It means: “the easy boom narrative is over.”&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;AI, layoffs, hiring freezes, market saturation, and uncertainty around entry-level jobs are probably making students and families rethink the automatic “computer science = guaranteed career” equation.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;But software is not disappearing.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;What is changing is the bar.&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;🔸 TL;DR&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ Computer science enrollment dropped sharply in 2025 📉&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ The “learn to code and everything will be fine” era is weaker now&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ AI may be scaring some students away from CS 🤖&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ But strong developers will still be needed&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ The opportunity is shifting from “just code” to “understand systems”&lt;/p&gt;&lt;p class=" undefined"&gt;&lt;span style="display: inline-block"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=" undefined"&gt;🔸 WHAT THIS DOES NOT MEAN&lt;/p&gt;&lt;p class=" undefined"&gt;▪️ It does not mean computer science is useless&lt;/p&gt;&lt;p class="...&lt;a href=https://blog.vvauban.com/blog/computer-science-hits-a-wall-not-a-dead-end&gt;Read More&lt;/a&gt;</description>
    </item>
  </channel>
</rss>
