Scala and the JVM
·
Part 18
Spring Boot to Scala and Play on a live site, without losing an email
I replaced this site's Spring Boot backend with Scala 2.13, Play 3, Anorm and Twirl in one pull request. The rewrite was the easy part: this is how I fixed the contracts, kept the outbox wire format, and rehearsed the rollback on a restored production backup.
9 Oct 2026
·
6 min read
·102 views
From Java to Python
FastAPI for Spring developers: the boilerplate that isn't there
I opened a FastAPI file as a Spring engineer and kept noticing what wasn't there: no MapStruct mapper, no @Valid, no springdoc. The type signature had already done the work.
1 Sep 2026
·
5 min read
·114 views
Spring and Java mechanics
The Online Part of RAG
The second half of RAG: retrieve the right chunks, ground the prompt in them, and let DeepSeek answer - or honestly say 'I don't know' when the context is silent.
31 Aug 2026
·
5 min read
·166 views
Spring and Java mechanics
The Offline Half of RAG
RAG has two halves, and only one uses a language model. A walkthrough of the other one - read, chunk, embed, index - built with Spring AI, pgvector and Ollama.
31 Aug 2026
·
6 min read
·158 views
Security and privacy, in practice
Keycloak part 1: reading the login URL, parameter by parameter
I froze the redirect Spring sends you through and read it parameter by parameter. Three lookalike strings turned out to close three different attacks, and PKCE was already on without me asking for it.
9 Aug 2026
·
5 min read
·140 views
Working with Claude Code
I brokered my sign-in through Keycloak, and broke my own owner check
Putting a self-hosted identity server in front of LinkedIn deleted 240 lines of workaround and turned PKCE back on. It also handed out a privilege escalation — because the claim never changed, but the trust underneath it did.
8 Aug 2026
·
7 min read
·110 views
Spring and Java mechanics
Four phases, and the one that never runs at all
What @TransactionalEventListener actually fires on commit, on rollback, and on neither -- plus a write inside AFTER_COMMIT that survives or vanishes depending on your connection pool. Measured in a playground, not quoted from the Javadoc.
4 Aug 2026
·
7 min read
·375 views
Spring and Java mechanics
publishEvent() is a method call, not a queue
Spring's plain @EventListener runs on your thread, inside your transaction, before your next line — and a chained event is fully handled before the original finishes. Everything here was verified by running it, not by reading the reference page.
3 Aug 2026
·
7 min read
·125 views
Spring and Java mechanics
Spring events that survive a crash
A fire-and-forget @Async listener turns every SMTP hiccup into a lost message. Here is how @TransactionalEventListener plus an event publication table makes it durable — and the four ways that setup silently does nothing.
2 Aug 2026
·
7 min read
·187 views
Building agents on the JVM with Embabel
·
Part 10
One mistake, three failures: named bindings in Embabel
When an Embabel action needs two objects of the same type, binding becomes two declarations that must agree — and nothing cross-checks them. Get them out of step and you get a startup exception, an unreachable goal, or a confident wrong answer, depending on which half you forgot.
31 Jul 2026
·
5 min read
·120 views