Let It Crash vs. Try-Catch: Erlang/BEAM Supervision Trees Against Java’s...
There’s a moment every Java developer has lived through: staring at a stack trace at 2 a.m., trying to figure out whether to catch this exception, wrap it, rethrow it, or just let the whole request...
View ArticleExploring the Agent2Agent (A2A) Protocol with Spring AI
AI applications are rapidly moving from single-model applications toward systems composed of multiple specialized agents. One agent may specialize in weather information, another in travel planning,...
View ArticleDurable Execution You Can Watch, Without a Workflow Engine
A background job charges a customer’s card on step three of four, then throws an exception on step four. The scheduler does what schedulers do and retries the whole job. Step three runs again. The...
View ArticleLong-Term Memory in Spring AI with AutoMemoryTools
AutoMemoryTools lets a Spring AI agent keep useful facts between sessions without treating the whole conversation transcript as permanent context. This article explains the idea and builds a small...
View ArticleSpring REST Docs + Asciidoctor: Automated API Documentation
Ask any backend developer what they hate most about maintaining a REST API, and somewhere near the top of the list you’ll hear “the docs are lying again.” Someone changed a field name three sprints...
View ArticleDynamic Link Generation Based on OAuth2 User Permissions
Most REST APIs treat pagination and navigation as a solved problem, and then quietly ignore a much messier one: what happens when two different users hit the same endpoint and get back two very...
View ArticleLLM Fine-Tuning: SFT, LoRA, QLoRA, RAG and Prompting
Large language models can perform many tasks without any additional training. They can answer questions, summarize text, generate code, classify information, and interact with tools. However, when...
View ArticleExtracting Reliable Structured Data from LLMs
Large language models are good at understanding natural language, but applications usually need information in a predictable form. A customer support application, for example, may receive a message...
View ArticleHATEOAS Pagination: Why PagedModel Doesn’t Work with Custom Repositories
If you’ve spent any real time building REST APIs with Spring, you’ve probably hit this wall: your PagingAndSortingRepository gives you gorgeous, self-documenting PagedModel responses out of the box,...
View ArticleRunning Java Applications on WebAssembly: Exploring WasmEdge and GraalVM...
Java has powered enterprise software, cloud-native microservices, and high-performance backend systems for nearly three decades. Yet, as serverless computing, edge environments, and multi-tenant...
View ArticleGoogle GenAI Chat with Spring AI
Generative Artificial Intelligence has changed the way developers build intelligent applications. Modern applications can use Large Language Models (LLMs) to understand natural language, generate...
View ArticleLLM Streaming with Embabel
Large Language Models can take several seconds, or sometimes much longer, to produce a complete response. In a traditional blocking application, the caller waits until the entire response has been...
View ArticleSpring AI RAG Tutorial with Spring Boot
Retrieval-Augmented Generation, commonly known as RAG, is one of the most useful patterns for building AI applications that need to answer questions using application-specific or private data. Instead...
View ArticleResilience by Design vs. Resilience by Library: BEAM vs. Go and Java
In distributed systems engineering, few architectural divides are as deep—or as philosophically opposed—as how different runtimes handle failure. When an unexpected error occurs, what should happen?...
View ArticleExploring the Visitor Design Pattern with Java
Design patterns provide established approaches to recurring software design problems. Rather than being ready-made pieces of code, they describe how classes and objects can be organized to make an...
View ArticleSpring Boot SSRF Mitigation with InetAddressFilter
Spring Boot applications often make HTTP requests to external services using clients such as RestClient, WebClient, or other HTTP client implementations. When the application controls the target URL,...
View ArticleBuilding Reliable API Tests With Microcks
Modern applications usually depend on several APIs and microservices. During development and testing, however, those dependencies may not always be available. A downstream service might still be under...
View ArticleClojure’s Software Transactional Memory vs. Locks and CAS in Java
A third way to coordinate shared state: optimistic, language-level, and modeled directly on database transactions. Most Java developers reach for one of two tools when state needs protecting from...
View ArticleSpring Boot REST Docs Example
Spring Boot REST APIs are commonly documented using tools such as Swagger/OpenAPI. Another useful option is Spring REST Docs, which generates API documentation from tests. In this article, we will...
View ArticleSpring Boot CRUD Operations with Supabase
Spring Boot is widely used for building REST APIs and backend applications in Java. When an application needs persistent storage, Spring Boot can connect to traditional databases such as PostgreSQL,...
View Article