Building agents on the JVM with Embabel
·
Part 1
One Goal Too Many: Learning Embabel's Planner the Hard Way
My first afternoon with Embabel, the JVM agent framework. I added one action too many, the planner quietly stopped early, and a cryptic get(...) must not be null taught me how GOAP, goals, and AgentInvocation actually fit together.
24 Jul 2026
·
8 min read
Learning MongoDB
·
Part 2
MongoDB, Part 2: The Aggregation Pipeline, Stage by Stage
Part 2 of my MongoDB learning series: how the aggregation pipeline reshapes documents stage by stage — $unwind, $group, $lookup — plus the type-mismatch bug that silently joins nothing and why stage order is a cost decision.
15 Jul 2026
·
5 min read
Learning MongoDB
·
Part 1
Learning MongoDB, one document at a time
Part one of a series: a Spring Boot 4 playground, the embed-vs-reference call that replaces schema normalization, and the Decimal128 default that would have quietly corrupted every price I stored.
15 Jul 2026
·
6 min read
Spring and Java mechanics
Aggregate Roots in Spring Data JDBC: The Delete-Boundary Rule
Spring Data JDBC takes DDD aggregates literally. Here's a one-question rule for drawing aggregate boundaries — and how to avoid N+1 once you have them, verified against the real generated SQL.
5 Jul 2026
·
6 min read
Shipping an AI feature into my own product
·
Part 1
Ask Zakaria: I bolted a grounded AI chat onto my CV site
Why my career site now answers questions out loud — the graceful-degradation bean, the SSE streaming, the atomic quota race, and the discoverability bug that had nothing to do with code.
2 Jul 2026
·
5 min read
Spring and Java mechanics
Spring Batch 6, Hands-On: A New Engine, a Real Operator, and Stops That Cross JVMs
A code-forward tour of Spring Batch 6 on Spring Boot 4 and Java 25 — the resourceless repository, the new ChunkOrientedStep engine, Spring Framework 7 retry, the CommandLineJobOperator, and how stop and recover actually work under the hood.
28 Jun 2026
·
9 min read
The Model Context Protocol, hands on
Building an MCP Tool with Spring Boot AI
How I turned Apache Kafka into a set of tools an AI client can call — using Spring AI's MCP server, a handful of @Tool methods, and one ugly-but-necessary servlet filter.
28 Jun 2026
·
5 min read
Spring and Java mechanics
Flyway on Spring Boot 4 and Java 25: a silent failure, and what it taught me about modular auto-config
Wiring Flyway into a Spring Boot 4.1 / Java 25 app with a Docker-Compose Postgres - including the Boot 4 auto-config modularization gotcha that makes a missing starter look exactly like a missing library.
28 Jun 2026
·
6 min read
Traces, Tempo and the LGTM stack
Manual tracing in Spring Boot with OpenTelemetry: @WithSpan, hand-built spans, and the traps in between
Wiring OpenTelemetry into Spring Boot 4 — the annotation way and the manual Tracer way — plus the context model that ties them together and the gotchas that cost me time (a silent @WithSpan, http/protobuf vs gRPC, and Docker's 'is a directory').
23 Jun 2026
·
6 min read
Spring and Java mechanics
Spring MVC Won't Throw ConstraintViolationException (Here's What It Throws Instead)
Three validation mechanisms wear one annotation vocabulary in Spring MVC. Only one hands you a ConstraintViolationException — the rest give you Spring's own web exceptions. Here's the map, with live proof.
14 Jun 2026
·
5 min read