Java Annotated Monthly – May 2025

Welcome to the May edition of Java Annotated Monthly! This month, we have a special guest – Anton Arhipov. He joins us to share standout articles and other discoveries that recently caught his expert eye. Alongside his picks, you’ll find your regular dose of Java and tech news, AI updates, and industry events that are […]

May 6, 2025 - 12:11
 0
Java Annotated Monthly – May 2025

Welcome to the May edition of Java Annotated Monthly! This month, we have a special guest – Anton Arhipov. He joins us to share standout articles and other discoveries that recently caught his expert eye. Alongside his picks, you’ll find your regular dose of Java and tech news, AI updates, and industry events that are too good to miss. 

Let’s go! 

Featured Content

Anton Arhipov

Anton is a Developer Advocate at JetBrains, working with Kotlin, IntelliJ IDEA, and AI-driven developer tools. With a background in server-side development, he has spent over a decade building software for developers. A Java Champion since 2014, Anton speaks at conferences, shares insights on the Kotlin YouTube channel, and enjoys exploring new ideas in programming languages, AI-powered tooling, and developer workflows. He’s always experimenting with new tech, looking for ways to make coding more efficient and enjoyable.

 

Here are some highlights from the world of AI programming tools this month. A lot is happening in this space, and these are just a few notable developments we’ve handpicked to share with you.

Let’s start with the recent announcements first.

This month’s exciting news in this area is the announcement of the Agent2Agent (A2A) Protocol by Google. A2A is an open standard designed to enable AI agents to securely communicate and collaborate across vendors, frameworks, and platforms. This marks a big step toward seamless interoperability between AI agents in enterprise environments.

The next biggie in the list is JetBrains rolling out a big update across our AI offerings:

  • AI Assistant and the coding agent Junie are now available under one subscription with a free tier.
  • We’ve expanded support for top-tier models like Claude 3.7 Sonnet and Gemini 2.5 Pro.
  • There’s a new edit mode for multi-file changes.

Now publicly available, Junie, your new virtual pair programmer, helps you take on complex development tasks like implementing changes across multiple files. 

A recent presentation titled Harnessing the Power of AI in IntelliJ IDEA showcased the features of  AI-assisted coding in JetBrains IDEs, from lightweight completions to full-blown agentic workflows. The key insight: Productivity comes from understanding what these tools can (and can’t) do. With tools like Junie, developers can supervise AI agents that carry out development plans and multi-file edits.

Along with the announcements, JetBrains also shared updates on Mellum, our 4B-parameter LLM designed for code completion. It includes language-specific versions for Python, Java, and Kotlin. The quality of the completions provided by this model is getting even better thanks to a local filter model that boosts suggestion accuracy by evaluating code context and user behavior.

However, it’s not all about the releases and announcements. Understanding how to use these tools and figuring out the best practices is also important. Below are some interesting articles on that topic.

Anthropic shared best practices for using Claude Code, their command-line tool for agentic programming, emphasizing the use of CLAUDE.md files to provide context and guide the agent in the same way prompts do. Claude can also help with tasks such as navigating Git history and writing commit messages, streamlining common development workflows.

The Spring AI ChatClient now supports powerful prompt engineering patterns, such as zero-shot, contextual, and self-consistency prompting to help developers build smarter, more responsive AI apps. Explore the patterns here.

The provocative blog post Revenge of the Junior Developer argues that junior developers are quicker to embrace AI tools than seniors. As agentic programming becomes more common, the role of software engineers is shifting from writing code by hand to managing and guiding AI collaborators.

Java News

Java News Roundup 1, 2, 3, 4 – Get the latest updates from the Java world. 

Finalizing the Java On-ramp – Inside Java Newscast #90 – Billy Korando previews how Java 25 will finalize the “paving the on-ramp” initiative and introduces learn.java, a new site for Java learners and educators.

JavaOne’25 Highlights – Inside Java Newscast #89Nicolai Parlog recaps JavaOne’25 with highlights like why unit tests aren’t ideal for AOT training in JDK 24, a GC primer, Maven build tips, the future of final, AI retrieval augmenters, and the roadmap for value types and null restrictions.

Java Tutorials and Tips

New Write Barriers for G1Thomas Schatzl explains how the updated write barriers in G1GC help make garbage collection faster and more efficient by reducing pause times.

Six JDK 24 Features You Should Know AboutSimon Ritter highlights six standout features in JDK 24, including ahead-of-time class loading, custom stream gatherers, the permanent removal of the security manager, and more. 

Stream Gatherers – Deep Dive with the Expert – Viktor Klang, Java Platform Group at Oracle, explores the new Gatherers API in Java 24 that allows developers to create custom intermediate operations within Java streams.

Java 24 Release Notes Overview – Security Updates – Make sure to update to the latest CPU for the Java version you’re using and watch what noteworthy security updates and fixes Java 24 brings. 

JDK 24 G1/Parallel/Serial GC Changes – Learn more about the enhancements to the stop-the-world garbage collectors, G1, Parallel, and Serial, in JDK 24. 

From Reactive Streams to Virtual Threads – Can you have both the simplicity that virtual threads promise and the resilience and safety of reactive streams? Read the article to find out. 

Sequenced Collections – Deep Dive with the ExpertStuart Marks breaks down how Java 21’s new Sequenced Collections API finally brings order to the chaos of collection manipulation, which offers developers consistent tools for handling ordered data.

Foojay Podcast #69: All Things Java at VoxxedDays Amsterdam – Over 20 attendees at VoxxedDays Amsterdam share a whirlwind of insights on AI, Java features, profiling, security, and more.

Where Is the Java Language Going? – Java Language Architect Brian Goetz offers a fast-paced look at Java’s recent enhancements and future directions, focusing on Project Amber and Project Valhalla.

Why I Believe Lombok Should Be Discarded from Java ProjectsIvelin Yanev argues that while Lombok reduces boilerplate, it introduces hidden complexity, increases compilation time, and can lead to fragile code that’s tightly coupled to its annotations. Do you agree?

Raise Code Quality by Following Martin Fowler’s Safe Refactoring Steps – Together with Emily Bache, have a look at the steps of the Replace Command with Function refactoring, also known as Instance to Static, so you can learn to do it safely too. 

Stream Gatherers – Deep Dive with the ExpertViktor Klang demonstrates how the new Gatherers API finally lets you define custom intermediate operations, making stream transformations smoother and more flexible than ever.

Ultimate Guide to Project Reactor, Thread-Locals and Context Propagation – In his article, Grzegorz Piwowarek demystifies context propagation in Project Reactor. He offers a practical guide to managing ThreadLocal across asynchronous boundaries using Reactor’s Context API and Micrometer’s context-propagation library.​

Optimizing Java for the Cloud-Native Era with Quarkus – This post explores how Quarkus can help organizations reduce costs, streamline development, and modernize their Java applications for today’s cloud-native environments. 

From RAG to Enterprise AI Agents: Building Intelligent Java Apps – Enterprise AI agents are reshaping how Java apps handle data and users. This session dives into evolving from RAG to full AI agents, integrating AI into Java platforms like Spring, Quarkus, and WebLogic, and includes live demos and hands-on tips for building and scaling intelligent, cloud-ready apps.

Kotlin Corner

The Story Behind K2 Mode and How It Works – Learn more about the journey of building K2 mode for IntelliJ IDEA – a major overhaul that unifies the compiler and IDE analysis engines for a faster, smarter Kotlin experience.​

Update on Context Parameters – Context parameters, coming in Kotlin 2.2.0-Beta, will replace context receivers and offer better support for DSLs and extension methods. This post lays out the transition plan.

Being Quick: Resolve what’s dirty. Compose Hot Reload: 1.0.0-alpha03Sebastian Sellmair explains how to speed up fixing bugs by using the idea.debugger.dispatch.port system property. It helps you jump straight to the root of the issue when debugging across JVM layers.

Custom Kotlin Coroutine RacesSam Cooper explains how to build your own race() function using channelFlow and first(). He also shares tips for handling nulls and picking custom winners.

Fire and Forget with Kotlin Coroutines – Find out how to run background tasks in Kotlin using coroutines without blocking or leaking memory.

Call Suspending Kotlin Code from Java – This article breaks down how to invoke Kotlin’s suspend functions from Java and offers practical tips to bridge the coroutine gap between the two languages.

Debugging Coroutines in IntelliJ and Android StudioAmanda Hinchman walks through practical ways to debug Kotlin coroutines in IntelliJ IDEA and Android Studio. She covers logging tricks, VM flags, and GUI tools to help you track coroutine behavior more clearly.

http4k MCP Has Landed – The http4k team introduces the new Model Context Protocol (MCP) SDK, empowering developers to build AI agents with full testability and seamless integration into the http4k ecosystem.

How Junie Helps You Code Faster with Kotlin in IntelliJ IDEA – Meet Junie, JetBrains’ new AI coding agent that helps Kotlin developers breeze through routine tasks. In this video, Sebastian Aigner demos how Junie builds full-stack apps, follows custom guidelines, fixes tests, and navigates large Kotlin Multiplatform projects.

Building MCP with Kotlin: Claude Desktop Controls My Smart Home Lights! – Check out the journey of building a Kotlin-based integration between Hue Smart Lights and Claude Desktop using the MCP SDK, Junie, and Ktor – ending with a fully functional MCP server that responds to natural language.

TypeAlias Show: Kotlin 2.1.20 – Atomics, UUIDs, and more! – The hosts dive into Kotlin 2.1.20’s new features, including Atomics and UUIDs, offering insights and practical examples for developers.

Build a REST API with Kotlin and Http4k – Deploying to AWS – This crash course walks you through the full setup from Dockerizing your app and configuring a database, to deploying it on ECS with TLS and public access. All key links and timestamps are included for easy jumping around.

A Quick Guide to htmx in KotlinPiotr walks you through building a dynamic user table using Kotlin HTML DSL, Ktor, htmx, and Tailwind CSS, blending backend and frontend in a clean, type-safe way.

AI

JetBrains IDEs Go AI: Coding Agent, Smarter Assistance, Free TierKirill Skrygan, JetBrains CEO, brings big AI news! All JetBrains AI tools, including the improved AI Assistant and new coding agent Junie, are now available within the IDEs under a single subscription and come with a free tier.

First Look at JetBrains Junie – In this video, you will learn how to build a Spring Boot application using JetBrains Junie.

Mellum Goes Open Source: A Purpose-Built LLM for Developers, Now on Hugging Face – JetBrains’ specialized LLM for code completion, Mellum, is now open source on Hugging Face! As the first in our new family of focal models, Mellum is purpose-built for accuracy, efficiency, and transparency, with an initial focus on code completion. Strong Java support included!

Optimize AI Workloads: Google Cloud’s Tips and Tricks – Learn about Google Cloud’s latest tips for trimming AI costs and boosting efficiency, including smarter container strategies, storage choices, and workload scheduling.​

Time to panic? AI and Cybercrime legislation is on your doorstep now – AI and cybercrime laws are no longer on the horizon – they’re here and reshaping how we build and secure software. If you’re in dev or security, it’s time to get in the loop on what’s coming, who’s driving it, and how to stay ahead.

Adam Sandman on Generative AI and the Future of Software TestingAdam Sandman chats with Shane Hastie about how generative AI is shaking up software testing by automating tedious tasks, boosting productivity, and blurring traditional roles, while also raising concerns about increased defects and ethical challenges.

Prompt Engineering Techniques with Spring AIChristian Tzolov dives into practical prompt engineering patterns using Spring AI, showing how to configure and apply them with the ChatClient API across various LLM providers.

LLM and Generative AI for Sensitive Data – Navigating Security, Responsibility, and Pitfalls in Highly Regulated Industries – Explore the security challenges of deploying large language models and generative AI in sensitive industries.

Foojay Webinar Live Stream: Java’s Place in the AI Revolution – Learn how to build AI/ML applications using pure Java tools. 

Unlocking AI Coding Assistants: Generate Spring Boot Application – In this article, Gunter Rotsaert explores the capabilities of AI coding assistants by generating a production-grade Spring Boot application.

Unlocking AI Coding Assistants: Generate Unit Tests – This article continues with demonstrating the power of AI agents, this time for generating unit tests for a Spring Boot app. 

AI+Coding Kata – AI is great for prototyping, reasoning, and bug hunting. Build a solid, future-proof parser for this spec in any language you like.

Languages, Frameworks, Libraries, and Technologies

This week in Spring 1, 2, 3, 4 – All the latest Spring news gathered for you in one place. 

A Bootiful Podcast: AWS Developer Advocate and industry legend James Ward – In this episode of A Bootiful Podcast, host Josh Long chats with AWS Developer Advocate and Java Champion James Ward about AWS Bedrock, Amazon Cohere, Spring AI, and MCP.

What If We Could Rebuild Kafka From Scratch? – In his thought-provoking blog post, Gunnar Morling imagines a modern, cloud-native redesign of Kafka, advocating for features like key-centric access, hierarchical topics, and built-in concurrency controls.

Even more OpenTelemetry – Kubernetes specialNicolas Fränkel shows how he improved his OpenTelemetry demo by splitting the app and infra into separate Kubernetes clusters using Helm and Traefik.

Conferences and Events

Visit these events in person or online in May:

Culture and Community

How Software Developers Can Build Their Personal Brand to Elevate Their Influence – Learn crucial insights from this article. 

Thriving through Change: Leading through Uncertainty – Jennifer Davis shows how empathy, trust, and safety aren’t just nice words, they’re your best bet when leading through messy, uncertain change.

The Duck Syndrome: A Hidden Struggle for IT Professionals – This piece reveals how many IT pros, despite appearing calm and collected, are secretly battling burnout, imposter syndrome, and the relentless pressure to keep up. If you feel anything similar, please read this article. 

The 13 software engineering lawsAnton Zaides rounds up 13 software engineering laws that every developer should know (and probably already violates).

How Senior Software Engineers Can Learn from Junior Engineers – Would you try this approach?

As an engineer, I’d rather be called stupid than stay silent – Find out how embracing vulnerability and asking so-called “stupid” questions can help you grow from a hesitant support engineer to a confident problem-solver in a complex tech environment.

A Clean Approach to Process Optimization: What I learned from my dishwasher about automating processes – Check out how treating automation like loading a dishwasher can make your processes faster and smoother.

And Finally…

IntelliJ IDEA 2025.1 Is Out! – The highlights of this release include full Java 24 support, the introduction of Kotlin notebooks, and K2 mode enabled by default, marking a major step toward delivering the best Kotlin experience. Additionally, JetBrains AI has received a significant upgrade, unifying AI Assistant and Junie under a single subscription. 

K2 Mode in IntelliJ IDEA 2025.1: Current State and FAQTeodor Irkhin lifts the curtain on K2 mode in IntelliJ IDEA 2025.1, answering every question you might have had but didn’t dare ask.

What’s New in Bazel Plugin 2025.1Justin Kaeser walks us through the Bazel plugin’s 2025.1 update for IntelliJ IDEA. 

Kotlin Notebook Arrives in IntelliJ IDEA – Meet Kotlin Notebook, now built into IntelliJ IDEA 2025.1, giving developers a powerful, interactive playground for prototyping, API exploration, data analysis, and more.

How to Use Kotlin Notebooks for Productive Development – Learn how to use Kotlin Notebooks for increased productivity. 

A Practical Guide to Testing Spring Controllers With MockMvcTesterSiva Katamreddy introduces MockMvcTester, a new feature in Spring Framework 6.2 that simplifies writing fluent, AssertJ-style assertions for Spring controller tests.

Debugging Java Code in IntelliJ IDEAMarit van Dijk demonstrates how to debug Java code in IntelliJ IDEA. She shows how to fix a failing test, trace exceptions, and spot data issues using breakpoints, stepping, and the Evaluate Expression tool.

Markdown in Java Docs? Shut Up and Take My Comments!Mala Gupta champions the shift to Markdown for Java documentation, highlighting how IntelliJ IDEA supports this modern, readable approach over outdated HTML tags.

JetBrains Terminal: A New ArchitectureYuri Trukhin introduces the new JetBrains terminal, rebuilt to be faster, more reliable, and fully integrated with the IDE.

That’s it for today! We’re always collecting ideas for the next Java Annotated Monthly – send us your suggestions via email or X by May 20. Don’t forget to check out our archive of past JAM issues for any articles you might have missed!