Category Archives: Uncategorized

RestTemplate to RestClient Migration Guide: Method Mapping, Error Handling, and the exchange() Trap

Spring Boot 4 finally forced the issue: RestTemplate, in maintenance mode since Spring 5, is out of the recommended path, and codebases full of getForObject() and exchange() calls need a plan. The good news is that RestClient (introduced in Spring 6.1 / Boot 3.2) was designed as the synchronous successor, so this migration is mostly mechanical — if you know the method-by-method mapping and the three places where behaviour quietly differs. This guide gives you both.

Continue reading RestTemplate to RestClient Migration Guide: Method Mapping, Error Handling, and the exchange() Trap

Hibernate 5 to 6 to 7 Migration Guide: The Breaking Changes and the Silent Ones

I have now taken three codebases through the Hibernate 5 → 6 → 7 path, and the same pattern repeated each time: the compile errors are the easy part, and the silent behaviour changes — query result types, ID generation, fetch semantics — are what reach production. This guide walks the migration in two deliberate hops (5→6, then 6→7), with the exact errors you will see at each stage and how to fix them. Do not attempt 5→7 in one jump; the diagnostics assume you pass through 6.

Continue reading Hibernate 5 to 6 to 7 Migration Guide: The Breaking Changes and the Silent Ones

Zuul to Spring Cloud Gateway Migration: Routes, Filters, and the Blocking-Call Traps

The first time I ported a Zuul gateway to Spring Cloud Gateway, the routes took an afternoon — and the filters took two weeks. That ratio surprises every team that attempts this migration, because the route configuration looks superficially similar while the filter model is a different universe: Zuul 1 is a blocking servlet filter chain, Spring Cloud Gateway runs on Netty with Project Reactor, and a single hidden blocking call in a ported filter can stall your entire gateway. This guide covers the route conversion, the filter-by-filter port, and the blocking-call traps, in that order.

Continue reading Zuul to Spring Cloud Gateway Migration: Routes, Filters, and the Blocking-Call Traps

Spring Cloud Netflix to Modern Alternatives: The Complete Migration Guide (2026)

In 2020 I published a dozen tutorials on this site covering Eureka, Hystrix, Zuul, Ribbon, and Feign — the Spring Cloud Netflix stack. They were accurate then. Today, most of that stack is dead: Netflix put Hystrix into maintenance mode back in 2018, Zuul 1 and Ribbon followed, and the Spring team removed them from the Spring Cloud release train entirely. If you are still running any of these libraries on Spring Boot 2.x, this guide maps every Netflix component to its modern replacement and shows you the actual migration steps — including the parts that break.

Continue reading Spring Cloud Netflix to Modern Alternatives: The Complete Migration Guide (2026)

8086 Microprocessor Architecture: BIU, EU, Pipeline, Pin Diagram, and I/O

When Intel designed the 8086 in 1978, they made one decision that separated it from every processor before it: split the chip in two. One half fetches the next instruction while the other is still executing the current one. That single idea — two units working in parallel — created the foundation of every x86 pipeline that followed, right through to today’s Core processors. But before those two internal units can do anything, the chip has to talk to the outside world through exactly 40 pins. Understanding how those pins are assigned, multiplexed, and controlled is just as important as understanding what happens inside.

Continue reading 8086 Microprocessor Architecture: BIU, EU, Pipeline, Pin Diagram, and I/O

Java 25 LTS: Every JEP That Matters (with AI Prompts for Each Migration)

Java 25 is the LTS that most production teams have been waiting for since Java 21. After spending several weeks working through a real Spring Boot 3.4 codebase with a Java 25 migration — updating dependencies, testing each JEP feature against actual production code, and specifically trying to break things with the new patterns — I came away with a clearer picture of which JEPs matter day-to-day versus which ones are mostly interesting in theory. What I did not expect: JEP 491 (synchronized no-pinning) had the biggest practical impact, and I found it in places I wasn’t looking. A legacy JDBC connection pool that I assumed was fine under virtual threads turned out to have been quietly starving the carrier pool. The other surprise was how little JEP 495 (Simple Source Files) moved the needle in a production context — useful for scripts and documentation, but rarely relevant inside a mature codebase. This post takes the format I could not find anywhere: one JEP per section, each with a concrete before-and-after, an explanation of what the JVM actually does differently, the pitfall that will bite you, and a copy-paste AI prompt to retrofit your existing codebase. The Java 21 to 25 feature overview and the upgrade AI prompts playbook are good starting points before this deeper dive.

Continue reading Java 25 LTS: Every JEP That Matters (with AI Prompts for Each Migration)