[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"latest-newsletter-posts-10":3},[4,221,438,702,909,1052,1157,1375,1550,1851],{"_id":5,"path":6,"title":7,"description":8,"meta":9,"body":12},"newsletter\u002Fnewsletter\u002F2026\u002F07\u002F27\u002Fembabel-1-0-goes-ga-spring-ai-2-0-tool-calling-and-my-content-workflow.md","\u002Fnewsletter\u002F2026\u002F07\u002F27\u002Fembabel-1-0-goes-ga-spring-ai-2-0-tool-calling-and-my-content-workflow","Embabel 1.0 Goes GA, Spring AI 2.0 Tool-Calling, and My Content Workflow","Embabel hits 1.0, building Claude's 'Calling tool...' UI with Spring AI 2.0, what that docker-compose.yml in every Java repo actually does, and a podcast surprise.",{"slug":10,"date":11},"embabel-1-0-goes-ga-spring-ai-2-0-tool-calling-and-my-content-workflow","2026-07-27",{"type":13,"value":14,"toc":199},"minimark",[15,19,27,32,37,40,43,46,50,54,57,60,63,67,71,77,80,83,90,94,104,108,111,120,124,128,131,134,137,141,145,148,151,155,158,165,169,173,176,185],[16,17,18],"p",{},"Happy Monday. Hard to believe July is almost over.",[16,20,21,22],{},"I'm still working hard on my content creation pipeline. It's a work in progress, and I don't think it will ever really be done. Every time I revisit a phase of the process, I try to improve one piece of it. If you want to see how the whole thing fits together, I wrote it all up here: ",[23,24,26],"a",{"href":25},"\u002Fblog\u002Fcontent-creation-workflow","https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fcontent-creation-workflow",[28,29,31],"h2",{"id":30},"videos","Videos",[33,34,36],"h3",{"id":35},"build-claudes-calling-tool-ui-with-spring-ai-20","Build Claude's \"Calling Tool...\" UI with Spring AI 2.0",[16,38,39],{},"You've seen it in Claude and other AI apps: that little \"Calling tool...\" message that pops up while the model does its thing. In this video I show you how to build that same experience with Spring AI 2.0.",[16,41,42],{},"We watch the new tool-calling loop run live. I walk through streaming tool-call events through the ToolCallingAdvisor so your UI can react as things happen. That's what makes the difference between a spinner and an interface that actually tells the user what's going on.",[16,44,45],{},"I also cover how to take manual control when you need it. The automatic loop is great for most cases, but sometimes you want to step in. If you're building anything with agents on the JVM, this one is worth your time.",[47,48],"you-tube",{"id":49},"g6IhOsFKM7c",[33,51,53],{"id":52},"clone-run-done-what-that-docker-composeyml-in-every-java-repo-actually-does","Clone. Run. Done. What That docker-compose.yml in Every Java Repo Actually Does",[16,55,56],{},"Here's the dream. You clone a Java project and it just runs. No onboarding doc, no \"go install Postgres first\" step, no wiki page from three years ago. That's what the compose file in the repo is really doing for you.",[16,58,59],{},"There are two sides to Docker, and this video covers the one nobody explains well. You run your dependencies (Postgres, Redis, whatever) in containers, while your app keeps running normally on your machine. Once you get this pattern, spinning up a new project stops being a chore.",[47,61],{"id":62},"0LNVXHKKJb8",[28,64,66],{"id":65},"blog-posts","Blog Posts",[33,68,70],{"id":69},"embabel-10-is-here-ai-agent-framework-for-java-goes-ga","Embabel 1.0 Is Here: AI Agent Framework for Java Goes GA",[16,72,73],{},[74,75],"img",{"alt":70,"src":76},"\u002Fimages\u002Fnewsletter\u002F2026\u002F07\u002F27\u002Fembabel-1-0-ga.jpg",[16,78,79],{},"If you've been waiting for a stable release before you took agentic AI on the JVM seriously, the wait is over. Embabel just hit 1.0.0. Rod Johnson announced the GA release of his AI agent framework for the JVM, thanking the contributors who got it across the finish line.",[16,81,82],{},"I've been hands-on with Embabel for a while now, so I used this milestone to break down why it matters. The post explains what an AI agent actually is (goals, tools, planning, and a feedback loop, not just a single LLM call), what changed on the road to 1.0, and how you can get started today. If the word \"agent\" still feels fuzzy to you, start here.",[16,84,85,86],{},"Read the full post: ",[23,87,89],{"href":88},"\u002Fblog\u002Fembabel-1-0-ga","https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fembabel-1-0-ga",[28,91,93],{"id":92},"spring-office-hours","Spring Office Hours",[16,95,96,97,103],{},"We didn't publish a new episode this week, but we are working on some new episodes. As always check the ",[23,98,102],{"href":99,"rel":100},"https:\u002F\u002Fspringofficehours.io\u002Fschedule",[101],"nofollow","schedule"," for upcoming shows.",[28,105,107],{"id":106},"podcast-appearances","Podcast Appearances",[16,109,110],{},"Last week I was in the car driving and I pulled up my podcast player to find something to listen to. I was scrolling along and I saw that the Inside Java Podcast was talking about Spring AI. I thought to myself I wonder who is talking about that. I would love to be a guest on that podcast. I play the episode and to my surprise it was me 🤣",[16,112,113,114,119],{},"I joined Lize Raes on the ",[23,115,118],{"href":116,"rel":117},"https:\u002F\u002Finside.java\u002F2026\u002F07\u002F23\u002Fpodcast-063\u002F",[101],"Inside Java Podcast"," for episode 63 to talk about Spring AI 2.0. This episode was recorded at JavaOne back in March and we got to record it in a fancy studio. We got into deterministic agents, MCP servers and skills, prompt engineering, and why Java is such a good fit for enterprise AI. If you want the bigger picture on where Spring AI is headed, give it a listen.",[28,121,123],{"id":122},"upcoming-speaking-engagements","Upcoming Speaking Engagements",[33,125,127],{"id":126},"portland-java-user-group","Portland Java User Group",[16,129,130],{},"August 25, 2026 in Portland, OR",[16,132,133],{},"I'm giving my talk \"AI for Java Developers.\" AI is everywhere right now, and this session bridges the gap between traditional Java development and AI. I explain the core ideas of AI, machine learning, and deep learning using concepts Java developers already know, then show how your existing skills carry over.",[16,135,136],{},"We work through hands-on examples: natural language processing, chatbots, recommendation systems, and sentiment analysis in Java systems. You'll leave with a solid foundation to start adding these features to your own work.",[28,138,140],{"id":139},"in-the-news","In the News",[33,142,144],{"id":143},"why-ai-wont-replace-great-java-developers-josh-long-the-marco-show","Why AI Won't Replace Great Java Developers - Josh Long | The Marco Show",[16,146,147],{},"Josh Long sat down on The Marco Show to make the case that AI isn't coming for great Java developers. It's a good watch if you've had that nagging worry in the back of your head lately.",[47,149],{"id":150},"_ftzJ33mCTI",[33,152,154],{"id":153},"were-launching-buzz","We're launching Buzz!",[16,156,157],{},"Jack announced Buzz, a new native workspace built for teams of humans and agents working together.",[16,159,160,164],{},[161,162,163],"strong",{},"Dan's Thoughts:"," A new native workspace for human + agent teams. We keep seeing tools reshape themselves around agents instead of bolting agents onto old workflows. Worth keeping an eye on.",[166,167],"tweet-embed",{"id":168},"2079605800998146171",[28,170,172],{"id":171},"until-next-week","Until Next Week",[16,174,175],{},"That's it for this week. If there's a topic you want me to cover, or a question about Spring AI, Embabel, or Docker Compose in your projects, just hit reply. I read everything.",[16,177,178,179,184],{},"I hope you enjoyed this newsletter installment, and I will talk to you in the next one. If you have any questions for me or topics you would like me to cover please feel free to reply to this email or reach out to me on ",[23,180,183],{"href":181,"rel":182},"https:\u002F\u002Ftwitter.com\u002Ftherealdanvega",[101],"Twitter",".",[16,186,187,188,191,192,194],{},"Happy Coding,",[189,190],"br",{},"\nDan Vega",[189,193],{},[23,195,198],{"href":196,"rel":197},"https:\u002F\u002Fwww.danvega.dev\u002F",[101],"https:\u002F\u002Fwww.danvega.dev",{"title":200,"searchDepth":201,"depth":201,"links":202},"",2,[203,208,211,212,213,216,220],{"id":30,"depth":201,"text":31,"children":204},[205,207],{"id":35,"depth":206,"text":36},3,{"id":52,"depth":206,"text":53},{"id":65,"depth":201,"text":66,"children":209},[210],{"id":69,"depth":206,"text":70},{"id":92,"depth":201,"text":93},{"id":106,"depth":201,"text":107},{"id":122,"depth":201,"text":123,"children":214},[215],{"id":126,"depth":206,"text":127},{"id":139,"depth":201,"text":140,"children":217},[218,219],{"id":143,"depth":206,"text":144},{"id":153,"depth":206,"text":154},{"id":171,"depth":201,"text":172},{"_id":222,"path":223,"title":224,"description":225,"meta":226,"body":229},"newsletter\u002Fnewsletter\u002F2026\u002F07\u002F20\u002Fsmarter-ai-agents-spring-boot-4-1-with-phil-webb-and-the-java-documentary.md","\u002Fnewsletter\u002F2026\u002F07\u002F20\u002Fsmarter-ai-agents-spring-boot-4-1-with-phil-webb-and-the-java-documentary","Smarter AI Agents, Spring Boot 4.1 with Phil Webb, and the Java Documentary","Taming tool overload in Spring AI, Spring Boot 4.1 straight from the source with Phil Webb, self-correcting structured output, and the Java documentary.",{"slug":227,"date":228},"smarter-ai-agents-spring-boot-4-1-with-phil-webb-and-the-java-documentary","2026-07-20",{"type":13,"value":230,"toc":423},[231,234,237,245,250,253,257,261,264,267,270,273,277,280,283,287,290,293,296,300,309,312,314,317,326,329,338,341,345,348,357,365,367,371,374,377,382,386,389,392,395,398,401,404,406,409,414],[16,232,233],{},"Hey friends",[16,235,236],{},"Big couple of weeks. I shipped a bunch of videos, most of them digging into Spring AI tooling, and I finally sat down to fix up some things that have been bugging me for a while.",[16,238,239,240,244],{},"The website got the most attention. There's a new ",[23,241,243],{"href":242},"\u002Fpodcasts","podcasts page"," that pulls episodes straight from the RSS feeds for Spring Office Hours and Fundamentals of Software Engineering, plus my guest appearances on other shows. The Fundamentals of Software Engineering book page got a refresh for the release. I rebuilt the about page, turned my Spring Boot 4 post into a proper hub for everything Boot 4, and rolled the terminal look across the whole site, right down to the new blog post covers. Along the way I squashed a bunch of little bugs that have been hiding in there for months: broken cover images, weird tag rendering, social share cards that ignored the post cover.",[16,246,247,248],{},"While I was at it, I mapped out my entire content creation process. It turns out there are ten stages between \"I have an idea\" and a video that's published, repurposed, and promoted. Writing it all down made the bottlenecks obvious, and it showed me exactly where AI could take work off my plate. If you're curious how I actually put this stuff together, I wrote the whole thing up here: ",[23,249,26],{"href":25},[16,251,252],{},"Let's get into it.",[28,254,256],{"id":255},"videos-this-week","Videos This Week",[33,258,260],{"id":259},"spring-ai-tool-search","Spring AI Tool Search",[16,262,263],{},"As your AI agents connect to more services like Slack, GitHub, Jira, and MCP servers, your tool libraries grow fast. A typical multi-server setup can pull in 50+ tools and burn through 55,000+ tokens before the conversation even starts. That's expensive and slow.",[16,265,266],{},"There's another problem too. Tool selection accuracy drops off a cliff once the model has to pick between 30+ similarly-named tools. It starts guessing, and guessing is not what you want in production.",[16,268,269],{},"This video walks through how tool search solves both problems by only surfacing the tools that matter for a given request. If you're building anything with agents right now, start here.",[47,271],{"id":272},"VG00DildlvY",[33,274,276],{"id":275},"spring-ai-tool-search-advisors","Spring AI Tool Search Advisors",[16,278,279],{},"This one builds on the tool search idea and shows you how to wire it up with advisors. If you've watched the first video and want to see how this fits into a real request pipeline, this is your next stop.",[47,281],{"id":282},"WNJFR-_N9bc",[33,284,286],{"id":285},"self-correcting-structured-output","Self Correcting Structured Output",[16,288,289],{},"Getting structured output from an LLM is great until the model hands you back something that doesn't match your schema. This video covers a pattern where the model checks its own work and fixes the output before it gets to your code.",[16,291,292],{},"If you've ever parsed a response and had it blow up on a missing field, you'll want to see this approach.",[47,294],{"id":295},"vxOeeNyOtZY",[33,297,299],{"id":298},"uish-introduction","ui.sh Introduction",[16,301,302,303,308],{},"A quick intro to ",[23,304,307],{"href":305,"rel":306},"https:\u002F\u002Fui.sh",[101],"ui.sh"," and what it brings to the table. Short and to the point, worth a look if you want to see what it's about.",[47,310],{"id":311},"-B7uyMp54S4",[28,313,93],{"id":92},[16,315,316],{},"Two episodes went out over the last couple of weeks and both are worth your time.",[16,318,319,320,325],{},"First up, ",[23,321,324],{"href":322,"rel":323},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002F7b0e4e93",[101],"S5E17 - Spring Boot 4.1 with Phil Webb",". Phil joined us to talk through what's coming in Spring Boot 4.1. Any time Phil is on the show you know we're getting the details straight from the source.",[47,327],{"id":328},"4MYFKQkvwNw",[16,330,331,332,337],{},"Then we did ",[23,333,336],{"href":334,"rel":335},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002F15c533f2",[101],"S5E18: The Latest from OpenAI, Anthropic and Spring AI 2.0",". We caught up on everything moving in the AI space and dug into what Spring AI 2.0 means for Java developers building AI features.",[47,339],{"id":340},"MHsJMlq3wSI",[28,342,344],{"id":343},"fundamentals-of-software-engineering","Fundamentals of Software Engineering",[16,346,347],{},"Two more episodes dropped on the podcast side.",[16,349,350,351,356],{},"In ",[23,352,355],{"href":353,"rel":354},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002F6d675095",[101],"E09 - Effective Remote Work Tips and Why AI Doom Trolling Is a Choice",", we shared some practical advice on making remote work actually work, and got into why all the AI doom talk is a choice you don't have to make.",[16,358,350,359,364],{},[23,360,363],{"href":361,"rel":362},"https:\u002F\u002Fshare.transistor.fm\u002Fs\u002Fdaff9573",[101],"E10 - Context Engineering Is Just Data Fundamentals in Disguise",", we made the case that context engineering isn't some brand new discipline. It's the same data fundamentals you already know, wearing a new hat. If you've been feeling behind on the AI hype cycle, this one should make you feel a lot better.",[28,366,140],{"id":139},[33,368,370],{"id":369},"the-java-documentary-has-been-released","The Java Documentary has been released",[16,372,373],{},"The cult.repo team dropped their Java documentary, and it's a great watch for anyone who cares about the language and its history.",[47,375],{"id":376},"ZqGSg4b_cZA",[16,378,379,381],{},[161,380,163],{}," This was another amazing documentary by the cult.repo team. I loved every minute of it.",[28,383,385],{"id":384},"tweets","Tweets",[16,387,388],{},"My take on why Java is a real option for building AI into applications:",[166,390],{"id":391},"2077411020901875832",[16,393,394],{},"Some behind the scenes on organizing and refining my skills setup:",[166,396],{"id":397},"2078126210178007531",[16,399,400],{},"How I used Claude to handle about 70% of the editing on my latest video, including some custom motion graphics skills:",[166,402],{"id":403},"2078122342417392090",[28,405,172],{"id":171},[16,407,408],{},"That's it for this edition. If there's a topic you want me to cover or a question you've been sitting on, just hit reply. I read everything.",[16,410,178,411,184],{},[23,412,183],{"href":181,"rel":413},[101],[16,415,187,416,191,418,420],{},[189,417],{},[189,419],{},[23,421,198],{"href":196,"rel":422},[101],{"title":200,"searchDepth":201,"depth":201,"links":424},[425,431,432,433,436,437],{"id":255,"depth":201,"text":256,"children":426},[427,428,429,430],{"id":259,"depth":206,"text":260},{"id":275,"depth":206,"text":276},{"id":285,"depth":206,"text":286},{"id":298,"depth":206,"text":299},{"id":92,"depth":201,"text":93},{"id":343,"depth":201,"text":344},{"id":139,"depth":201,"text":140,"children":434},[435],{"id":369,"depth":206,"text":370},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":172},{"_id":439,"path":440,"title":441,"description":442,"meta":443,"body":446},"newsletter\u002Fnewsletter\u002F2026\u002F07\u002F06\u002Fseven-videos-two-very-busy-weeks-of-spring-boot-4-1.md","\u002Fnewsletter\u002F2026\u002F07\u002F06\u002Fseven-videos-two-very-busy-weeks-of-spring-boot-4-1","Seven Videos, Two Very Busy Weeks of Spring Boot 4.1","Two busy weeks of content covering Spring Boot 4.1: gRPC support, lazy JDBC connections, the new @RedisListener, SSRF protection, type-safe property paths, and more.",{"slug":444,"date":445},"seven-videos-two-very-busy-weeks-of-spring-boot-4-1","2026-07-06",{"type":13,"value":447,"toc":684},[448,451,454,458,462,465,473,476,480,487,490,493,496,500,506,509,512,516,523,534,537,541,544,547,550,554,557,560,563,567,577,590,593,595,598,607,614,616,619,626,628,632,635,642,647,651,654,660,665,667,670,675],[16,449,450],{},"Happy Monday, friends!",[16,452,453],{},"I hope you had a great weekend. The past couple of weeks was an absolute blur of content creation. I published seven videos, and almost all of them cover new features in Spring Boot 4.1. I've been deep in the Spring Boot 4.1 release and there's so much good stuff to talk about. From gRPC support to lazy JDBC connections to a brand new Redis annotation, this release is packed. Let me catch you up on everything.",[28,455,457],{"id":456},"video-recaps","Video Recaps",[33,459,461],{"id":460},"getting-started-with-spring-grpc-in-spring-boot-41","Getting Started with Spring gRPC in Spring Boot 4.1",[16,463,464],{},"gRPC in Java used to mean dealing with proto files, code generation, build plugins, server wiring, and client channels. A lot of ceremony before you could even get a \"hello world\" running. Spring Boot 4.1 changes that story. If you can build a REST app, you already know the patterns.",[16,466,467,468,472],{},"In this video I walk through the new Spring gRPC support that ships with Spring Boot 4.1. You'll define a contract, drop in a ",[469,470,471],"code",{},"@GrpcService"," annotation, and you're off to the races. It's the same developer experience you're used to with Spring, now applied to gRPC.",[47,474],{"id":475},"MPHuBNqbYPM",[33,477,479],{"id":478},"lazy-jdbc-connections-in-spring-boot-41-performance-win","Lazy JDBC Connections in Spring Boot 4.1 (Performance Win)",[16,481,482,483,486],{},"One property change took connection hold time from 2 seconds down to 15 milliseconds. That's not a typo. The new ",[469,484,485],{},"spring.datasource.connection-fetch=lazy"," property in Spring Boot 4.1 is a real performance win that you need to know about.",[16,488,489],{},"I built a complete demo application with Spring Data JDBC, Postgres, Docker Compose, and Spring Boot Actuator to measure the real-world difference between eager and lazy connection fetching. Your transactional methods currently grab a connection the moment they open, even when they never run a query. A cache hit, an early return, a slow API call before the save: that connection just sits idle. Lazy mode fixes this.",[16,491,492],{},"This one really resonated on Twitter too, with over 8,000 impressions. It's a small change with a big impact.",[47,494],{"id":495},"lsaBN1U2EB8",[33,497,499],{"id":498},"spring-boot-41-block-ssrf-attacks-with-inetaddressfilter","Spring Boot 4.1: Block SSRF Attacks with InetAddressFilter",[16,501,502,503,184],{},"Did you know that a simple URL preview endpoint could expose your internal secrets to attackers? SSRF (Server-Side Request Forgery) attacks are a real threat, and Spring Boot 4.1 now gives you built-in protection with the new ",[469,504,505],{},"InetAddressFilter",[16,507,508],{},"In this tutorial I build a real-world example from scratch: a URL preview endpoint that's vulnerable to SSRF, and then fix it with just one configuration bean. If you're building any application that makes outbound HTTP calls based on user input, this video is for you.",[47,510],{"id":511},"PDbBG_GrcwU",[33,513,515],{"id":514},"spring-boot-41-the-new-redislistener-simplifies-everything","Spring Boot 4.1: The New @RedisListener Simplifies Everything",[16,517,518,519,522],{},"If you've ever wired up Redis Pub\u002FSub in Spring, you know the pain. Message listener containers, listener adapters, raw byte array payloads. It was a lot of boilerplate for something that should be simple. Spring Boot 4.1 fixes this with the new ",[469,520,521],{},"@RedisListener"," annotation.",[16,524,525,526,529,530,533],{},"I build a simple order publishing and subscribing system from scratch, comparing the old boilerplate approach with the new annotation-driven style. It brings Redis Pub\u002FSub in line with ",[469,527,528],{},"@KafkaListener"," and ",[469,531,532],{},"@RabbitListener",", which is exactly where it should be.",[47,535],{"id":536},"lMbgBYlUtfc",[33,538,540],{"id":539},"spring-boot-41-type-safe-property-paths-in-spring-data","Spring Boot 4.1: Type-Safe Property Paths in Spring Data",[16,542,543],{},"Your Spring Data code compiles, the IDE is happy, and tests pass. Then in production, a user sorts a column and everything blows up. Sound familiar? This is the \"stringly typed\" problem, and Spring Boot 4.1 introduces type-safe property paths to eliminate this entire class of runtime bugs.",[16,545,546],{},"In this video I show how stringly typed property references cause hidden runtime errors and how the new type-safe API in Spring Data Commons catches these mistakes at compile time. This is one of those features that makes you wonder how we lived without it.",[47,548],{"id":549},"qBC-TrIzsPg",[33,551,553],{"id":552},"spring-ai-xs-new-mcp-servers","Spring AI + X's New MCP Servers",[16,555,556],{},"X (formerly Twitter) just dropped MCP servers for both the X API and their developer documentation, and they work with any MCP-compatible AI tool. I wanted to see what they could do, so I built a Spring AI client that connects to both servers.",[16,558,559],{},"We start by reviewing the official announcement and documentation, then plug the docs server into Claude AI for a quick test. Then we build a full Spring Boot 4.1 + Spring AI 2.0 application that talks to both MCP servers. If you're interested in how MCP is expanding across the ecosystem, this is a great example of what's possible.",[47,561],{"id":562},"j4chxGtqkY8",[33,564,566],{"id":565},"chatclient-vs-chatmodel-which-spring-ai-api-should-you-use","ChatClient vs ChatModel: Which Spring AI API Should You Use?",[16,568,569,570,529,573,576],{},"Spring AI gives you two ways to talk to an LLM: ",[469,571,572],{},"ChatClient",[469,574,575],{},"ChatModel",". Picking the wrong one can cost you time and flexibility. In this video I break down both APIs so you know exactly when to reach for each one.",[16,578,579,580,582,583,586,587,589],{},"We explore the high-level ",[469,581,572],{},", which is a fluent, builder-style API similar to ",[469,584,585],{},"RestClient",", and the low-level ",[469,588,575],{}," interface that it's built on. You'll see both in action with hands-on code demos using OpenAI, including how to get metadata, token usage, and multiple responses. If you're building with Spring AI, this is the conceptual foundation you need.",[47,591],{"id":592},"IdIDI71sGZM",[28,594,93],{"id":92},[16,596,597],{},"We didn't have an episode last week, but this week we have a big one. Phil Webb is joining us to talk about Spring Boot 4.1. If you don't know Phil, he's been one of the key people behind Spring Boot from the beginning. There's nobody better to walk through what's new in this release and the thinking behind the decisions.",[16,599,600,601,606],{},"Tune in and bring your questions: ",[23,602,605],{"href":603,"rel":604},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=4MYFKQkvwNw",[101],"S5E17: Spring Boot 4.1 with Phil Webb"," on July 6th.",[16,608,609,610,184],{},"You can check the full schedule at ",[23,611,613],{"href":99,"rel":612},[101],"springofficehours.io\u002Fschedule",[28,615,344],{"id":343},[16,617,618],{},"Nate and I dig into the growing tension between open source maintainers and AI-generated contributions, from maintainers banning AI PRs to the trouble AI has with actually deleting code. We also get into the Silicon Valley pricing playbook and what happens to your workflows once AI tooling stops being cheap.",[16,620,621,622],{},"Listen here: ",[23,623,624],{"href":624,"rel":625},"https:\u002F\u002Ffundamentalsofswe.com\u002Fpodcast\u002Fopen-source-ai-tooling-and-the-coming-token-crisis-with-dan-vega-and-nate-schutta",[101],[28,627,140],{"id":139},[33,629,631],{"id":630},"spacex-to-acquire-cursor","SpaceX to Acquire Cursor",[16,633,634],{},"SpaceX is acquiring Cursor for $60 billion in stock, just days after Cursor's blockbuster IPO. This is one of the biggest moves we've seen in the developer tools space in a long time.",[16,636,637],{},[23,638,641],{"href":639,"rel":640},"https:\u002F\u002Ftechcrunch.com\u002F2026\u002F06\u002F16\u002Fspacex-to-acquire-cursor-for-60b-in-stock-days-after-blockbuster-ipo",[101],"Read more",[16,643,644,646],{},[161,645,163],{}," This is a huge deal that brings xAI directly into the agentic coding race. Elon now has an AI model (Grok), a coding IDE (Cursor), and the infrastructure to run it all. Whether you love it or hate it, this acquisition puts xAI in direct competition with Microsoft\u002FGitHub Copilot, Google, and Anthropic in the developer tools space. Keep an eye on this one.",[33,648,650],{"id":649},"fable-is-back","Fable is Back!",[16,652,653],{},"Anthropic has restored access to Fable 5, one of its most advanced AI models, after the U.S. export controls that forced a mid-June suspension were lifted on June 30. Fable 5 shares the same underlying model as Mythos 5 but ships with additional safeguards for general use.",[16,655,656],{},[23,657,641],{"href":658,"rel":659},"https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fredeploying-fable-5",[101],[16,661,662,664],{},[161,663,163],{}," I'm really looking forward to digging into this. Fable has been an interesting model from Anthropic, and I'm curious to see what new capabilities this version brings. If you haven't tried it yet, now's a good time to check it out.",[28,666,172],{"id":171},[16,668,669],{},"That's a wrap for this week. Seven videos is a lot, and I appreciate every one of you who watches, comments, and shares them. If there's a Spring Boot 4.1 feature you want me to cover next, or any topic you'd like to see on the channel, just hit reply and let me know. I read every response.",[16,671,178,672,184],{},[23,673,183],{"href":181,"rel":674},[101],[16,676,187,677,191,679,681],{},[189,678],{},[189,680],{},[23,682,198],{"href":196,"rel":683},[101],{"title":200,"searchDepth":201,"depth":201,"links":685},[686,695,696,697,701],{"id":456,"depth":201,"text":457,"children":687},[688,689,690,691,692,693,694],{"id":460,"depth":206,"text":461},{"id":478,"depth":206,"text":479},{"id":498,"depth":206,"text":499},{"id":514,"depth":206,"text":515},{"id":539,"depth":206,"text":540},{"id":552,"depth":206,"text":553},{"id":565,"depth":206,"text":566},{"id":92,"depth":201,"text":93},{"id":343,"depth":201,"text":344},{"id":139,"depth":201,"text":140,"children":698},[699,700],{"id":630,"depth":206,"text":631},{"id":649,"depth":206,"text":650},{"id":171,"depth":201,"text":172},{"_id":703,"path":704,"title":705,"description":706,"meta":707,"body":710},"newsletter\u002Fnewsletter\u002F2026\u002F06\u002F15\u002Fspring-modulith-florida-jugs-and-a-korean-book-launch.md","\u002Fnewsletter\u002F2026\u002F06\u002F15\u002Fspring-modulith-florida-jugs-and-a-korean-book-launch","Spring Modulith, Florida JUGs, and a Korean Book Launch","A recap of my Florida Java User Group trip, the Korean edition of our book, Spring Boot 4.1, Spring AI 2.0, and new videos on Spring Modulith durable events and Kafka.",{"slug":708,"date":709},"spring-modulith-florida-jugs-and-a-korean-book-launch","2026-06-15",{"type":13,"value":711,"toc":893},[712,714,717,723,726,730,743,747,758,760,764,767,770,773,776,780,783,786,789,793,796,799,802,804,813,828,830,834,842,852,856,865,870,874,877,879,884],[16,713,450],{},[16,715,716],{},"My apologies for missing a few editions of the newsletter, but I have been pretty busy lately. Last week I took a trip down to Florida to visit a customer and got to spend some time with the Tampa Java User Group and the Orlando Java User Group. All of the presentations went really well. The energy in those rooms reminded me why I love this community so much. There's something special about standing in front of a group of developers who are genuinely curious and want to learn. If you were at any of these events, thank you for showing up and asking great questions. I'll include some photos below.",[16,718,719],{},[74,720],{"alt":721,"src":722},"Tampa and Orlando Java User Groups","\u002Fimages\u002Fnewsletter\u002F2026\u002F06\u002F15\u002Ftampa_orlando.jpg",[16,724,725],{},"I also have some really cool personal news to share, a major AI update, and of course new content. Let's get into it.",[28,727,729],{"id":728},"korean-edition-of-our-book","Korean Edition of Our Book",[16,731,732,733,737,738,184],{},"This one means a lot to me. Our book, ",[734,735,736],"em",{},"The Fundamentals of Software Engineering",", was translated into Korean! We wrote a special foreword for this edition, and I finally got my hands on a physical copy. Seeing your work translated into another language so that a whole new audience of developers can read it is honestly one of the most rewarding things I've experienced as an author. If you're interested, you can check it out ",[23,739,742],{"href":740,"rel":741},"https:\u002F\u002Fwww.onlybook.co.kr\u002Fentry\u002Fsoftware-engineer",[101],"here",[28,744,746],{"id":745},"fable-5-from-anthropic","Fable 5 from Anthropic",[16,748,749,750,753,754,184],{},"Anthropic released Fable 5, and I had some time to play around with it before... well, before the government stepped in and it got pulled. While I had access, I have to say it was probably the best coding model I've ever used. The code generation was sharp, the context handling was impressive, and it just ",[734,751,752],{},"got"," what I was trying to build in a way other models haven't. Unfortunate timing on the takedown. You can read more about what happened ",[23,755,742],{"href":756,"rel":757},"https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Ffable-mythos-access",[101],[28,759,457],{"id":456},[33,761,763],{"id":762},"spring-modulith-durable-events","Spring Modulith Durable Events",[16,765,766],{},"If you've been building event-driven systems in Spring, you've probably reached for a message broker like RabbitMQ or Kafka. But what if I told you that you don't always need one? Spring Modulith has a built-in durable event registry that persists events directly to your database. This means you get reliable, transactional event publishing without spinning up additional infrastructure.",[16,768,769],{},"In this video, I walk through how the durable event registry works, how to set it up, and when it makes sense to use it instead of a full message broker. The key idea is that your application events get stored in a database table as part of your existing transaction. A background process then picks them up and dispatches them to listeners. If something fails, the event is still there, waiting to be processed.",[16,771,772],{},"This is a really practical pattern for a lot of applications that need reliability but don't need the complexity of a distributed messaging system. If you're working with Spring Modulith or thinking about modular monoliths, this one's for you.",[47,774],{"id":775},"KLX9ulb2AfM",[33,777,779],{"id":778},"spring-boot-kafka","Spring Boot + Kafka",[16,781,782],{},"If you've been meaning to get started with Apache Kafka in a Spring Boot application, this is the video for you. I cover the basics of setting up a Kafka producer and consumer in Spring Boot, including the configuration, the message serialization, and the common gotchas that trip people up the first time around.",[16,784,785],{},"Kafka is one of those technologies that sounds intimidating until you actually wire it up, and Spring Boot makes the initial setup surprisingly straightforward. I kept this one practical and focused so you can follow along and have something running by the end.",[47,787],{"id":788},"5XW3f_39ipY",[33,790,792],{"id":791},"how-to-externalize-events-in-spring-modulith-with-kafka","How to Externalize Events in Spring Modulith with Kafka",[16,794,795],{},"This video is a natural follow-up to the durable events video. Once you understand how Spring Modulith handles events internally, the next question is: what if you need those events to leave your application? What if another service needs to react to them?",[16,797,798],{},"That's where event externalization comes in. Spring Modulith lets you route internal application events to an external message broker like Kafka without coupling your domain logic to Kafka's APIs. In this tutorial, I show you how to configure event externalization with Kafka, how to control which events get published externally, and how the whole thing ties together with the modulith architecture. If you watched the durable events video, consider this the second chapter.",[47,800],{"id":801},"8sJIWwc7Jss",[28,803,93],{"id":92},[16,805,806,807,812],{},"We recently published ",[23,808,811],{"href":809,"rel":810},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=zm_EmvdKwYA",[101],"S5E15: Upgrading Spring and OSS Security",". We dug into some important topics around keeping your Spring applications secure and what upgrading looks like when you're dealing with open source dependencies. Good conversation, and one that's relevant to pretty much everyone running Spring in production.",[16,814,815,816,821,822,827],{},"On S5E16, DaShaun and I talked about the ",[23,817,820],{"href":818,"rel":819},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=hCe50NpXt8s",[101],"May Release Train Shift and What's Coming in Spring Boot 4.1",". There's been a shift in the release train that we want to break down, plus we'll preview some of the new features landing in Spring Boot 4.1. Tune in live on ",[23,823,826],{"href":824,"rel":825},"https:\u002F\u002Fspringofficehours.io",[101],"springofficehours.io"," if you want to ask questions in real time.",[28,829,140],{"id":139},[33,831,833],{"id":832},"spring-boot-41-released","Spring Boot 4.1 Released",[16,835,836,837,184],{},"Spring Boot 4.1 is here, and it's packed with some great additions. You can read the full announcement on the ",[23,838,841],{"href":839,"rel":840},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F06\u002F10\u002Fspring-boot-4",[101],"Spring blog",[16,843,844,846,847,184],{},[161,845,163],{}," One feature that caught my eye right away is the built-in Server-Side Request Forgery (SSRF) protection for HTTP clients. This is the kind of security improvement that makes a real difference because it's baked into the framework rather than something you have to remember to implement yourself. I already put together a small, self-contained demo showing how it works. You can check it out on ",[23,848,851],{"href":849,"rel":850},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-boot-ssrf-demo",[101],"GitHub",[33,853,855],{"id":854},"spring-ai-20-released","Spring AI 2.0 Released",[16,857,858,859,864],{},"Spring AI has officially hit 2.0! This is a major milestone for the project. Check out the ",[23,860,863],{"href":861,"rel":862},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F06\u002F12\u002Fspring-ai-2-0-0-GA-available-now",[101],"announcement post"," for all the details.",[16,866,867,869],{},[161,868,163],{}," I've been following Spring AI since the early days, and seeing it reach a 2.0 GA release is a big deal. If you're a Spring developer looking to integrate AI capabilities into your applications, this is the framework to use. Expect more content from me on this very soon.",[28,871,873],{"id":872},"the-road-to-100k","The Road to 100K",[16,875,876],{},"One more thing: the march to 100K YouTube subscribers is officially on. This has been a goal of mine for as long as I can remember, and we're getting close. Thank you to every single one of you who watches, subscribes, and shares the videos. It means more than you know.",[28,878,172],{"id":171},[16,880,178,881,184],{},[23,882,183],{"href":181,"rel":883},[101],[16,885,187,886,191,888,890],{},[189,887],{},[189,889],{},[23,891,198],{"href":196,"rel":892},[101],{"title":200,"searchDepth":201,"depth":201,"links":894},[895,896,897,902,903,907,908],{"id":728,"depth":201,"text":729},{"id":745,"depth":201,"text":746},{"id":456,"depth":201,"text":457,"children":898},[899,900,901],{"id":762,"depth":206,"text":763},{"id":778,"depth":206,"text":779},{"id":791,"depth":206,"text":792},{"id":92,"depth":201,"text":93},{"id":139,"depth":201,"text":140,"children":904},[905,906],{"id":832,"depth":206,"text":833},{"id":854,"depth":206,"text":855},{"id":872,"depth":201,"text":873},{"id":171,"depth":201,"text":172},{"_id":910,"path":911,"title":912,"description":913,"meta":914,"body":917},"newsletter\u002Fnewsletter\u002F2026\u002F05\u002F11\u002Fthe-spring-documentary-montreal-adventures-and-building-better-monoliths.md","\u002Fnewsletter\u002F2026\u002F05\u002F11\u002Fthe-spring-documentary-montreal-adventures-and-building-better-monoliths","The Spring Documentary, Montreal Adventures and Building Better Monoliths","Recapping the Spring One Tour in Montreal, the new Spring Documentary from CultRepo, an introduction to Spring Modulith, and recent podcast episodes from Spring Office Hours and Fundamentals of Software Engineering.",{"slug":915,"date":916},"the-spring-documentary-montreal-adventures-and-building-better-monoliths","2026-05-11T12:00:00.000Z",{"type":13,"value":918,"toc":1043},[919,922,925,929,932,935,937,941,944,947,950,961,965,968,971,975,985,995,1008,1026,1029,1034],[16,920,921],{},"Happy Monday and welcome to another edition of the newsletter. The last few weeks have been a whirlwind. I was up in Montreal with Josh, DaShaun, and Adib for the Spring One Tour, and it was an incredible time. I got to deliver a 4-hour workshop on Spring AI (yes, four hours, and honestly I could have kept going) and gave a talk on what's new in Spring Boot 4. There's something special about getting some of the team together in person and spending time with the community. There are just some things Zoom calls can't replace, and the energy and attention you get from an audience is one of them. If you were there, it was great meeting you!",[16,923,924],{},"Back at home, I've been heads-down on Spring Modulith content, a topic that clearly resonated with a lot of you based on the response I got on social media. Let's get into it.",[28,926,928],{"id":927},"spring-documentary","Spring Documentary",[16,930,931],{},"The Spring Documentary is now live, and wow was it amazing. The folks at CultRepo do an amazing job with their documentaries, and this one really hit home. It was great seeing the history of Spring through the lens of the people that helped shape this amazing framework, ecosystem, and community.",[47,933],{"id":934},"0Gb1z-2SjHY",[28,936,457],{"id":456},[33,938,940],{"id":939},"introduction-to-spring-modulith","Introduction to Spring Modulith",[16,942,943],{},"If you've ever started with a clean, well-organized monolith only to watch it slowly devolve into a big ball of mud, this one's for you. In this video, I walk through Spring Modulith from the ground up: what it is, why it exists, and how it helps you build domain-driven modules inside a single Spring Boot application.",[16,945,946],{},"The walkthrough is hands-on. I built a repo where each Git branch represents a step in the journey from a traditional monolith to a modular monolith with decoupled, durable events. You'll see how Spring Modulith enforces module boundaries, verifies your architecture with tests, and lets you publish application events that can survive restarts.",[47,948],{"id":949},"xHlDyKVyvig",[16,951,952,953,960],{},"This was one of my most popular tweets this week, and for good reason. Modular monoliths hit that sweet spot where you get the simplicity of a single deployment with the structure you'd expect from a well-designed system. If you're not ready for microservices (or you've realized you never needed them), Spring Modulith is worth your time. Speaking of which, ",[161,954,955],{},[23,956,959],{"href":957,"rel":958},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F04\u002F24\u002Fspring-modulith-2-1-rc1-2-0-6-and-1-4-11-released",[101],"Spring Modulith 2.1 RC1, 2.0.6, and 1.4.11 were just released",", so the project continues to move forward at a great pace.",[28,962,964],{"id":963},"devnexus-2026-fundamentals-of-software-engineering-in-the-age-of-ai-nathaniel-schutta-dan-vega","DevNexus 2026 - Fundamentals of Software Engineering in the Age of AI - Nathaniel Schutta & Dan Vega",[16,966,967],{},"The recording from our talk at DevNexus is now available. We like to think of this as a mini therapy session on where we are in our industry right now. If you need a quick pep talk, check out the video below. Sit back, take a deep breath, and relax — everything is going to be okay!",[47,969],{"id":970},"_MMQt78D0AM",[28,972,974],{"id":973},"podcasts","Podcasts",[16,976,977,978,984],{},"We had a couple of great episodes on Spring Office Hours over the past few weeks. First, we published our ",[161,979,980],{},[23,981,983],{"href":99,"rel":982},[101],"Community Potluck (S05E13)"," on April 21st, which is always a fun format where we dig into questions and topics from the community.",[16,986,987,988,994],{},"Then on May 4th, we had ",[161,989,990],{},[23,991,993],{"href":99,"rel":992},[101],"Simon Martinelli on the show (S5E14)"," to talk about Spec Driven Development. Simon had a lot of practical insight into designing your API contract first and letting that drive your implementation. It's an approach that pairs really well with how I think about building Spring Boot applications.",[16,996,997,998,1001,1002],{},"This week, DaShaun and I are recording ",[161,999,1000],{},"S5E16: Upgrading Spring and OSS Security",". This is a topic that affects every single one of us. Whether you're trying to get off an older version of Spring Boot or you're thinking about the security of the open-source dependencies in your project, we'll be digging into all of it. ",[161,1003,1004],{},[23,1005,1007],{"href":809,"rel":1006},[101],"Tune in live or catch the replay here.",[16,1009,1010,1011,1013,1014,1021,1022,1025],{},"On the podcast front, I also published two new episodes of ",[161,1012,344],{}," with Nate Schutta. The first, ",[161,1015,1016],{},[23,1017,1020],{"href":1018,"rel":1019},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=_MMQt78D0AM",[101],"Why Software Engineering Fundamentals Matter More in the Age of AI",", tackles something I feel strongly about: as AI tools write more code for us, understanding the fundamentals becomes more important, not less. The second episode, ",[161,1023,1024],{},"Why We Hate Legacy Code (and How to Work With It Anyway)",", is a conversation I think every developer can relate to. We've all inherited that codebase. The question is what you do next.",[28,1027,1028],{"id":171},"UNTIL NEXT WEEK",[16,1030,178,1031,184],{},[23,1032,183],{"href":181,"rel":1033},[101],[16,1035,187,1036,191,1038,1040],{},[189,1037],{},[189,1039],{},[23,1041,198],{"href":196,"rel":1042},[101],{"title":200,"searchDepth":201,"depth":201,"links":1044},[1045,1046,1049,1050,1051],{"id":927,"depth":201,"text":928},{"id":456,"depth":201,"text":457,"children":1047},[1048],{"id":939,"depth":206,"text":940},{"id":963,"depth":201,"text":964},{"id":973,"depth":201,"text":974},{"id":171,"depth":201,"text":1028},{"_id":1053,"path":1054,"title":1055,"description":1056,"meta":1057,"body":1060},"newsletter\u002Fnewsletter\u002F2026\u002F04\u002F20\u002Fback-from-austin-and-supercharging-ai-agents-with-embabel.md","\u002Fnewsletter\u002F2026\u002F04\u002F20\u002Fback-from-austin-and-supercharging-ai-agents-with-embabel","Back from Austin and Supercharging AI Agents with Embabel","Recapping the Arc of AI conference in Austin, a new video on supercharging AI agents with Embabel tools and MCP servers, and what's coming up on Spring Office Hours.",{"slug":1058,"date":1059},"back-from-austin-and-supercharging-ai-agents-with-embabel","2026-04-20T00:00:00.000Z",{"type":13,"value":1061,"toc":1148},[1062,1065,1068,1074,1076,1080,1083,1086,1089,1092,1094,1097,1100,1111,1115,1123,1126,1128,1131,1134,1136,1139],[16,1063,1064],{},"Happy Monday, friends! I hope you all had a great week. I just got back from the Arc of AI conference in Austin, TX, and it was a blast. There's something about getting out of your normal routine and connecting with other developers in person that recharges the batteries. I got to have some great conversations about where Spring and AI agents are heading, and it was cool to see how many folks in the community are already building with these tools.",[16,1066,1067],{},"Nate (my friend and co-author) gave an 8-hour workshop on where the fundamentals of software engineering fit in the age of AI. It was a great group of attendees who brought some great energy and a bunch of insightful questions throughout the day.",[16,1069,1070],{},[74,1071],{"alt":1072,"src":1073},"Arc of AI conference in Austin","\u002Fimages\u002Fnewsletter\u002F2026\u002F04\u002F20\u002Farcofai.jpeg",[28,1075,457],{"id":456},[33,1077,1079],{"id":1078},"embabel-mcp-tools","Embabel MCP + Tools",[16,1081,1082],{},"I put together a video showing how to supercharge your AI agents with tools and MCP servers in Embabel. If you haven't been following along, Embabel is a really interesting framework for building AI agents, and one of the things that makes agents truly useful is giving them access to tools and external services through the Model Context Protocol (MCP).",[16,1084,1085],{},"In this video, I walk through the full setup from scratch. You'll see how to wire up tools that your agents can call, how to connect MCP servers so your agents can interact with external systems, and how it all fits together in a clean, Spring-friendly way. If you're building AI agents in the Java ecosystem and want to go beyond simple prompt-and-response workflows, this one's for you.",[16,1087,1088],{},"The response on this one has been great. It's clear that a lot of you are ready to move past the \"hello world\" phase of AI agents and start building something real. Give it a watch and let me know what you think.",[47,1090],{"id":1091},"2mGr7kdstJs",[28,1093,93],{"id":92},[16,1095,1096],{},"In the latest episode of Spring Office Hours, we had Arun Gupta join us for a conversation about developer soft skills (S5E12). This is a topic that doesn't get enough attention in our world. We spend so much time talking about frameworks and libraries, but the skills that often make the biggest difference in your career are communication, collaboration, and knowing how to navigate a team. Arun brought some really practical advice from his years of experience. Definitely worth a listen if you missed it.",[16,1098,1099],{},"This coming week is a potluck episode (S5E13) where DaShaun and I answer your questions. These are some of my favorite episodes because we never know what's coming. Send us your questions!",[16,1101,1102,1103,1106,1107,1110],{},"Looking ahead, we've got an incredible lineup. On April 27th, Rod Johnson is joining us to talk about Spring and Embabel (S5E14). Yes, ",[734,1104,1105],{},"that"," Rod Johnson. And on May 4th, Simon Martinelli stops by to discuss spec-driven development (S5E15). Check out the full schedule at ",[23,1108,613],{"href":99,"rel":1109},[101]," and make sure you're subscribed so you don't miss these.",[28,1112,1114],{"id":1113},"can-you-trust-ai-generated-code-it-depends-on-what-you-already-know","Can You Trust AI-Generated Code? It Depends on What You Already Know",[16,1116,1117,1122],{},[23,1118,1121],{"href":1119,"rel":1120},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fcan-you-trust-ai-generated-code",[101],"This article"," over at ByteSized AI digs into a question a lot of us are wrestling with: how much should you trust the code that AI generates for you? The short answer is that it really depends on your existing knowledge of the domain.",[16,1124,1125],{},"It's something I've been thinking about a lot as I use AI coding agents more and more. When I ask AI about a framework I've never used, it feels like magic. Everything looks great and I'm flying. But when I ask it about Spring code I've been writing for years, I catch mistakes on every line. That's Gell-Mann amnesia in action: we trust the AI's output in areas we can't verify while knowing it's unreliable in areas we can. This is exactly why the fundamentals matter more now, not less. AI is an incredible tool, but you need enough knowledge to know when it's wrong. If you're leaning on AI-generated code in areas you don't understand, you're building on a foundation you can't inspect. Give it a read and let me know if your experience lines up with mine.",[28,1127,385],{"id":384},[16,1129,1130],{},"The trailer for the upcoming Spring Documentary is out, and wow, is it good. I'm not going to lie, I almost cried watching this!",[166,1132],{"id":1133},"2044820683692101741",[28,1135,172],{"id":171},[16,1137,1138],{},"That's all I've got for this week. If you have questions about Embabel, Spring AI, or anything else I covered, just hit reply. I read every response, and it helps me figure out what to cover next. Have a great week, and I'll talk to you next Monday!",[16,1140,187,1141,191,1143,1145],{},[189,1142],{},[189,1144],{},[23,1146,198],{"href":196,"rel":1147},[101],{"title":200,"searchDepth":201,"depth":201,"links":1149},[1150,1153,1154,1155,1156],{"id":456,"depth":201,"text":457,"children":1151},[1152],{"id":1078,"depth":206,"text":1079},{"id":92,"depth":201,"text":93},{"id":1113,"depth":201,"text":1114},{"id":384,"depth":201,"text":385},{"id":171,"depth":201,"text":172},{"_id":1158,"path":1159,"title":1160,"description":1161,"meta":1162,"body":1165},"newsletter\u002Fnewsletter\u002F2026\u002F04\u002F06\u002Fnew-gear-new-course-and-a-whole-lot-of-content.md","\u002Fnewsletter\u002F2026\u002F04\u002F06\u002Fnew-gear-new-course-and-a-whole-lot-of-content","New Gear, New Course, and a Whole Lot of Content","Last week everything just clicked. A new audio interface, a new microphone, a full 10-video GraphQL course, and several standalone videos — let's get into it.",{"slug":1163,"date":1164},"new-gear-new-course-and-a-whole-lot-of-content","2026-04-06T00:00:00.000Z",{"type":13,"value":1166,"toc":1359},[1167,1170,1172,1176,1179,1182,1185,1189,1200,1203,1206,1210,1213,1216,1219,1223,1226,1241,1243,1252,1261,1263,1270,1286,1289,1291,1295,1302,1307,1311,1320,1325,1329,1338,1343,1345,1350],[16,1168,1169],{},"Happy Monday, friends! I hope you had a great weekend. Last week was one of those weeks where everything just clicked. I got a new audio interface and microphone, and I couldn't wait to put them to work. The result? A bunch of new videos, including a full 10-video course on GraphQL for Java developers that I planned, recorded, edited, and published in about 6 hours. I'm still riding that wave of productivity. On top of the course, I put out a few standalone videos that I think you're really going to enjoy. Let's get into it.",[28,1171,457],{"id":456},[33,1173,1175],{"id":1174},"excalidraw-mcp-server","Excalidraw MCP Server",[16,1177,1178],{},"If you've been following along with anything MCP-related, you know I'm all in on exploring what these servers can do. In this video, I walk through an MCP server that streams hand-drawn Excalidraw diagrams with smooth viewport camera control and interactive fullscreen editing.",[16,1180,1181],{},"What makes this one cool is the combination of the hand-drawn aesthetic that Excalidraw is known for with the power of an MCP server driving the whole thing. If you've ever wanted to generate diagrams from your AI workflows and have them look like something a human actually sketched on a whiteboard, this is it.",[47,1183],{"id":1184},"dbT5wN4XRGc",[33,1186,1188],{"id":1187},"spring-build-me-a-coding-agent","Spring, Build Me a Coding Agent",[16,1190,1191,1192,1195,1196,1199],{},"This one got a lot of attention on Twitter, and for good reason. Spring AI now has Claude Code-inspired agent skills, and in this video I show it building a ",[469,1193,1194],{},"HelloWorld"," ",[469,1197,1198],{},"RestController"," from a single prompt. We're at a point where you can describe what you want and watch Spring AI act as a coding agent to make it happen.",[16,1201,1202],{},"I think this is a really important video for anyone trying to understand where AI-assisted development is heading, especially in the Spring ecosystem. It's not about replacing developers — it's about understanding these tools so you can use them effectively. It's also not just about building a coding agent. You can use this same approach and the tools available to build your own agents for almost any scenario.",[47,1204],{"id":1205},"P8s65qu-LZI",[33,1207,1209],{"id":1208},"embabel-first-look","Embabel First Look",[16,1211,1212],{},"Embabel has been on my radar for a while, and I finally got hands on with it. First impressions: it's really good. In this video I take you through my initial exploration of the framework and show you what it can do.",[16,1214,1215],{},"If you haven't heard of Embabel yet, this is a great starting point. I break down the core concepts and walk through some real examples so you can decide if it's something worth adding to your toolkit.",[47,1217],{"id":1218},"G5VDQCZu6t0",[33,1220,1222],{"id":1221},"graphql-for-java-developers-full-course","GraphQL for Java Developers (Full Course)",[16,1224,1225],{},"I mentioned this at the top, but I want to make sure you don't miss it. I published a 10-video course called \"GraphQL for Java Developers\" on YouTube. This is a free, structured course that takes you from zero to productive with GraphQL in a Java\u002FSpring context.",[16,1227,1228,1229,1234,1235,1240],{},"If you've been curious about GraphQL but haven't found the right on-ramp from the Java side, this is for you. I cover the fundamentals, schema design, queries, mutations, and more. You can find the ",[23,1230,1233],{"href":1231,"rel":1232},"https:\u002F\u002Fwww.youtube.com\u002Fplaylist?list=PLZV0a2jwt22u5DEFwYSzOM7mg6AjL90hw",[101],"full playlist here"," and I also wrote a ",[23,1236,1239],{"href":1237,"rel":1238},"https:\u002F\u002Fwww.danvega.dev\u002Fblog\u002Fgetting-started-with-graphql-for-java-developers",[101],"companion blog post"," if you prefer reading through the concepts first.",[28,1242,93],{"id":92},[16,1244,1245,1246,1251],{},"Last week, DaShaun and I sat down with Daniel Garnier-Moiroux to talk about ",[23,1247,1250],{"href":1248,"rel":1249},"https:\u002F\u002Fspringofficehours.io\u002Fepisodes\u002Fs5e11-testing-spring-boot-applications-with-daniel-garnier-moiroux",[101],"testing Spring Boot applications",". That was a really fun conversation. Testing is one of those topics that everyone agrees is important, but the practical \"how do I actually do this well in Spring Boot?\" part trips people up. Daniel had some great insights, and I think you'll get a lot out of that episode if you haven't watched it yet. He is also writing a book on the subject, so it was great hearing about his process and how the book is going.",[16,1253,1254,1255,1260],{},"This week, we talk with Arun Gupta on ",[23,1256,1259],{"href":1257,"rel":1258},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=vY2FlLTZXqg",[101],"developer soft skills",". Arun is a DevRel and Java legend who's worked at Sun, Oracle, Intel, AWS, and Apple. We talked about a topic that doesn't get enough airtime: how communication, empathy, and what Arun calls \"force multiplying\" through non-technical skills can make or break your career. If you've ever felt like your technical skills are strong but you're not advancing the way you'd like, this episode is for you.",[28,1262,123],{"id":122},[16,1264,1265,1266,1269],{},"I'll be at ",[161,1267,1268],{},"Arc of AI"," in Austin, TX from April 13–16, and I'm giving two talks:",[1271,1272,1273,1280],"ul",{},[1274,1275,1276,1279],"li",{},[161,1277,1278],{},"Building and Securing MCP Servers in Java",": Java developers face a real challenge when it comes to securely connecting AI models with enterprise data and tools. MCP is transforming how AI applications interact with external systems, and in this session I'll cover the building blocks and show you how to build, secure, and test your MCP servers.",[1274,1281,1282,1285],{},[161,1283,1284],{},"Fundamentals of Software Engineering in the Age of AI",": There's been a lot of noise about AI replacing developers. Not so fast. In this talk, I'll make the case that agentic coding assistants make the fundamentals more important, not less. If you want to use these tools effectively, you still need to master the craft.",[16,1287,1288],{},"If you're going to be in Austin, come say hi!",[28,1290,140],{"id":139},[33,1292,1294],{"id":1293},"gemma-4-goes-open-source","Gemma 4 Goes Open Source",[16,1296,1297,1298,184],{},"Google DeepMind released Gemma 4 under the Apache license. You can read more about it ",[23,1299,742],{"href":1300,"rel":1301},"https:\u002F\u002Fx.com\u002FGoogleDeepMind\u002Fstatus\u002F2039735446628925907",[101],[16,1303,1304,1306],{},[161,1305,163],{}," This is a big deal. Having a model of this caliber available under the Apache license means Java developers and enterprises can run it wherever they want without licensing headaches. I can't wait to try this out, especially in combination with Spring AI.",[33,1308,1310],{"id":1309},"spring-ai-200-m4-released","Spring AI 2.0.0 M4 Released",[16,1312,1313,1314,1319],{},"The fourth milestone release of Spring AI 2.0.0 is ",[23,1315,1318],{"href":1316,"rel":1317},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F03\u002F26\u002Fspring-ai-2-0-0-M4-and-1-1-4-and-1-0-5-available",[101],"now available",". Alongside it, maintenance releases 1.1.4 and 1.0.5 also dropped.",[16,1321,1322,1324],{},[161,1323,163],{}," Spring AI is moving fast, and each milestone gets us closer to a stable 2.0 release. If you're building AI-powered applications with Spring, now is a great time to start experimenting with the 2.0 milestones. The improvements in each release have been significant, and the video I published this week on building a coding agent with Spring AI shows just how capable this framework is becoming.",[33,1326,1328],{"id":1327},"ai4jvm-java-meets-artificial-intelligence","AI4JVM: Java Meets Artificial Intelligence",[16,1330,1331,1332,1337],{},"A new community resource has launched at ",[23,1333,1336],{"href":1334,"rel":1335},"https:\u002F\u002Fai4jvm.com",[101],"ai4jvm.com",", focused on the intersection of Java and AI.",[16,1339,1340,1342],{},[161,1341,163],{}," I love seeing dedicated resources pop up around Java and AI. The JVM ecosystem has so much to offer in the AI space, and having a central place for the community to learn and share is great. Definitely worth bookmarking.",[28,1344,1028],{"id":171},[16,1346,178,1347,184],{},[23,1348,183],{"href":181,"rel":1349},[101],[16,1351,187,1352,191,1354,1356],{},[189,1353],{},[189,1355],{},[23,1357,198],{"href":196,"rel":1358},[101],{"title":200,"searchDepth":201,"depth":201,"links":1360},[1361,1367,1368,1369,1374],{"id":456,"depth":201,"text":457,"children":1362},[1363,1364,1365,1366],{"id":1174,"depth":206,"text":1175},{"id":1187,"depth":206,"text":1188},{"id":1208,"depth":206,"text":1209},{"id":1221,"depth":206,"text":1222},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":1370},[1371,1372,1373],{"id":1293,"depth":206,"text":1294},{"id":1309,"depth":206,"text":1310},{"id":1327,"depth":206,"text":1328},{"id":171,"depth":201,"text":1028},{"_id":1376,"path":1377,"title":1378,"description":1379,"meta":1380,"body":1383},"newsletter\u002Fnewsletter\u002F2026\u002F03\u002F30\u002Fdeep-research-agents.md","\u002Fnewsletter\u002F2026\u002F03\u002F30\u002Fdeep-research-agents","Deep Research Agents, RestClient Error Handling, and the Fundamentals That Still Matter","A packed week: three new videos on RestClient error handling, Spring AI deep research agents, and Java lazy constants, plus Spring Office Hours and upcoming talks at Arc of AI.",{"slug":1381,"date":1382},"deep-research-agents","2026-03-30T00:00:00.000Z",{"type":13,"value":1384,"toc":1535},[1385,1388,1390,1394,1400,1406,1412,1415,1419,1422,1425,1428,1431,1435,1438,1445,1448,1450,1458,1461,1464,1466,1472,1484,1486,1488,1496,1502,1505,1508,1510,1513,1516,1519,1522,1524,1529],[16,1386,1387],{},"Happy Monday, friends! Last week was a packed week. I published three new videos, had some great conversations on Spring Office Hours, and spent a lot of time thinking about how AI is changing the way we build software (and what it isn't changing). Let's get into it.",[28,1389,457],{"id":456},[33,1391,1393],{"id":1392},"getting-started-with-error-handling-in-the-restclient","Getting Started with Error Handling in the RestClient",[16,1395,1396,1397,1399],{},"If you're using Spring's ",[469,1398,585],{},", you've probably noticed it throws exceptions on HTTP errors by default. That's fine for quick prototypes, but in production you need a real strategy for handling 4xx and 5xx responses gracefully.",[16,1401,1402,1403,1405],{},"In this video, I walk through the different approaches to error handling with the ",[469,1404,585],{},". We look at how to use status handlers to intercept error responses before they become exceptions, and how to build a clean, consistent pattern for dealing with failures across your application.",[16,1407,1408,1409,1411],{},"This is one of those topics that sounds simple but trips people up in practice. If you've ever wondered what the \"right\" way to handle errors with ",[469,1410,585],{}," is, this one's for you:",[47,1413],{"id":1414},"MuYzEZk6-zI",[33,1416,1418],{"id":1417},"spring-ai-deep-research-agent","Spring AI Deep Research Agent",[16,1420,1421],{},"I built a Deep Research Agent with Spring AI that can search the web, synthesize findings, and generate reports. This was a really fun one to put together.",[16,1423,1424],{},"The idea is straightforward: give an AI agent the ability to do real research by searching the web, reading through results, and pulling together a coherent summary. Think of it as automating the kind of deep dive you'd normally spend hours doing manually. The agent uses Spring AI's tool calling capabilities to orchestrate the whole workflow.",[16,1426,1427],{},"If you're interested in building agentic applications with Spring AI, this is a solid example of what's possible right now:",[47,1429],{"id":1430},"_amdeuCM-aY",[33,1432,1434],{"id":1433},"lazy-constants","Lazy Constants",[16,1436,1437],{},"Java keeps getting better, and lazy constants are a great example of a small but meaningful improvement. This new API introduces objects that hold unmodifiable data but defer initialization until the value is actually needed.",[16,1439,1440,1441,1444],{},"If you've ever written your own lazy initialization pattern with ",[469,1442,1443],{},"volatile"," fields and double-checked locking, you know how easy it is to get wrong. Lazy constants give you a clean, built-in way to handle this. I walk through the API and show you how to use it in practice.",[47,1446],{"id":1447},"VoB2voChQzA",[28,1449,93],{"id":92},[16,1451,1452,1453,184],{},"Last week on Spring Office Hours, DaShaun and I had Billy Korando on to talk about JDK 26. There's a lot coming in this release and Billy gave us a great rundown of the features developers should be paying attention to. If you missed it, definitely go back and ",[23,1454,1457],{"href":1455,"rel":1456},"https:\u002F\u002Fspringofficehours.io\u002Fepisodes\u002Fs5e10-whats-new-in-jdk-26-with-billy-korando",[101],"check that one out",[16,1459,1460],{},"This week we had Daniel Garnier-Moiroux join us to talk about testing Spring Boot applications. Testing is one of those areas where everyone agrees it's important, but the practical \"how\" can get murky fast, especially with Spring's application context, slices, and mocking strategies. Daniel brought a ton of practical insight to the conversation:",[47,1462],{"id":1463},"C2B85YUmoR0",[28,1465,123],{"id":122},[16,1467,1468,1469,1471],{},"I'm heading to ",[161,1470,1268],{}," in Austin, TX from April 13-16, and I'm giving two talks:",[1271,1473,1474,1479],{},[1274,1475,1476,1478],{},[161,1477,1278],{},": The Model Context Protocol is quickly becoming the standard for how AI applications connect to external systems. I'll cover the building blocks of MCP and show you how to build, secure, and test your MCP servers in Java.",[1274,1480,1481,1483],{},[161,1482,1284],{},": This one is close to my heart. Agentic coding assistants are changing workflows, but the fundamentals of software engineering aren't going anywhere. I'll make the case for why mastering the craft matters more than ever.",[16,1485,1288],{},[28,1487,140],{"id":139},[33,1489,1491,1495],{"id":1490},"devolution-podcast",[1492,1493,1494],"span",{},"Dev","olution Podcast",[16,1497,1498,1499,1501],{},"I joined my good friend Nicky Pike on his ",[1492,1500,1494],{},"olution podcast for a conversation about the book and all things AI:",[47,1503],{"id":1504},"QKuZMV6A1SA",[16,1506,1507],{},"Nicky is one of those people who asks genuinely thoughtful questions, so this ended up being a really fun conversation. We talked about the book, where AI fits into a developer's daily workflow, and what I think the next couple of years look like for our industry. If you're a podcast listener, give this one a shot.",[33,1509,385],{"id":384},[16,1511,1512],{},"I got some new toys last week and hopefully this leads to higher quality videos and podcasts!",[166,1514],{"id":1515},"2037633787132068314",[16,1517,1518],{},"Vibe Coding isn't a magic fix.",[166,1520],{"id":1521},"2036433319596790211",[28,1523,1028],{"id":171},[16,1525,178,1526,184],{},[23,1527,183],{"href":181,"rel":1528},[101],[16,1530,1531,1532],{},"Happy Coding,\nDan Vega\n",[23,1533,198],{"href":196,"rel":1534},[101],{"title":200,"searchDepth":201,"depth":201,"links":1536},[1537,1542,1543,1544,1549],{"id":456,"depth":201,"text":457,"children":1538},[1539,1540,1541],{"id":1392,"depth":206,"text":1393},{"id":1417,"depth":206,"text":1418},{"id":1433,"depth":206,"text":1434},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":1545},[1546,1548],{"id":1490,"depth":206,"text":1547},"Devolution Podcast",{"id":384,"depth":206,"text":385},{"id":171,"depth":201,"text":1028},{"_id":1551,"path":1552,"title":1553,"description":1554,"meta":1555,"body":1558},"newsletter\u002Fnewsletter\u002F2026\u002F03\u002F23\u002Fjavaone-recap.md","\u002Fnewsletter\u002F2026\u002F03\u002F23\u002Fjavaone-recap","JavaOne Recap and JDK 26 has been released","A recap of JavaOne 2026 in Redwood Shores, highlights from the JDK 26 release including 10 new JEPs, and the latest news in the Spring and Java ecosystem.",{"slug":1556,"date":1557},"javaone-recap","2026-03-23T00:00:00.000Z",{"type":13,"value":1559,"toc":1836},[1560,1562,1565,1567,1570,1576,1579,1587,1595,1599,1608,1612,1712,1715,1725,1731,1734,1737,1739,1742,1745,1747,1751,1763,1765,1767,1771,1780,1785,1789,1796,1801,1805,1812,1817,1820,1822,1827],[16,1561,450],{},[16,1563,1564],{},"The last couple of weeks have been a whirlwind. I was down at JavaOne soaking in all the energy around the Java community, and then JDK 26 dropped. If you follow me on Twitter, you probably saw me posting about both of those things nonstop. It's a great time to be a Java developer, and I've got a lot to cover in this edition of the newsletter.",[16,1566,252],{},[28,1568,1569],{"id":1556},"JavaOne Recap",[16,1571,1572],{},[74,1573],{"alt":1574,"src":1575},"JavaOne 2026","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F23\u002Fjavaone.jpeg",[16,1577,1578],{},"Last week I was in Redwood Shores, right outside of San Francisco for JavaOne. If you're a Java developer and haven't had the chance to attend this conference, you need to add it to your bucket list. Being in the same rooms as the people who work on Java is both exciting and inspiring.",[16,1580,1581,1582,1586],{},"I gave a couple of talks and I think they were both pretty well received. The first was on getting started with MCP as a Java developer. We talked about the foundational components of MCP servers and even went through an example of how to build your first one. The slides can be found ",[23,1583,742],{"href":1584,"rel":1585},"https:\u002F\u002Fwww.danvega.dev\u002Fspeaking\u002Fjavaone-2026-building-securing-mcp-servers-java",[101]," and this talk was recorded so I will be sure to share it out when it's available.",[16,1588,1589,1590,1594],{},"My second talk was based on the book Nate and I wrote, The Fundamentals of Software Engineering. We have been pitching this as \"in the age of AI.\" While I keep hearing folks say the fundamentals don't matter any longer, we are taking the opposite stance. I like to say these are mini therapy sessions to talk about where we are with AI and where we might be heading. The slides can be found ",[23,1591,742],{"href":1592,"rel":1593},"https:\u002F\u002Fwww.danvega.dev\u002Fspeaking\u002Fjavaone-2026-fundamentals-software-engineering-ai",[101]," and this talk was also recorded so I will let you know when it's available.",[28,1596,1598],{"id":1597},"jdk-26","JDK 26",[16,1600,1601,1602,1607],{},"JDK 25 shipped an impressive 25 JEPs, so of course the running joke was whether 26 was going to ship 26. 🤣 They couldn't keep up that pace, so ",[23,1603,1606],{"href":1604,"rel":1605},"https:\u002F\u002Fopenjdk.org\u002Fprojects\u002Fjdk\u002F26\u002F",[101],"JDK 26 ships 10 JEPs",". Nothing in this release is going to be buzzworthy, but a couple of things stand out to me. We are making our first steps towards Integrity by Default with JEP 500, HTTP\u002F3 support, and Structured Concurrency goes into its sixth preview. I'm really hoping Structured Concurrency goes final later this year and wraps up Project Loom, which has been a huge impact to the Java ecosystem.",[28,1609,1611],{"id":1610},"features","Features",[1613,1614,1615,1628],"table",{},[1616,1617,1618],"thead",{},[1619,1620,1621,1625],"tr",{},[1622,1623,1624],"th",{},"JEP",[1622,1626,1627],{},"Title",[1629,1630,1631,1640,1648,1656,1664,1672,1680,1688,1696,1704],"tbody",{},[1619,1632,1633,1637],{},[1634,1635,1636],"td",{},"500",[1634,1638,1639],{},"Prepare to Make Final Mean Final",[1619,1641,1642,1645],{},[1634,1643,1644],{},"504",[1634,1646,1647],{},"Remove the Applet API",[1619,1649,1650,1653],{},[1634,1651,1652],{},"516",[1634,1654,1655],{},"Ahead-of-Time Object Caching with Any GC",[1619,1657,1658,1661],{},[1634,1659,1660],{},"517",[1634,1662,1663],{},"HTTP\u002F3 for the HTTP Client API",[1619,1665,1666,1669],{},[1634,1667,1668],{},"522",[1634,1670,1671],{},"G1 GC: Improve Throughput by Reducing Synchronization",[1619,1673,1674,1677],{},[1634,1675,1676],{},"524",[1634,1678,1679],{},"PEM Encodings of Cryptographic Objects (Second Preview)",[1619,1681,1682,1685],{},[1634,1683,1684],{},"525",[1634,1686,1687],{},"Structured Concurrency (Sixth Preview)",[1619,1689,1690,1693],{},[1634,1691,1692],{},"526",[1634,1694,1695],{},"Lazy Constants (Second Preview)",[1619,1697,1698,1701],{},[1634,1699,1700],{},"529",[1634,1702,1703],{},"Vector API (Eleventh Incubator)",[1619,1705,1706,1709],{},[1634,1707,1708],{},"530",[1634,1710,1711],{},"Primitive Types in Patterns, instanceof, and switch (Fourth Preview)",[33,1713,1639],{"id":1714},"prepare-to-make-final-mean-final",[16,1716,1717,1718,1721,1722,1724],{},"A feature in JDK 26 that caught my eye is that ",[469,1719,1720],{},"final"," fields are getting ready to actually be final. For years, developers have been able to use reflection to modify ",[469,1723,1720],{}," fields at runtime. It was one of those things everyone kind of knew about but nobody felt great about. Well, that loophole is closing.",[16,1726,1727,1728,1730],{},"In this video, I walk through what this change looks like in practice, why the Java team is making this move, and what it means for your existing codebases. If you have libraries or legacy code that rely on reflection hacks to modify ",[469,1729,1720],{}," fields, you'll want to understand the migration path sooner rather than later.",[16,1732,1733],{},"This one clearly resonated with the community. The tweet about it pulled in over 7,500 impressions, so I know a lot of you are paying attention to this. Check out the full video and let me know if you have questions about how this affects your projects.",[47,1735],{"id":1736},"j-y0m6j6TBc",[33,1738,93],{"id":92},[16,1740,1741],{},"Speaking of JDK 26, you're not going to want to miss a special Spring Office Hours this week as we sit down with Oracle Developer Advocate Billy Korando. We will talk about the release, JavaOne, and whatever else pops up during the live stream.",[47,1743],{"id":1744},"yCFkB9jhh94",[28,1746,123],{"id":122},[16,1748,1265,1749,1269],{},[161,1750,1268],{},[1271,1752,1753,1758],{},[1274,1754,1755,1757],{},[161,1756,1278],{},": The Model Context Protocol is quickly becoming the standard for how AI applications interact with external systems. I'll cover the building blocks of MCP and show you how to build, secure, and test your MCP servers in Java. If you're thinking about connecting AI models to your enterprise data and tools, this one's for you.",[1274,1759,1760,1762],{},[161,1761,1284],{},": Agentic coding assistants are everywhere and some people are saying software engineering is over. I don't buy it. In this talk, I'll make the case for why mastering the fundamentals of the craft matters more than ever, even as AI tools reshape our workflows.",[16,1764,1288],{},[28,1766,140],{"id":139},[33,1768,1770],{"id":1769},"spring-ai-20-m3-now-available","Spring AI 2.0 M3 Now Available",[16,1772,1773,1774,1779],{},"The Spring AI team released Milestone 3 of Spring AI 2.0. You can read the full details on the ",[23,1775,1778],{"href":1776,"rel":1777},"https:\u002F\u002Fspring.io\u002Fblog\u002F2026\u002F03\u002F17\u002Fspring-ai-2-0-0-M3-and-1-1-3-and-1-0-4-available",[101],"Spring Blog",". Speaking of the Spring Blog, have you seen the new layout? It looks fantastic.",[16,1781,1782,1784],{},[161,1783,163],{}," The Spring AI project continues to move fast. If you're building AI-powered applications on Spring, keep an eye on the 2.0 milestones. Each release is bringing the framework closer to a really polished developer experience for AI integration.",[33,1786,1788],{"id":1787},"ai-is-hurting-developer-learning","AI Is Hurting Developer Learning",[16,1790,1791,1792,184],{},"A new piece on Bytesized AI digs into research showing that AI tools are actually hurting how developers learn. You can read it ",[23,1793,742],{"href":1794,"rel":1795},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fai-is-hurting-developer-learning-and-the-research-proves-it",[101],[16,1797,1798,1800],{},[161,1799,163],{}," I actually wrote this one for my Bytesized AI newsletter. The research is pretty clear: when developers lean on AI tools too heavily, especially early in their learning journey, they're not building the mental models they need. It ties directly into why I'm giving that \"Fundamentals of Software Engineering\" talk at Arc of AI. The tools are powerful, but you still need to understand what's happening under the hood.",[33,1802,1804],{"id":1803},"stop-letting-ai-build-out-horizontally","Stop Letting AI Build Out Horizontally",[16,1806,1807,1808,184],{},"Another piece from Bytesized AI about why you should stop letting AI expand your codebase in every direction at once. Read it ",[23,1809,742],{"href":1810,"rel":1811},"https:\u002F\u002Fwww.bytesizedai.dev\u002Fp\u002Fstop-letting-ai-build-horizontally",[101],[16,1813,1814,1816],{},[161,1815,163],{}," The idea behind this comes from the concept of tracer bullets in The Pragmatic Programmer. Instead of letting AI scaffold out a wide, shallow codebase, you're better off building thin vertical slices that work end to end. It gives you a working path through your system that you can validate and build on. It's a much better way to use AI as a coding partner.",[166,1818],{"id":1819},"2033603791933870361",[28,1821,1028],{"id":171},[16,1823,178,1824,184],{},[23,1825,183],{"href":181,"rel":1826},[101],[16,1828,187,1829,191,1831,1833],{},[189,1830],{},[189,1832],{},[23,1834,198],{"href":196,"rel":1835},[101],{"title":200,"searchDepth":201,"depth":201,"links":1837},[1838,1839,1840,1844,1845,1850],{"id":1556,"depth":201,"text":1569},{"id":1597,"depth":201,"text":1598},{"id":1610,"depth":201,"text":1611,"children":1841},[1842,1843],{"id":1714,"depth":206,"text":1639},{"id":92,"depth":206,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":1846},[1847,1848,1849],{"id":1769,"depth":206,"text":1770},{"id":1787,"depth":206,"text":1788},{"id":1803,"depth":206,"text":1804},{"id":171,"depth":201,"text":1028},{"_id":1852,"path":1853,"title":1854,"description":1855,"meta":1856,"body":1859},"newsletter\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fthe-road-show-confoo-devnexus-and-on-to-javaone.md","\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fthe-road-show-confoo-devnexus-and-on-to-javaone","The Road Show: ConFoo, DevNexus, and On to JavaOne","Back-to-back conference trips to ConFoo and DevNexus kept me busy, and I'm finally home to fill you in on everything — plus what's coming at JavaOne.",{"slug":1857,"date":1858},"the-road-show-confoo-devnexus-and-on-to-javaone","2026-03-09T00:00:00.000Z",{"type":13,"value":1860,"toc":2025},[1861,1864,1872,1881,1885,1889,1892,1898,1904,1907,1911,1914,1920,1923,1929,1932,1938,1941,1943,1946,1949,1951,1957,1962,1968,1971,1973,1977,1986,1991,1995,2004,2009,2011,2016],[16,1862,1863],{},"Hey friends, it's been a couple of weeks since my last newsletter, and I owe you an update. The reason for the silence? I've been on the road. Back-to-back conference trips to ConFoo and DevNexus kept me busy, and I'm finally home, catching my breath, and ready to fill you in on everything. No new videos this week, but I've got plenty to share about the conference experience and what's coming next.",[16,1865,1866,1867,184],{},"I was a guest on The Ready, Test Go Podcast a couple of months ago, and I was excited to see that this episode was published. It was really fun talking with David about all things Cleveland, AI, Java, and more. If you want to watch the video version or find out more about the episode, you can ",[23,1868,1871],{"href":1869,"rel":1870},"https:\u002F\u002Fwww.applause.com\u002Fresources\u002Fpodcasts\u002Fep-38-craft-of-engineering-age-of-vibe-coding\u002F",[101],"go here",[16,1873,1874,1875,1880],{},"I mentioned this in a previous newsletter, but I recently ",[23,1876,1879],{"href":1877,"rel":1878},"https:\u002F\u002Fgithub.com\u002Fdanvega\u002Fspring-initializr-tui",[101],"built a terminal UI"," for scaffolding Spring Boot projects. This was powered by the Spring Initializr and built with TamboUI, a declarative Java TUI framework. It has been a lot of fun not only to build, but I use it every single day. I was excited to check this morning and find out it already has 114 stars!",[28,1882,1884],{"id":1883},"conference-season","Conference Season",[33,1886,1888],{"id":1887},"confoo","ConFoo",[16,1890,1891],{},"I had a great time at ConFoo up in Montreal. If you've never been, it's a multi-technology conference that draws a really diverse crowd of developers. What I love about ConFoo is that you end up in conversations with people who work in completely different ecosystems, and you always walk away with fresh perspectives. I gave my talks, had some fantastic hallway conversations, and got to connect with developers I've only ever interacted with online. Montreal in winter is cold, but the conference energy more than makes up for it.",[16,1893,1894],{},[74,1895],{"alt":1896,"src":1897},"ConFoo - Spring AI talk","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fconfoo_spring_ai.jpeg",[16,1899,1900],{},[74,1901],{"alt":1902,"src":1903},"ConFoo - Spring Boot 4 talk","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fconfoo_spring_boot_4.jpeg",[16,1905,1906],{},"One thing ConFoo does about as well as any conference I've ever been to is getting speakers feedback on their sessions really fast. I like this because while I'm in the moment, it's nice to hear what people thought of the session.",[33,1908,1910],{"id":1909},"devnexus","DevNexus",[16,1912,1913],{},"Right on the heels of ConFoo, I headed to DevNexus in Atlanta. DevNexus is one of the largest Java conferences in North America, and the Java community always shows up strong. The talks were excellent, the conversations were even better, and it was awesome to see so many familiar faces from the Spring community. If you were there and we got to chat, thanks for saying hello. These in-person events remind me why I love this community so much.",[16,1915,1916],{},[74,1917],{"alt":1918,"src":1919},"DevNexus - Nate and Glenn","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fdevnexus_nate_glenn.jpeg",[16,1921,1922],{},"My friend Nate Schutta and I did an 8-hour workshop on The Fundamentals of Software Engineering in the Age of AI. I thought it was awesome and it ended up being a nice little therapy session for all of us. I think we all need some time to talk and process what's going on in our industry right now. We also did a 1-hour version of this and were amazed to see that it turned out to be standing room only.",[16,1924,1925],{},[74,1926],{"alt":1927,"src":1928},"DevNexus - Standing room only","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fdevnexus_sro.jpg",[16,1930,1931],{},"We also had a book signing at the VMware Tanzu Booth, which was a lot of fun. We ended up giving away about 30 books and I want to thank everyone who made this possible.",[16,1933,1934],{},[74,1935],{"alt":1936,"src":1937},"Book signing at the VMware Tanzu Booth","\u002Fimages\u002Fnewsletter\u002F2026\u002F03\u002F09\u002Fbook_signing.jpeg",[16,1939,1940],{},"Being at two conferences in quick succession is tiring, but it's the kind of tired where you come home full of ideas and motivation. I've got a bunch of content ideas from questions people asked me at both events, so stay tuned for those in the coming weeks.",[28,1942,93],{"id":92},[16,1944,1945],{},"Before I hit the road, we recorded a DevNexus preview episode with Glenn Renfro on Spring Office Hours. If you missed it, you can catch the replay below. Glenn is always a great guest, and we talked about what to expect at DevNexus and some of the Spring-related sessions on the schedule. Now that DevNexus is behind us, I'm looking forward to doing a recap soon.",[47,1947],{"id":1948},"iIJFgihuMi4",[28,1950,123],{"id":122},[16,1952,1953,1954,1956],{},"The conference train doesn't stop. Next week I'm heading to San Francisco for ",[161,1955,1574],{}," (March 17-19), and I'm giving two talks:",[16,1958,1959,1961],{},[161,1960,1284],{},": Agentic coding assistants and AI chat interfaces are changing how we work, and some people are saying software engineering is dead. I don't buy it. In this talk, I'll make the case that the fundamentals of our craft matter more than ever. AI tools can boost productivity, but you still need to understand what you're building and why.",[16,1963,1964,1967],{},[161,1965,1966],{},"Building and Securing MCP Servers for Java Developers",": The Model Context Protocol is quickly becoming the standard for how AI applications connect with external systems and data. In this session, I'll walk through the building blocks of MCP and show you how to build, secure, and test MCP servers in Java. If you're thinking about how AI fits into your enterprise architecture, this one's for you.",[16,1969,1970],{},"If you're going to be at JavaOne, come find me and say hi. I'd love to meet you in person.",[28,1972,140],{"id":139},[33,1974,1976],{"id":1975},"introducing-gpt-54","Introducing GPT-5.4",[16,1978,1979,1980,1985],{},"OpenAI released ",[23,1981,1984],{"href":1982,"rel":1983},"https:\u002F\u002Fopenai.com\u002Findex\u002Fintroducing-gpt-5-4\u002F",[101],"GPT-5.4",", the latest in the GPT-5 family of models.",[16,1987,1988,1990],{},[161,1989,163],{}," The GPT-5 models are really good. I haven't pushed this one enough to notice a major difference yet, but initial impressions are positive. I'll report back once I've spent more time with it in my day-to-day workflows.",[33,1992,1994],{"id":1993},"notebooklm-adds-video-overviews","NotebookLM Adds Video Overviews",[16,1996,1997,1998,2003],{},"Google's ",[23,1999,2002],{"href":2000,"rel":2001},"https:\u002F\u002Fnotebooklm.google\u002F",[101],"NotebookLM"," now supports video overviews, expanding beyond its popular audio summary feature.",[16,2005,2006,2008],{},[161,2007,163],{}," I'm a huge fan of NotebookLM and I'm looking forward to giving this a try. The audio overviews were already a game-changer for digesting long documents and research. Adding video takes it to another level. Have you used it yet? I'd love to hear what you think.",[28,2010,1028],{"id":171},[16,2012,178,2013,184],{},[23,2014,183],{"href":181,"rel":2015},[101],[16,2017,187,2018,191,2020,2022],{},[189,2019],{},[189,2021],{},[23,2023,198],{"href":196,"rel":2024},[101],{"title":200,"searchDepth":201,"depth":201,"links":2026},[2027,2031,2032,2033,2037],{"id":1883,"depth":201,"text":1884,"children":2028},[2029,2030],{"id":1887,"depth":206,"text":1888},{"id":1909,"depth":206,"text":1910},{"id":92,"depth":201,"text":93},{"id":122,"depth":201,"text":123},{"id":139,"depth":201,"text":140,"children":2034},[2035,2036],{"id":1975,"depth":206,"text":1976},{"id":1993,"depth":206,"text":1994},{"id":171,"depth":201,"text":1028}]