IntelliJ IDEA
IntelliJ IDEA – the Leading Java and Kotlin IDE, by JetBrains
Java Annotated Monthly – November 2024
Java Annotated Monthly is here! Check out the latest news across Java, Spring, AI, and emerging technologies. We offer practical tutorials to enhance your skills, a curated list of November’s top tech events, both online and offline, and an exclusive feature by industry expert Mala Gupta.
Stay informed, and stay ahead!
Featured Content
In this featured section, I want to highlight ‘JEP Explained‘ – a collection of heartfelt conversations with the Java architects and experts who helped bring Java 23 features to life. These conversations dive into JDK Enhancement Proposals (JEPs), which are the key features planned for each JDK release. Our hope with this series is to help developers, teams, and anyone passionate about Java not just understand the new Java features, but to look beyond the syntax and dig into the bigger picture with behind-the-scenes stories and the experiences of experts. Here’s the link to the blog post and YouTube playlist.
Java 23, released in September 2024, has twelve JEPs, and the ‘JEP Explained’ series covers eleven of them. Each conversation packs a bunch of information beyond the JEP itself. For instance, when we talked with Brian Goetz about JEP 455 (about the addition of primitive types to pattern matching), he also talked about balancing new features and complexity in software development, why compiler writers love pattern matching, how designing a feature is often a lesson in humility, and how the evolution of design is an organic process. If this sounds interesting to you, check out the complete interview for more insights from Brian, Aggelos Biboudis, and Tagir Valeev, as they all discuss the inclusion of primitive types in pattern matching.
99% of developers I talked with believe that one of the reasons for deprecating an API in Java is the availability of better APIs. Ron Pressler stated this is never the case, when we talked with him about JEP 471 (deprecation of Memory-Access Methods in the sun.misc.Unsafe class). Ron also talked about ‘Tip and Tail: a smarter way to manage codebases for different JDKs’, whether folks are swimming naked when they use outdated code, the real secret to performance gains, and much more. Check out this conversation with Ron for more insights.
We had another interesting conversation with Viktor Klang and Tagir Valeev about Stream Gatherers in the Streams API. Apart from discussing JEP 473, Viktor touched on topics such as ‘The Power of Simplicity in Software Design’ and how bugs can’t hide in simplicity. He shared how the built-in gatherers can inspire folks, show what this feature can do, help them to get started using them, and then help them create custom gatherers. Viktor also shared why he loves to use JShell for prototyping. Tagir shared that the most complex code that he has ever written was for a Stream API library that he created, streamex. Check out the full interview for more stories.
It was a pleasure to talk about being able to use Markdown for writing documentation comments in JavaDoc with Jonathan Gibbons, owner of JEP 467, and Dmitry Chuyko. Jonathan talked about making Java more approachable by simplifying its documentation with Markdown. He discussed why Markdown is a game changer for JavaDoc and addressed which Markdown flavor to use. Dmitry talked about a challenge related to documentation at work – what happens when the documentation of a codebase is larger than its codebase? Check out the full interview here.
It was an honor and a privilege to interview all of these Java architects and experts for the JEP Explained interview series: Dr. Venkat Subramaniam, Ken Fogel, Rafael Winterhalter, José Paumard, Zoran Sevarac, Monica Beckwith, Paul Bakker, and Gavin Bierman.
Though I would have loved to, it is not feasible to highlight all of the fantastic “aha!” moments and learning I experienced while talking with all the guests. Check out the playlist of JEP Explained interviews and this blog post for more details.
Java News
Java News Roundup 1, 2, 3, 4 – As usual, the most detailed news digest on all things Java is here.
The Inside Java Newsletter: Welcome Java 23! – All the news about the recent release of Java 23 and the related events is conveniently grouped here.
Check out some helpful info on the JEPs in progress:
- JEP 14: The Tip & Tail Model of Library Development
- JEP 485: Stream Gatherers
- JEP 484: Class-File API
- JEP 475: Late Barrier Expansion for G1
- JEP 489: Vector API (9th Incubator)
- JEP 472: Prepare to Restrict the Use of JNI
Big News from Project Valhalla – Inside Java Newscast #77 – Nicolai Parlog discusses Project Valhalla’s latest draft proposal, which introduces value classes, null-restricted types, and other enhancements. The episode recaps Brian Goetz‘s JVMLS 2024 presentation on these updates.
Loom – Where Are We? #JVMLS – Alan Bateman discusses the latest updates on Project Loom, focusing on its goal of enhancing Java’s concurrency model with lightweight, high-performance virtual threads.
Java Language Futures – Fall 2024 Edition – In his talk, Gavin Bierman provides an overview of recent developments in the Java programming language and discusses upcoming features and future directions presented at Devoxx Belgium 2024.
Stream Gatherers (JEP 485) – Cay Horstmann discusses JEP 485, introducing gatherers for Java Streams, which enhance stream processing with stateful transformations for complex operations.
Serialization – A New Hope – Java Serialization, now nearly 30 years old, faces new demands. Viktor Klang introduces a streamlined, data-focused model that leverages recent Java enhancements for safer, more flexible object state management and serialization. Ready for the shift?
Java Tutorials and Tips
Take a look at some articles by Miro Wengner in which he explores the new features in JDK 23:
- Exploring New Features in JDK 23: Null object pattern to avoid null pointer exception with JEP-455
- Exploring New Features in JDK 23: Gatherers upgrades pipeline design pattern JEP-461
Testing your Java code with mocks and real Elasticsearch – Piotr Przybyl explores two approaches to testing applications using Elasticsearch as a dependency.
Java Integer Caching: why and how – Nataliia Dziubenko explains Java’s Integer Caching mechanism, covering how and why Java caches small Integer values to optimize memory and speed.
10 Billion Integers Walk Into an Array – Donal Raab talks about the surprising discoveries after an experiment with 64-bit Pharo Smalltalk.
Coding Interview Challenge Practice: Learn How to Approach The Gilded Rose and Other Katas to Read and Improve Code – Check out some practical techniques by Emily Bache for improving and understanding complex code through popular coding exercises like The Gilded Rose Kata.
Are Virtual Threads Going to Make Reactive Programming Irrelevant? – José Paumard explores how virtual threads might replace reactive programming by simplifying concurrency and enhancing performance.
Using Lombok Library With JDK 23 – Arnošt Havelka provides tips for fixing compatibility issues when using the Lombok library with JDK 23.
AI Integration for Java: To the Future, From the Past – The panelists discuss workflows, staff impact, and utilizing different tools, frameworks, and services to integrate AI in Java applications.
Easily containerize Java applications with cloud native buildpacks – Grace Jansen explains how to quickly containerize Java apps using Cloud Native Buildpacks, an open-source project that is gaining significant momentum within the developer community by offering a polyglot solution with impressive features and advantages.
How to use LazyConnectionDataSourceProxy with Spring Data JPA – In this article, Vlad Mihalcea explains how to use LazyConnectionDataSourceProxy with Spring Data JPA to delay database connection use until it’s truly needed, improving efficiency.
Kotlin Corner
Ktor 3.0: New Features and Improved Performance – This blog post will give you a solid overview of what’s new and improved in Ktor 3.0.
Compose Multiplatform 1.7.0 Released – Learn more about the release, which brings type-safe navigation, enhanced performance on iOS, and added support for drag-and-drop on desktop platforms.
The Evolution of the Kotlin Language and How You Can Contribute – Find out how the Kotlin Evolution and Enhancement Process (KEEP) works and what you can do to contribute to the further development of the language.
Using DynamoDB with Ktor part 1, part 2, part 3 – Check out a series of articles by Matthias Schenk in which he explains the basics of integrating Amazon DynamoDB with a Ktor application.
Spring Boot, S3 and Kotlin part 1, part 2, part 3 – This is also a helpful series that explains how to make a Spring Boot Kotlin app work with AWS S3 Object Storage using the S3Client.
Making my concurrent algorithm 6000% better – Charlie Tap shares insights into optimizing a concurrent algorithm, boosting its performance significantly through careful analysis and improvements.
Kotlin Under the Hood: Exploring Constructors and Init Blocks – Abhaysing Bhosale explains the types of constructors in Kotlin and how init blocks function, giving a simple look at how they work internally.
Kotlin Multiplatform Developer Roadmap – This roadmap helps developers to navigate Kotlin Multiplatform (KMP) and understand the essential tools and concepts needed to excel in cross-platform development with Kotlin.
Applying the Factory Method and Abstract Factory Patterns in Kotlin – Explore how to enhance flexibility in object creation using the Factory Method and Abstract Factory design patterns.
Dave Leeds examines code that benefits from these patterns, applies the traditional approach from the classic Gang of Four book, and demonstrates how Kotlin’s features can modernize these implementations.
Get your KotlinConf 2025 ticket – Join us in Copenhagen on May 21–23, 2025, for the biggest KotlinConf yet! With 2,500 attendees, you’ll explore modern server-side, web, mobile, and desktop Kotlin development, and enjoy days full of sessions, workshops, and networking with top professionals from across the industry.
KotlinConf 2025 is calling for speakers – Whether it’s server-side, Kotlin Multiplatform, AI, or best practices, we want to hear from you. Submit your talk and inspire others with your experience at the biggest Kotlin event.
Join Kotlin Multiplatform Contest – If you are a student or recent graduate, you can win a trip to KotlinConf 2025. Showcase your creativity and coding skills by building a cross-platform project using Kotlin Multiplatform technology.
Languages, Frameworks, Libraries, and Technologies
This Week in Spring 1, 2, 3, 4 – All the Spring-related news is here for you.
Efficient Debugging Exceptions – This blog post by Igor Kulakov explores efficient techniques for debugging Java exceptions, focusing on handling exceptions like NumberFormatException and demonstrating advanced debugger tools to capture context, test fixes, and apply changes without restarting the application.
The Art of Full Stack Debugging – Shai Almog demonstrates techniques and best practices for effective full-stack debugging.
SQL Best Practices Every Java Engineer Must Know – This guide explores key strategies for optimizing SQL queries specifically for Java engineers.
Supercharging Your AI Applications with Spring AI Advisors – Christian Tzolov explains how to enhance AI applications using Spring AI’s Advisor system, which allows developers to modularize, intercept, and transform requests and responses within chat applications.
Generally AI – Season 2 – Episode 1: Generative AI and Creativity – In this podcast, you can listen to a talk about how generative AI can boost creativity, focusing on its potential as a supportive tool rather than a replacement for human creators.
AI, Rust, and Resilience: Key Software Trends Seen by the QCon San Francisco 2024 Program Committee – Curious about software trends? Check them out here.
Things you never dared to ask about LLMs – Guillaume Laforge answers common questions and clears up mysteries about how large language models work.
Profile IntelliJ IDEA with its own profiler – Igor Kulakov explores how to use IntelliJ IDEA’s built-in profiler to diagnose performance issues within the IDE itself, offering insights for plugin developers and users seeking to troubleshoot bottlenecks in their projects.
Podcast: Generally AI – Season 2 – Episode 3: Surviving the AI Winter – In this podcast, you will learn what “AI winters” and “summers” are.
Conferences and Events
Have a look at the networking and education opportunities for November:
W-Jax – Munich, Germany, November 4-8
Harnessing the Power of AI in IntelliJ IDEA – Basel, Switzerland, November 6
Øredev – Malmö, Sweden, November 6-8
JFall – Ede, Netherlands, November 7
Heapcon – Belgrade, Serbia, November 7
JavaDays Czech Republic – Prague, Czech Republic, November 12-13
Build GraphQL Services with Spring Boot like Netflix – Online, November 14
CRaCing Java Snapshots – Atlanta, USA, November 19
JavaFest India – Bengaluru, India, November 23
Culture and Community
Use correct Unicode characters – Despite modern technology, we often use text characters as if we’re still limited to typewriters, creating typographic mishaps and accidental ASCII art. Unicode solved this over two decades ago. Check out these examples to bring sophistication and precision to your writing.
The Best Morning Routine (Backed by Science) – Taylor Pearson writes about building a morning routine that boosts productivity and well-being. He draws on historical examples and science.
Software Engineer Titles Have (Almost) Lost All Their Meaning – Trevor I. Lasn questions whether job titles like “senior engineer” in the tech industry still reflect actual experience and skill levels. Are titles becoming just labels? What do you think?
And Finally…
Top 10 IntelliJ IDEA Shortcuts for Efficient Data Querying With the Database Tools – We’ve gathered the most helpful shortcuts to speed up and streamline data querying in IntelliJ IDEA.
Ktor 3.0 Is Now Available With New Features and Improved Performance – Find out what Ktor is and learn about the latest updates and improvements introduced in Ktor 3.0.
Code Analysis for Your Projects With IntelliJ IDEA and Qodana – Improve your code base using code analysis from IntelliJ IDEA and Qodana. Run specific inspections, analyze code, fix problems, and add inspections to your CI/CD pipeline.
How to Build a CRUD REST API Using Spring Boot – Dive into building a CRUD REST API with Spring Boot and supercharge your productivity using IntelliJ IDEA. From project setup to testing, this guide covers all the essentials! Perfect for beginners and pros alike.
Livestreams and videos
7 Ways AI Assistant Can Help You with Version Control – From resolving tricky merge conflicts to generating precise commit messages, AI Assistant offers tools that can save you time and boost your productivity.
The Problem of Understanding Code is Solved: AI Assistant to the Rescue – Struggling to understand complex code? JetBrains AI Assistant is here to help! In this video, we walk you through practical examples of how AI Assistant simplifies code comprehension. From summarizing projects and explaining classes to clarifying regex and runtime errors, this tool enhances your productivity and understanding.
Unfreeze Your Apps: Debugging Tips – In this video, you will look at how to locate code without much prior knowledge of the project structure and APIs, debug hanging applications, and fix faulty code on the fly.
New episodes of JEP Explained:
- JEP 480: Structured Concurrency
- JEP 476: Module Import Declarations
- JEP 471: Deprecate the Memory-Access Methods in sun.misc.Unsafe for Removal
- JEP 474 – ZGC: Generational Mode by Default
- JEP 469: Vector API
- JEP 473: Stream Gatherers
- JEP 467: Markdown Documentation Comments
Migrating Kotlin Plugins to K2 Mode – As Kotlin moves toward enabling K2 mode by default, it’s essential for plugin authors to ensure compatibility with the Kotlin API. This livestream will guide you through updating your plugins for K2, covering compatibility verification, code adaptation with examples, and troubleshooting migration challenges.
How to not create a plugin for JetBrains IDEs – This talk explores essential IDE features for tackling everyday challenges and shows how to share them with your team for smoother collaboration.
That’s it for today! We’re collecting ideas for the next Java Annotated Monthly – send your suggestions via email or X by November 20. Don’t forget to check out our archive of past JAM issues for any articles you may have missed!