Get new articles in your inbox
Embabel Overview and Architecture

Embabel Overview and Architecture

Embabel: an agent framework for the JVM A working reference: philosophy, architecture, a worked example, and REST invocation. Updated for Embabel 1.0 (GA, July 20, 2026). 1. Philosophy Embabel is built by no other than Rod Johnson. Every Java (should) know who he is. He is the creator of the Spring Framework, the most used Java framework for more that two decades. It is build on the premise that neither raw LLM calls nor MCP tool access are enough to build reliable business applications. MCP is an important step forward and Embabel embraces it, but a higher-level orchestration layer is still needed — especially for explainability (why were choices made) and discoverability, which MCP doesn’t address on its own. ...

September 23, 2026 · 12 min
JEP 401: Value Objects (Preview)

JEP 401: Value Objects (Preview)

A while back I wrote about the first time == looked me dead in the eye and said false for two LocalDate objects that were, by any sane definition, the same date. That post was about a preview feature that was still finding its feet. JEP 401 has since integrated into JDK 28, and it’s still preview (you need --enable-preview to touch it), but the design is done enough now that it’s worth going past the “identity is weird, huh” pitch and into the parts that’ll actually bite you. ...

September 22, 2026 · 9 min
Pattern Matching for primitives

Java 27: What Actually Made the Cut

Nine JEPs. Nine separate articles. Somewhere around March I sat down to write a quick overview post for Java 27, and here we are in the middle of September still talking about it. Java 27 is officially released. So let’s zoom out. If you’ve been following along JEP by JEP, some of this will be a refresher. If you haven’t, and you just want to know what’s actually changing when you type java -version from now on, this is the post for you. ...

September 15, 2026 · 15 min
Java 28

Java 28 - Overview

Java 28 is due to be launched in March 2027 At this moment, these are the JEPs that are going in this release. JEP 401 Value Objects The very release of Project Valhalla deliverables, focussing on value class, i.e. classes without identify. JEP535 Shenandoha GC: Generation by Default The Shenandoha Garbage Collector now uses the generational approach already know from other GCs like G1. JEP539 Strict Field initialization in the JVM Strictly-initialized fields must be initialized before they are read, offering stronger integrity guarantees. ...

September 13, 2026 · 1 min
Strict Field Initialization in the JVM (Preview)

JEP 539: Strict Field Initialization in the JVM (Preview)

Every Java field you’ve ever declared has a secret. Before your constructor or static initializer ever touches it, the JVM has already written something to it, a 0, a false, a null. You never see it happen, but it happens, and it’s the source of a whole category of bugs that are miserable to track down. JEP 539 gives the JVM a way to close that gap. It’s a preview feature targeted for JDK 28, and it’s worth getting comfortable with even before you can use it directly, because a few other Java features are quietly built on top of it. ...

September 13, 2026 · 6 min
Spring AI Series: Chat Memory and Conversation State

Spring AI Series: 8-Chat Memory and Conversation State

Everything BrightCart has built so far has a peculiar kind of amnesia. Each request lands, gets handled, and vanishes from the system’s mind completely. The summarizer, the classifier, the enrichment service. Every single call starts from a blank slate, as if the previous one never happened. For one-shot ticket processing, that’s fine. But watch what happens the moment a support agent tries to actually work a ticket through the assistant: ...

September 7, 2026 · 17 min
Value Classes in Java

Value Classes are coming to Java

I once spent a good twenty minutes debugging a failing test before realizing the bug was d1 == d3 instead of d1.equals(d3). Both were LocalDate.of(1996, 1, 23). Both represented the exact same date. And Java looked me dead in the eye and said “false.” That’s not a bug in LocalDate. That’s just what happens when every object in Java carries an identity, whether it needs one or not. JEP 401 is the JEP that finally lets you opt out. ...

August 22, 2026 · 8 min
Claude 10 - Putting It All Together

Claude Code - 10 - Putting It All Together: A Production Setup for a Spring Boot Service

There’s a specific moment when a Claude Code setup crosses over from “collection of tricks” to “environment I actually trust.” For me it was a morning at work a few weeks after I’d finished the last big round of .claude/ cleanup. I opened a session on a service I’d been fighting a bug in the day before, typed one sentence about the bug, and Claude Code — before I did anything else — knew what branch I was on, what other work was in progress, what JIRA ticket the bug was tracked in, what the team’s transactional conventions were, and which of the four review subagents I’d want to run before committing. I didn’t have to explain any of that. The setup did. ...

August 12, 2026 · 20 min
JEP 537 - Vector API, Twelfth Incubator

Java 27 - JEP 537 - Vector API, Twelfth Incubator

I checked in on the Vector API the way you check in on a home renovation that’s been “almost done” for years. You poke your head in, nothing’s changed, and someone tells you it’s waiting on one more delivery. Except this delivery has been “arriving soon” since 2014. That’s JEP 537. Twelfth incubation round. Let’s talk about what it actually does, and why it’s still sitting in the waiting room. ...

July 28, 2026 · 5 min
Claude 09 - Hooks: The Deterministic Layer

Claude Code - 09 - Hooks: The Deterministic Layer

It took me three months of using Claude Code before I finally installed a hook. It took me about ten minutes after that to wonder why I’d waited so long. The problem was banal. I’d been running Claude Code alongside a Spring Boot project at work, and after a longer refactoring session — twenty-something files touched, an interface renamed, a couple of implementations moved to a new package — I committed and pushed. Everything compiled. Tests passed. Life was good until Jenkins came back thirty seconds later with a red X: spotless:check had failed on eight files. Claude had used its own idea of import ordering, and our project uses a stricter one. ...

July 23, 2026 · 22 min