{"id":565098,"date":"2025-05-06T10:26:30","date_gmt":"2025-05-06T09:26:30","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=idea&#038;p=565098"},"modified":"2025-09-15T10:46:40","modified_gmt":"2025-09-15T09:46:40","slug":"java-annotated-monthly-may-2025","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/de\/idea\/2025\/05\/java-annotated-monthly-may-2025","title":{"rendered":"Java Annotated Monthly \u2013 May 2025"},"content":{"rendered":"\n<p>Welcome to the May edition of Java Annotated Monthly! This month, we have a special guest \u2013 <a href=\"https:\/\/www.linkedin.com\/in\/antonarhipov\/?originalSubdomain=ee\" target=\"_blank\" rel=\"noopener\">Anton Arhipov<\/a>. He joins us to share standout articles and other discoveries that recently caught his expert eye. Alongside his picks, you\u2019ll find your regular dose of Java and tech news, AI updates, and industry events that are too good to miss.&nbsp;<\/p>\n\n\n\n<p>Let\u2019s go!&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Featured Content<\/h2>\n\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                                                            <div class=\"about-author__box-img\">\n                            <img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/05\/1a978606d0a933300f0540687d0baac3.jpeg\" alt=\"\" loading=\"lazy\">\n                        <\/div>\n                                        <div class=\"about-author__box-text\">\n                                                    <h4>Anton Arhipov<\/h4>\n                                                <p>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\u2019s always experimenting with new tech, looking for ways to make coding more efficient and enjoyable.rnrnu0026nbsp;<\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<p>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&#8217;ve handpicked to share with you.<\/p>\n\n\n\n<p>Let\u2019s start with the recent announcements first.<\/p>\n\n\n\n<p>This month\u2019s exciting news in this area is the announcement of the <a href=\"https:\/\/developers.googleblog.com\/en\/a2a-a-new-era-of-agent-interoperability\/\" target=\"_blank\" rel=\"noopener\">Agent2Agent (A2A) Protocol<\/a> 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.<\/p>\n\n\n\n<p>The next biggie in the list is JetBrains rolling out a big <a href=\"https:\/\/blog.jetbrains.com\/blog\/2025\/04\/16\/jetbrains-ides-go-ai\/\">update across our AI offerings<\/a>:<\/p>\n\n\n\n<ul>\n<li>AI Assistant and the coding agent Junie are now available under one subscription with a free tier.<\/li>\n\n\n\n<li>We\u2019ve expanded support for top-tier models like Claude 3.7 Sonnet and Gemini 2.5 Pro.<\/li>\n\n\n\n<li>There\u2019s a new edit mode for multi-file changes.<\/li>\n<\/ul>\n\n\n\n<p>Now publicly available, Junie, your new virtual pair programmer, helps you take on complex development tasks like implementing changes across multiple files.&nbsp;<\/p>\n\n\n\n<p>A recent presentation titled <a href=\"https:\/\/www.youtube.com\/watch?v=8mxAeSqhamk\" target=\"_blank\" rel=\"noopener\"><em>Harnessing the Power of AI in IntelliJ IDEA<\/em><\/a> showcased the features of&nbsp; 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\u2019t) do. With tools like Junie, developers can supervise AI agents that carry out development plans and multi-file edits.<\/p>\n\n\n\n<p>Along with the announcements, JetBrains also <a href=\"https:\/\/blog.jetbrains.com\/ai\/2025\/03\/ai-code-completion-less-is-more\/\">shared updates on Mellum<\/a>, our 4B-parameter LLM designed for code completion. It includes language-specific versions for Python, Java, and Kotlin.<strong> <\/strong>The quality of the completions provided by this model is getting even better thanks to a <a href=\"https:\/\/blog.jetbrains.com\/ai\/2025\/03\/ai-code-completion-less-is-more\/\">local filter model<\/a> that boosts suggestion accuracy by evaluating code context and user behavior.<\/p>\n\n\n\n<p>However, it\u2019s 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.<\/p>\n\n\n\n<p>Anthropic <a href=\"https:\/\/www.anthropic.com\/engineering\/claude-code-best-practices\" target=\"_blank\" rel=\"noopener\">shared best practices<\/a> 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.<\/p>\n\n\n\n<p>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. <a href=\"https:\/\/spring.io\/blog\/2025\/04\/14\/spring-ai-prompt-engineering-patterns\" target=\"_blank\" rel=\"noopener\">Explore the patterns here<\/a>.<\/p>\n\n\n\n<p>The provocative blog post <a href=\"https:\/\/sourcegraph.com\/blog\/revenge-of-the-junior-developer\" target=\"_blank\" rel=\"noopener\"><em>Revenge of the Junior Developer<\/em><\/a><em> <\/em>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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java News<\/h2>\n\n\n\n<p>Java News Roundup <a href=\"https:\/\/www.infoq.com\/news\/2025\/04\/java-news-roundup-mar31-2025\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">1<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2025\/04\/java-news-roundup-apr14-2025\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">2<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2025\/04\/java-news-roundup-apr21-2025\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">3<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2025\/05\/java-news-roundup-apr28-2025\/\" target=\"_blank\" rel=\"noopener\">4<\/a> \u2013 Get the latest updates from the Java world.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/24\/ijn-ep-90\/\" target=\"_blank\" rel=\"noopener\">Finalizing the Java On-ramp &#8211; Inside Java Newscast #90<\/a> \u2013 Billy Korando previews how Java 25 will finalize the \u201cpaving the on-ramp\u201d initiative and introduces <a href=\"https:\/\/learn.java\/\" target=\"_blank\" rel=\"noopener\">learn.java<\/a>, a new site for Java learners and educators.<\/p>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/10\/newscast-89\/\" target=\"_blank\" rel=\"noopener\">JavaOne\u201925 Highlights &#8211; Inside Java Newscast #89<\/a> \u2013 <a href=\"https:\/\/nipafx.dev\/\" target=\"_blank\" rel=\"noopener\">Nicolai Parlog<\/a> recaps JavaOne\u201925 with highlights like why unit tests aren&#8217;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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Java Tutorials and Tips<\/h2>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/02\/new-write-barriers-g1gc\/\" target=\"_blank\" rel=\"noopener\">New Write Barriers for G1<\/a> \u2013 <a href=\"https:\/\/tschatzl.github.io\/about\/\" target=\"_blank\" rel=\"noopener\">Thomas Schatzl<\/a> explains how the updated write barriers in G1GC help make garbage collection faster and more efficient by reducing pause times.<\/p>\n\n\n\n<p><a href=\"https:\/\/foojay.io\/today\/six-jdk-24-features-you-should-know-about\/\" target=\"_blank\" rel=\"noopener\">Six JDK 24 Features You Should Know About<\/a> \u2013 <a href=\"https:\/\/foojay.io\/today\/author\/simonritter\/\" target=\"_blank\" rel=\"noopener\">Simon Ritter<\/a> 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.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/03\/javaone-stream-gatherers\/\" target=\"_blank\" rel=\"noopener\">Stream Gatherers &#8211; Deep Dive with the Expert<\/a> \u2013 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/05\/java-24-security-notes\/\" target=\"_blank\" rel=\"noopener\">Java 24 Release Notes Overview &#8211; Security Updates<\/a> \u2013 Make sure to update to the latest CPU for the Java version you\u2019re using and watch what noteworthy security updates and fixes Java 24 brings.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/07\/jdk24-gc-changes\/\" target=\"_blank\" rel=\"noopener\">JDK 24 G1\/Parallel\/Serial GC Changes<\/a> \u2013 Learn more about the enhancements to the stop-the-world garbage collectors, G1, Parallel, and Serial, in JDK 24.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/javapro.io\/2025\/04\/04\/from-reactive-streams-to-virtual-threads\/\" target=\"_blank\" rel=\"noopener\">From Reactive Streams to Virtual Threads<\/a> \u2013 Can you have both the simplicity that virtual threads promise and the resilience and safety of reactive streams? Read the article to find out.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/12\/javaone-sequenced-collections\/\" target=\"_blank\" rel=\"noopener\">Sequenced Collections &#8211; Deep Dive with the Expert<\/a> \u2013 <a href=\"https:\/\/x.com\/stuartmarks\" target=\"_blank\">Stuart Marks<\/a> breaks down how Java 21&#8217;s new Sequenced Collections API finally brings order to the chaos of collection manipulation, which offers developers consistent tools for handling ordered data.<\/p>\n\n\n\n<p><a href=\"https:\/\/foojay.io\/today\/foojay-podcast-69\/\" target=\"_blank\" rel=\"noopener\">Foojay Podcast #69: All Things Java at VoxxedDays Amsterdam<\/a> \u2013 Over 20 attendees at VoxxedDays Amsterdam share a whirlwind of insights on AI, Java features, profiling, security, and more.<\/p>\n\n\n\n<p><a href=\"https:\/\/inside.java\/2025\/04\/20\/javaone-future-java\/\" target=\"_blank\" rel=\"noopener\">Where Is the Java Language Going?<\/a> \u2013 Java Language Architect <a href=\"https:\/\/x.com\/BrianGoetz\" target=\"_blank\">Brian Goetz<\/a> offers a fast-paced look at Java&#8217;s recent enhancements and future directions, focusing on Project Amber and Project Valhalla.<\/p>\n\n\n\n<p><a href=\"https:\/\/dev.to\/yanev\/why-i-believe-lombok-should-be-discarded-from-java-projects-1g4h\" target=\"_blank\" rel=\"noopener\">Why I Believe Lombok Should Be Discarded from Java Projects<\/a> \u2013 <a href=\"https:\/\/dev.to\/yanev\" target=\"_blank\" rel=\"noopener\">Ivelin Yanev<\/a> argues that while Lombok reduces boilerplate, it introduces hidden complexity, increases compilation time, and can lead to fragile code that&#8217;s tightly coupled to its annotations. Do you agree?<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=immGpH8Sgow\" target=\"_blank\" rel=\"noopener\">Raise Code Quality by Following Martin Fowler&#8217;s Safe Refactoring Steps<\/a> \u2013 Together with <a href=\"https:\/\/x.com\/emilybache\" target=\"_blank\">Emily Bache<\/a>, have a look at the steps of the <em>Replace Command with Function<\/em> refactoring, also known as <em>Instance to Static<\/em>, so you can learn to do it safely too.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=v_5SKpfkI2U\" target=\"_blank\" rel=\"noopener\">Stream Gatherers &#8211; Deep Dive with the Expert<\/a> \u2013 <a href=\"https:\/\/x.com\/viktorklang\" target=\"_blank\">Viktor Klang<\/a> demonstrates how the new Gatherers API finally lets you define custom intermediate operations, making stream transformations smoother and more flexible than ever.<\/p>\n\n\n\n<p><a href=\"https:\/\/4comprehension.com\/ultimate-guide-to-project-reactor-thread-locals-and-context-propagation\/\" target=\"_blank\" rel=\"noopener\">Ultimate Guide to Project Reactor, Thread-Locals and Context Propagation<\/a> \u2013 In his article, <a href=\"https:\/\/x.com\/pivovarit\" target=\"_blank\">Grzegorz Piwowarek<\/a> demystifies context propagation in Project Reactor. He offers a practical guide to managing ThreadLocal across asynchronous boundaries using Reactor&#8217;s Context API and Micrometer&#8217;s context-propagation library.\u200b<\/p>\n\n\n\n<p><a href=\"https:\/\/quarkus.io\/blog\/mmaler-blogpost-1-intro\/\" target=\"_blank\" rel=\"noopener\">Optimizing Java for the Cloud-Native Era with Quarkus<\/a> \u2013 This post explores how Quarkus can help organizations reduce costs, streamline development, and modernize their Java applications for today\u2019s cloud-native environments.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=Yf952FrReFg\" target=\"_blank\" rel=\"noopener\">From RAG to Enterprise AI Agents: Building Intelligent Java Apps<\/a> \u2013 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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kotlin Corner<\/h2>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/the-story-behind-k2-mode-and-how-it-works\/\">The Story Behind K2 Mode and How It Works<\/a> \u2013 Learn more about the journey of building K2 mode for IntelliJ IDEA \u2013 a major overhaul that unifies the compiler and IDE analysis engines for a faster, smarter Kotlin experience.\u200b<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/kotlin\/2025\/04\/update-on-context-parameters\/\">Update on Context Parameters<\/a> \u2013 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.sellmair.io\/being-quick-resolve-whats-dirty\" target=\"_blank\" rel=\"noopener\">Being Quick: Resolve what&#8217;s dirty. Compose Hot Reload: 1.0.0-alpha03<\/a> \u2013 <a href=\"https:\/\/blog.sellmair.io\/\" target=\"_blank\" rel=\"noopener\">Sebastian Sellmair<\/a> 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/sam-cooper.medium.com\/custom-kotlin-coroutine-races-77161141b2ac\" target=\"_blank\" rel=\"noopener\">Custom Kotlin Coroutine Races<\/a> &#8211; <a href=\"https:\/\/sam-cooper.medium.com\/\" target=\"_blank\" rel=\"noopener\">Sam Cooper<\/a> explains how to build your own race() function using channelFlow and first(). He also shares tips for handling nulls and picking custom winners.<\/p>\n\n\n\n<p><a href=\"https:\/\/sam-cooper.medium.com\/fire-and-forget-with-kotlin-coroutines-3c8f73f0c334\" target=\"_blank\" rel=\"noopener\">Fire and Forget with Kotlin Coroutines<\/a> \u2013 Find out how to run background tasks in Kotlin using coroutines without blocking or leaking memory.<\/p>\n\n\n\n<p><a href=\"https:\/\/sam-cooper.medium.com\/call-suspending-kotlin-code-from-java-146efceb2288\" target=\"_blank\" rel=\"noopener\">Call Suspending Kotlin Code from Java<\/a> \u2013 This article breaks down how to invoke Kotlin&#8217;s suspend functions from Java and offers practical tips to bridge the coroutine gap between the two languages.<\/p>\n\n\n\n<p><a href=\"https:\/\/proandroiddev.com\/debugging-coroutines-in-intellij-and-android-studio-1c39fbb862f0\" target=\"_blank\" rel=\"noopener\">Debugging Coroutines in IntelliJ and Android Studio<\/a> \u2013 <a href=\"https:\/\/hinchman-amanda.medium.com\/\" target=\"_blank\" rel=\"noopener\">Amanda Hinchman<\/a> 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.http4k.org\/news\/http4k_mcp_has_landed\/\" target=\"_blank\" rel=\"noopener\">http4k MCP Has Landed<\/a> \u2013 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=54__1gK2K4U\" target=\"_blank\" rel=\"noopener\">How Junie Helps You Code Faster with Kotlin in IntelliJ IDEA<\/a> \u2013 Meet <a href=\"https:\/\/www.jetbrains.com\/de-de\/junie\/\" target=\"_blank\" rel=\"noopener\">Junie<\/a>, JetBrains\u2019 new AI coding agent that helps Kotlin developers breeze through routine tasks. In this video, <a href=\"https:\/\/x.com\/sebi_io\" target=\"_blank\">Sebastian Aigner<\/a> demos how Junie builds full-stack apps, follows custom guidelines, fixes tests, and navigates large Kotlin Multiplatform projects.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=jwevCa96Z4Q\" target=\"_blank\" rel=\"noopener\">Building MCP with Kotlin: Claude Desktop Controls My Smart Home Lights!<\/a> \u2013 Check out the journey of building a Kotlin-based integration between Hue Smart Lights and Claude Desktop using the MCP SDK, Junie, and Ktor \u2013 ending with a fully functional MCP server that responds to natural language.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/live\/a8-eFZ3kQVI\" target=\"_blank\" rel=\"noopener\">TypeAlias Show: Kotlin 2.1.20 &#8211; Atomics, UUIDs, and more!<\/a> \u2013 The hosts dive into Kotlin 2.1.20&#8217;s new features, including Atomics and UUIDs, offering insights and practical examples for developers.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=hMf5kmrnJl0\" target=\"_blank\" rel=\"noopener\">Build a REST API with Kotlin and Http4k &#8211; Deploying to AWS<\/a> \u2013 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.codersee.com\/quick-quide-to-htmx-kotlin\/\" target=\"_blank\" rel=\"noopener\">A Quick Guide to htmx in Kotlin<\/a> \u2013 <a href=\"https:\/\/blog.codersee.com\/author\/piotr\/\" target=\"_blank\" rel=\"noopener\">Piotr<\/a> 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.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AI<\/h2>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/blog\/2025\/04\/16\/jetbrains-ides-go-ai\/\">JetBrains IDEs Go AI: Coding Agent, Smarter Assistance, Free Tier<\/a> \u2013 <a href=\"https:\/\/x.com\/kskrygan?lang=en\" target=\"_blank\">Kirill Skrygan<\/a>, 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.youtube.com\/watch?v=qqqzIBeYoWY\" target=\"_blank\" rel=\"noopener\">First Look at JetBrains Junie<\/a> \u2013 In this video, you will learn how to build a Spring Boot application using JetBrains Junie.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/ai\/2025\/04\/mellum-goes-open-source-a-purpose-built-llm-for-developers-now-on-hugging-face\/\">Mellum Goes Open Source: A Purpose-Built LLM for Developers, Now on Hugging Face<\/a> \u2013 JetBrains\u2019 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!<\/p>\n\n\n\n<figure class=\"wp-block-image\"><a href=\" https:\/\/huggingface.co\/JetBrains\/Mellum-4b-base\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/AD_4nXffJ6aHt8ml0XcbhN4zLSSY2UDwtFIqSFlJvhBGJFMPu2wHJEAMOOFOoFEhEs4aZW_HAzniQYlH0cz6NDAMUIkrfwDph-BVfozTU6kzC_1CcCk7ciw0add2PpQ1HguqdLPJD_Zw0w.png\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.infoq.com\/news\/2025\/04\/optimize-ai-workload\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Optimize AI Workloads: Google Cloud\u2019s Tips and Tricks<\/a> \u2013 Learn about Google Cloud&#8217;s latest tips for trimming AI costs and boosting efficiency, including smarter container strategies, storage choices, and workload scheduling.\u200b<\/p>\n\n\n\n<p><a href=\"https:\/\/foojay.io\/today\/time-to-panic-ai-and-cybercrime-legislation-is-on-your-doorstep-now\/\" target=\"_blank\" rel=\"noopener\">Time to panic? AI and Cybercrime legislation is on your doorstep now<\/a> \u2013 AI and cybercrime laws are no longer on the horizon \u2013 they\u2019re here and reshaping how we build and secure software. If you&#8217;re in dev or security, it\u2019s time to get in the loop on what\u2019s coming, who\u2019s driving it, and how to stay ahead.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.infoq.com\/podcasts\/generative-ai-future-software-testing\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Adam Sandman on Generative AI and the Future of Software Testing<\/a> \u2013 <a href=\"https:\/\/www.linkedin.com\/in\/adamsandman\/\" target=\"_blank\" rel=\"noopener\">Adam Sandman<\/a> chats with <a href=\"https:\/\/www.linkedin.com\/in\/shanehastie\/?originalSubdomain=nz\" target=\"_blank\" rel=\"noopener\">Shane Hastie<\/a> 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.<\/p>\n\n\n\n<p><a href=\"https:\/\/spring.io\/blog\/2025\/04\/14\/spring-ai-prompt-engineering-patterns\" target=\"_blank\" rel=\"noopener\">Prompt Engineering Techniques with Spring AI<\/a> \u2013 <a href=\"https:\/\/spring.io\/authors\/tzolov\" target=\"_blank\" rel=\"noopener\">Christian Tzolov<\/a> dives into practical prompt engineering patterns using Spring AI, showing how to configure and apply them with the ChatClient API across various LLM providers.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.infoq.com\/presentations\/llm-ml-security\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">LLM and Generative AI for Sensitive Data &#8211; Navigating Security, Responsibility, and Pitfalls in Highly Regulated Industries<\/a> \u2013 Explore the security challenges of deploying large language models and generative AI in sensitive industries.<\/p>\n\n\n\n<p><a href=\"https:\/\/foojay.io\/today\/foojay-webinar-live-stream-javas-place-in-the-ai-revolution\/\" target=\"_blank\" rel=\"noopener\">Foojay Webinar Live Stream: Java\u2019s Place in the AI Revolution<\/a> \u2013 Learn how to build AI\/ML applications using pure Java tools.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/mydeveloperplanet.com\/2025\/04\/02\/unlocking-ai-coding-assistants-generate-spring-boot-application\/\" target=\"_blank\" rel=\"noopener\">Unlocking AI Coding Assistants: Generate Spring Boot Application<\/a> \u2013 In this article, <a href=\"https:\/\/mydeveloperplanet.com\/about\/\" target=\"_blank\" rel=\"noopener\">Gunter Rotsaert<\/a> explores the capabilities of AI coding assistants by generating a production-grade Spring Boot application.<\/p>\n\n\n\n<p><a href=\"https:\/\/mydeveloperplanet.com\/2025\/04\/16\/unlocking-ai-coding-assistants-generate-unit-tests\/\" target=\"_blank\" rel=\"noopener\">Unlocking AI Coding Assistants: Generate Unit Tests<\/a> \u2013&nbsp;This article continues with demonstrating the power of AI agents, this time for generating unit tests for a Spring Boot app.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/abdullin.com\/ai-coding\/kata-1\/\" target=\"_blank\" rel=\"noopener\">AI+Coding Kata<\/a> \u2013 AI is great for prototyping, reasoning, and bug hunting. Build a solid, future-proof parser for this spec in any language you like.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Languages, Frameworks, Libraries, and Technologies<\/h2>\n\n\n\n<p>This week in Spring <a href=\"https:\/\/spring.io\/blog\/2025\/04\/01\/this-week-in-spring-april-1st-2025\" target=\"_blank\" rel=\"noopener\">1<\/a>, <a href=\"https:\/\/spring.io\/blog\/2025\/04\/15\/this-week-in-spring-april-15th-2025\" target=\"_blank\" rel=\"noopener\">2<\/a>, <a href=\"https:\/\/www.infoq.com\/news\/2025\/04\/spring-news-roundup-apr21-2025\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">3<\/a>, <a href=\"https:\/\/spring.io\/blog\/2025\/04\/29\/this-week-in-spring-april-29th-2025\" target=\"_blank\" rel=\"noopener\">4<\/a> \u2013 All the latest Spring news gathered for you in one place.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/spring.io\/blog\/2025\/04\/04\/a-bootiful-podcast-james-ward\" target=\"_blank\" rel=\"noopener\">A Bootiful Podcast: AWS Developer Advocate and industry legend James Ward<\/a> \u2013 In this episode of <em>A Bootiful Podcast<\/em>, host <a href=\"https:\/\/joshlong.com\/\" target=\"_blank\" rel=\"noopener\">Josh Long<\/a> chats with AWS Developer Advocate and Java Champion <a href=\"https:\/\/jamesward.com\/\" target=\"_blank\" rel=\"noopener\">James Ward<\/a> about AWS Bedrock, Amazon Cohere, Spring AI, and MCP.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.morling.dev\/blog\/what-if-we-could-rebuild-kafka-from-scratch\/\" target=\"_blank\" rel=\"noopener\">What If We Could Rebuild Kafka From Scratch?<\/a> \u2013 In his thought-provoking blog post, <a href=\"https:\/\/www.morling.dev\/about\/\" target=\"_blank\" rel=\"noopener\">Gunnar Morling<\/a> imagines a modern, cloud-native redesign of Kafka, advocating for features like key-centric access, hierarchical topics, and built-in concurrency controls.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.frankel.ch\/even-more-opentelemetry-kubernetes\/\" target=\"_blank\" rel=\"noopener\">Even more OpenTelemetry \u2013 Kubernetes special<\/a> \u2013 <a href=\"https:\/\/blog.frankel.ch\/\" target=\"_blank\" rel=\"noopener\">Nicolas Fr\u00e4nkel<\/a> shows how he improved his OpenTelemetry demo by splitting the app and infra into separate Kubernetes clusters using Helm and Traefik.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conferences and Events<\/h2>\n\n\n\n<p>Visit these events in person or online in May:<\/p>\n\n\n\n<ul>\n<li><a href=\"https:\/\/jax.de\/mainz\/\" target=\"_blank\" rel=\"noopener\">JAX Hybrid<\/a> \u2013 Mainz, Germany or online, May 5\u20139<\/li>\n\n\n\n<li><a href=\"https:\/\/www.devoxx.co.uk\/\" target=\"_blank\" rel=\"noopener\">Devoxx UK<\/a> \u2013 London, United Kingdom, May 7\u20139. Meet these JetBrains speakers there: <a href=\"https:\/\/www.linkedin.com\/in\/antonarhipov\/?originalSubdomain=ee\" target=\"_blank\" rel=\"noopener\">Anton Arhipov<\/a>, <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a>, <a href=\"https:\/\/x.com\/VBragilevsky\" target=\"_blank\">Vitaly Bragilevsky<\/a>, and <a href=\"https:\/\/www.linkedin.com\/in\/michelle-frost-dev\/\" target=\"_blank\" rel=\"noopener\">Michelle Frost<\/a>.&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.javaday.istanbul\/\" target=\"_blank\" rel=\"noopener\">Java Day Istanbul<\/a> \u2013 Istanbul, T\u00fcrkiye, May 10<\/li>\n\n\n\n<li><a href=\"https:\/\/2025.europe.jcon.one\/\" target=\"_blank\" rel=\"noopener\">JCON Europe<\/a> \u2013 Cologne, Germany, May 12\u201315. <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a> will be a speaker.&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/www.jonthebeach.com\/\" target=\"_blank\" rel=\"noopener\">J On The Beach<\/a> \u2013 Malaga, Spain, May 14\u201316<\/li>\n\n\n\n<li><a href=\"https:\/\/jprime.io\/\" target=\"_blank\" rel=\"noopener\">JPrime<\/a> \u2013 Sofia, Bulgaria, May 14\u201315<\/li>\n\n\n\n<li><a href=\"https:\/\/2025.geecon.org\/\" target=\"_blank\" rel=\"noopener\">GeeCON<\/a> \u2013 Krak\u00f3w, Poland, May 14\u201316. Meet JetBrains speakers <a href=\"https:\/\/www.linkedin.com\/in\/antonarhipov\/?originalSubdomain=ee\" target=\"_blank\" rel=\"noopener\">Anton Arhipov<\/a> and <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a>.<\/li>\n\n\n\n<li><a href=\"https:\/\/info.jetbrains.com\/idea-livestream-may15-2025.html\" target=\"_blank\" rel=\"noopener\">Unleash the Power of Git with IntelliJ IDEA Version Control Tools<\/a> \u2013 Online, May 15<\/li>\n\n\n\n<li><a href=\"https:\/\/2025.springio.net\/\" target=\"_blank\" rel=\"noopener\">Spring I\/O<\/a> \u2013 Barcelona, Spain, May 21\u201323. Meet the JetBrains team at the booth and join the talks by <a href=\"https:\/\/www.linkedin.com\/in\/antonarhipov\/?originalSubdomain=ee\" target=\"_blank\" rel=\"noopener\">Anton Arhipov<\/a> and <a href=\"https:\/\/www.marcobehler.com\/\" target=\"_blank\" rel=\"noopener\">Marco Behler<\/a>.&nbsp;&nbsp;<\/li>\n\n\n\n<li><a href=\"https:\/\/kotlinconf.com\/\" target=\"_blank\" rel=\"noopener\">KotlinConf 2025<\/a>, Copenhagen, Denmark, May 21\u201323<\/li>\n\n\n\n<li><a href=\"https:\/\/jnation.pt\/\" target=\"_blank\" rel=\"noopener\">JNation Conference<\/a> \u2013 Coimbra, Portugal, May 27\u201328<\/li>\n\n\n\n<li><a href=\"https:\/\/makeit.si\/jcon\/\" target=\"_blank\" rel=\"noopener\">JCON OpenBlend Slovenia<\/a> \u2014 Portoro\u017e, Slovenia, May 28\u201330. Meet <a href=\"https:\/\/www.linkedin.com\/in\/antonarhipov\/?originalSubdomain=ee\" target=\"_blank\" rel=\"noopener\">Anton Arhipov<\/a> and join his session.&nbsp;<\/li>\n\n\n\n<li><a href=\"http:\/\/jalba.scot\/\" target=\"_blank\" rel=\"noopener\">JAlba<\/a> \u2013 Edinburgh, Scotland, May 28\u201331<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/lp.jetbrains.com\/intellij-idea-conf-2025\/?utm_source=newsletter&amp;utm_medium=jam&amp;utm_campaign=intellijideaconf\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/09\/AD_4nXduodMK1mko0J9Mvm02jRnLMRvxSwY9ema9jOBYAiQwjsrlyLq1X4t21IEa5xENicqseBjv1oA5e8LEtU2oS-1pvywkZwf7vM_abvlSyY-mVfQQ0RwWUB8M6vKF5aUOSEEnh-REvA.gif\" alt=\"\"\/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Culture and Community<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.infoq.com\/news\/2025\/04\/software-dev-personal-brand\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">How Software Developers Can Build Their Personal Brand to Elevate Their Influence<\/a> \u2013 Learn crucial insights from this article.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/www.infoq.com\/presentations\/change-strategy\/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global\" target=\"_blank\" rel=\"noopener\">Thriving through Change: Leading through Uncertainty<\/a> \u2013 Jennifer Davis shows how empathy, trust, and safety aren\u2019t just nice words, they\u2019re your best bet when leading through messy, uncertain change.<\/p>\n\n\n\n<p><a href=\"https:\/\/medium.com\/womenintechnology\/the-duck-syndrome-a-hidden-struggle-for-it-professionals-12de6f67fb1f\" target=\"_blank\" rel=\"noopener\">The Duck Syndrome: A Hidden Struggle for IT Professionals<\/a> \u2013 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.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/newsletter.manager.dev\/p\/the-13-software-engineering-laws\" target=\"_blank\" rel=\"noopener\">The 13 software engineering laws<\/a> \u2013 <a href=\"https:\/\/substack.com\/@antonzaides\" target=\"_blank\" rel=\"noopener\">Anton Zaides<\/a> rounds up 13 software engineering laws that every developer should know (and probably already violates).<\/p>\n\n\n\n<p><a href=\"https:\/\/www.infoq.com\/news\/2025\/04\/software-engineers-learning\/\" target=\"_blank\" rel=\"noopener\">How Senior Software Engineers Can Learn from Junior Engineers<\/a> \u2013 Would you try this approach?<\/p>\n\n\n\n<p><a href=\"https:\/\/shiftmag.dev\/asking-questions-engineering-career-advice-4895\/\" target=\"_blank\" rel=\"noopener\">As an engineer, I\u2019d rather be called stupid than stay silent<\/a> \u2013 Find out how embracing vulnerability and asking so-called &#8220;stupid&#8221; questions can help you grow from a hesitant support engineer to a confident problem-solver in a complex tech environment.<\/p>\n\n\n\n<p><a href=\"https:\/\/queue.acm.org\/detail.cfm?id=3722546\" target=\"_blank\" rel=\"noopener\">A Clean Approach to Process Optimization: What I learned from my dishwasher about automating processes<\/a> \u2013 Check out how treating automation like loading a dishwasher can make your processes faster and smoother.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">And Finally\u2026<\/h2>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/intellij-idea-2025-1\/\">IntelliJ IDEA 2025.1 Is Out!<\/a> \u2013 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.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/k2-mode-in-intellij-idea-2025-1-current-state-and-faq\/\">K2 Mode in IntelliJ IDEA 2025.1: Current State and FAQ<\/a> \u2013 <a href=\"https:\/\/www.linkedin.com\/in\/teodor-irkhin\/\" target=\"_blank\" rel=\"noopener\">Teodor Irkhin<\/a> lifts the curtain on K2 mode in IntelliJ IDEA 2025.1, answering every question you might have had but didn\u2019t dare ask.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/what-s-new-in-bazel-plugin-2025-1\/\">What\u2019s New in Bazel Plugin 2025.1<\/a> \u2013 <a href=\"https:\/\/www.linkedin.com\/in\/justinkaeser\/\" target=\"_blank\" rel=\"noopener\">Justin Kaeser<\/a> walks us through the Bazel plugin\u2019s 2025.1 update for IntelliJ IDEA.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/kotlin-notebook-arrives-in-intellij-idea\/\">Kotlin Notebook Arrives in IntelliJ IDEA<\/a> \u2013 Meet Kotlin Notebook, now built into IntelliJ IDEA 2025.1, giving developers a powerful, interactive playground for prototyping, API exploration, data analysis, and more.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/how-to-use-kotlin-notebooks-for-productive-development\/\">How to Use Kotlin Notebooks for Productive Development<\/a> \u2013 Learn how to use Kotlin Notebooks for increased productivity.&nbsp;<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/a-practical-guide-to-testing-spring-controllers-with-mockmvctester\/\">A Practical Guide to Testing Spring Controllers With MockMvcTester<\/a> \u2013 <a href=\"https:\/\/blog.jetbrains.com\/author\/siva-katamreddy\/\">Siva Katamreddy<\/a> introduces MockMvcTester, a new feature in Spring Framework 6.2 that simplifies writing fluent, AssertJ-style assertions for Spring controller tests.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/debugging-java-code-in-intellij-idea\/\">Debugging Java Code in IntelliJ IDEA<\/a> \u2013 <a href=\"https:\/\/maritvandijk.com\/\" target=\"_blank\" rel=\"noopener\">Marit van Dijk<\/a> 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 <em>Evaluate Expression<\/em> tool.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/markdown-in-java-docs-shut-up-and-take-my-comments\/\">Markdown in Java Docs? Shut Up and Take My Comments!<\/a> \u2013 <a href=\"https:\/\/x.com\/eMalaGupta\" target=\"_blank\">Mala Gupta<\/a> champions the shift to Markdown for Java documentation, highlighting how IntelliJ IDEA supports this modern, readable approach over outdated HTML tags.<\/p>\n\n\n\n<p><a href=\"https:\/\/blog.jetbrains.com\/idea\/2025\/04\/jetbrains-terminal-a-new-architecture\/\">JetBrains Terminal: A New Architecture<\/a> \u2013 <a href=\"https:\/\/x.com\/trukhinyuri\" target=\"_blank\">Yuri Trukhin<\/a> introduces the new JetBrains terminal, rebuilt to be faster, more reliable, and fully integrated with the IDE.<\/p>\n\n\n\n<p>That\u2019s it for today! We\u2019re always collecting ideas for the next Java Annotated Monthly \u2013 send us your suggestions via <a href=\"https:\/\/mail.google.com\/mail\/u\/0\/?fs=1&amp;tf=cm&amp;source=mailto&amp;to=JAM@jetbrains.com\" target=\"_blank\" rel=\"noopener\">email<\/a> or <a href=\"https:\/\/x.com\/intellijidea?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor\" target=\"_blank\">X<\/a> by May 20. Don\u2019t forget to check out our archive of <a href=\"https:\/\/www.jetbrains.com\/lp\/jam\/\" target=\"_blank\" rel=\"noopener\">past JAM issues<\/a> for any articles you might have missed!<\/p>\n","protected":false},"author":1138,"featured_media":565257,"comment_status":"closed","ping_status":"closed","template":"","categories":[89],"tags":[6847,8725,8527,40,155,3236,8647,8759,5318],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/idea\/565098"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/users\/1138"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/comments?post=565098"}],"version-history":[{"count":7,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/idea\/565098\/revisions"}],"predecessor-version":[{"id":602697,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/idea\/565098\/revisions\/602697"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media\/565257"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/media?parent=565098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/categories?post=565098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/tags?post=565098"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/de\/wp-json\/wp\/v2\/cross-post-tag?post=565098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}