IntelliJ IDEA
IntelliJ IDEA – the Leading Java and Kotlin IDE, by JetBrains
Java Annotated Monthly – June 2024
The latest edition of Java Annotated Monthly is here! This month, we’re thrilled to welcome Tom Cools to share some of the interesting things he’s found of late in our Featured Content section. As always, we bring you the latest Java news, highlighting the key JEPs set to be available in Java 23. You’ll also find engaging articles on Spring, debugging, PostgreSQL, and more. Plus, don’t miss the list of online and offline events happening in June. Dive in and enjoy the read!
Make sure you never miss our jam-packed monthly selection:
Featured content
It’s not every day you get invited to write the featured content section of a newsletter you read every month, so I am beyond excited to share some of my favorite content of the past month!
I won’t let Java confuse you is a series of blog posts by Nataliia Dziubenko that go into some of the weirder intricacies of the Java programming language. This month, she published a piece on “unreachable code” and why your brain and the compiler might disagree on whether code is reachable or not.
It’s great to see how the Java space is keeping up with the evolutions in LLMs. I was specifically impressed when I ran into Llama3.java, where Alfonso Peterssen implemented Llama3 inference in a single Java file! You can hear him talk about his efforts in Adam Bien’s AirHacks episode on the topic. The episode also mentions LangChain4j, which is something that if you haven’t checked out yet, you absolutely should by taking a look at Lize Raes’ talk at DevoxxUK.
On the architecture side, Modular Monoliths are increasing in popularity, balancing the simplicity of monoliths with the flexibility of microservices. Victor Rentea’s talk at Devoxx UK is an excellent starting point if you want to learn more about this architecture style. The talk itself is insanely entertaining.
I’ll finish up with a topic close to my heart. When I became a father last summer, I struggled to reconcile my work ambitions with my new family life. If you are a new parent, or in happy anticipation, this presentation Back on Track: Navigating the Return to Work after Parental Leave by Marharyta Nedzelska is a must-see for you!
Java News
Java News Roundup 1, 2, 3, 4 – Check out all the Java news for May.
JavaDoc Hits the Markdown on Comments – Inside Java Newscast #68 – Writing code documentation with custom JavaDoc tags and HTML can be complex and error-prone. That’s why JEP 467 can be very useful. It introduces Markdown syntax in comments, making Java documentation easier to read and maintain.
Module Imports in Java 23 – Inside Java Newscast #69 – Nicolai Parlog talks about JDK Enhancement Proposal 476: module import declarations. This preview feature has already been merged into JDK 23, so you can try it in the early access build.
JEP 474: Generational Mode Now Standard for ZGC in Java – This JEP is currently targeted to JDK 23 and aims to switch the Z Garbage Collector (ZGC) from non-generational to generational mode by default. The non-generational mode will be deprecated and removed in a future JDK release.
JEP 447: Refining Java Constructors for Enhanced Flexibility – After its review, JEP 447, Statements before super(…), was included in JDK 22. This JEP allows certain statements to appear before super()calls in constructors without affecting safety and initialization.
Java Tutorials and Tips
Let’s Replace the synchronized Keyword – Anthony Goubard explores different ways to replace the synchronized keyword to make your code more compatible with virtual threads.
Calling Microservices in Java: Part 1 – This article guides you through different ways of calling microservices in Java, from basic methods to more advanced ones, and will share tips on best practices and common mistakes.
Remotely Recording a JFR Log from a Container (Without Using the Command Line) – Matt Van Order demonstrates alternative tools and methods to achieve this.
Is your Java application ready for the next generation of server CPUs? – This article discusses how to prepare your Java application for new server CPUs. It focuses on optimizing Java applications so that they can use modern CPU features like increased core counts and improved performance.
Spring AI: How to Write GenAI Applications with Java – Together with Jennifer Reif, Ccheck this out if you would like to see how the integration of AI and Java applications and Spring works.
Apache Maven 102: Best Practices – Brian Demers covers best practices for using Apache Maven. He focuses on single and multi-module projects, providing insights on troubleshooting builds and optimizing your Maven usage.
Data-Oriented Programming in Java – Version 1.1 – This first article in a series by Nicolai Parlog discusses new language features and principles for modeling data immutably and transparently, separating operations from data. The series will further explore these concepts and their integration with object-oriented and functional programming.
Java: Functional Programming f(x) – Part 1 – Mahendra Rao B demonstrates how to use functional programming principles to write more concise and efficient Java code.
This is not your uncle’s Java! Modeling with Java 22 records pattern matching in practice – Oskar Dudycz presents the latest enhancements in Java 22, focusing particularly on records and pattern matching. It demonstrates how these features can be used in practice, using an event-sourced shopping cart as an example.
How to write a left-fold streams collector in Java – This article discusses how to write a left-fold collector in Java. It provides a step-by-step guide to implementing this functional programming pattern, explaining its benefits and uses in Java streams.
Gemini, Google’s Large Language Model, for Java Developers – This blog post explains how Gemini can enhance Java development through advanced features like code generation, refactoring assistance, and intelligent documentation. The talk provides insights into integrating this AI model into development workflows to boost productivity and code quality.
Foojay Podcast #50: JCON Report, Part 2 – Maven, Software Security, Code Quality – The Foojay Podcast Episode 50 celebrates this important milestone with a special edition featuring various guests from the Java community discussing their experiences, insights, and the evolution of the Java ecosystem.
Kotlin Corner
KotlinConf 2024 Keynote – Watch the opening session from this year’s KotlinConf to learn about all the latest Kotlin news and meet the team.
Celebrating Kotlin 2.0: Fast, Smart, and Multiplatform – Read this article to learn more about the release highlights, including enhanced performance, smarter features, and expanded multiplatform capabilities. The update aims to make Kotlin faster, more intelligent, and more versatile for developers working across different platforms.
Amper update May 2024 – This blog post introduces a standalone version of Amper, highlights recent tooling improvements, and discusses new features in Amper 0.3.0, including support for JVM, Android applications, and upcoming iOS support.
Compose Multiplatform 1.6.10 – Check out the recent updates in Compose Multiplatform. The article provides improvements like the stable multiplatform resources API, an experimental navigation library, and a common Lifecycle library. The update also supports Kotlin 2.0 and introduces a new Compose compiler Gradle plugin.
K2 Compiler Performance Benchmarks and How to Measure Them on Your Projects –
Sarah Haggarty explains how to measure the performance of the K2 compiler for Kotlin. She covers the setup and use of performance benchmarks, highlights significant improvements in compilation speed, and provides tools and guidelines for collecting performance data on your own projects.
Streamline Data Analysis with Kotlin DataFrame Tables in Notebooks – From this article, you will learn what Kotlin DataFrame is and how it simplifies working with tabular data. Nikita Ermolenko demonstrates its integration with Jupyter notebooks for efficient data manipulation and visualization. The article also covers practical examples to showcase the library’s capabilities.
Kotlin Coroutines for Accelerated Data Ingestion in Google Cloud – Watch this tutorial on creating a video chat application using Kotlin Multiplatform Mobile (KMM) to learn about the setup, coding, and integration of video chat features.
fun code() – A magazine for Kotlin™ developers (available for download as a PDF) – The Kotlin Magazine GitHub repository contains issues of Kotlin Magazine, a publication focused on tutorials and updates on Kotlin features and projects.
Languages, Frameworks, Libraries, and Technologies
This Week in Spring 1, 2, 3, 4 – Never miss any news from the world of Spring.
Spring Tips: Beans, Beans: What’s in a Spring Bean? – Get ready to study the fundamentals of Spring beans. Discover what they are, how they are created, and why they matter to you.
A Bootiful Podcast: Carl Azoury, Zenika founder and CEO – Join in to listen to Carl Azoury’s journey, Zenika’s mission, and contribution to the tech community. The conversation covers various aspects of software development and open-source involvement, providing insights into the industry and Zenika’s innovative practices.
Spring AI: Getting Started – Vojtech Ruzicka demonstrates how to implement machine learning models, natural language processing, and other AI-driven features within the Spring framework.
Advanced Practices in Spring Boot: Building a Modular Application with Docker, Zipkin, and 100% Code Coverage – Dive into advanced Spring Boot practices with Dimitar Makariev! Learn to build a modular app using clean architecture, Docker, and Zipkin, and achieve 100% code coverage.
Spring Tips: Spring Cloud Gateway for Spring MVC – Check out the latest Spring Tips video on integrating Spring Cloud Gateway with Spring MVC, made even better by virtual threads support in Java 21.
Debugger.godMode() – Igor Kulakov shows how to use a debugger to modify and control the behavior of applications without access to their source code. He illustrates the process using an IntelliJ IDEA plugin that plays Space Invaders, showing how to achieve “god mode” by manipulating the game’s memory and state.
Software Testing as a Debugging Tool – Shai Almog shows the importance of thorough testing to identify and fix bugs and provides best practices for effective debugging through tests.
5 Ways to Debug Quarkus JVM Applications – Sebastian Daschner shares some practical strategies for successful debugging of Quarkus apps.
Power Up Your Java OO Design Skills | Parrot Refactoring Kata – Learn what The Parrot Refactoring Kata is with Emily Bache.
Exploring Cost-Effective Solutions for Stateful Rest Services: A Case Study with IBM Cloud Code Engine, EclipseStore, and IBM Cloud Object Storage – Johannes Rabauer discusses various strategies to optimize the performance and cost-efficiency of stateful services, including using caching, load balancing, and efficient resource management.
The best way to use the JPA OneToOne optional attribute – This article by Vlad Mihalcea discusses best practices for mapping a one-to-one optional relationship in JPA and Hibernate. It provides insights on using @OneToOne annotations, the pros and cons of different approaches, and recommendations for optimizing performance and simplifying code.
PostgreSQL plan_cache_mode – Vlad Mihalcea explains how to use PostgreSQL’s plan cache mode to optimize query performance. It discusses the different plan cache modes available, their benefits, and how to configure them for specific use cases.
OpenAI Announces New Flagship Model GPT-4o – OpenAI has announced GPT-4o, an enhanced version of their flagship model, which offers improved speed and capabilities in handling speech, vision, and multilingual tasks. Some more details and useful links can be found in this article.
A Simple Plain-Text Knowledge System – As a knowledge worker, having a note-taking system is crucial for learning new topics. It helps you keep track of acquired knowledge and provides additional pointers for further exploration. Sebastian Daschner shows a simple, plain-text-file-based knowledge system powered by your editor of choice.
The Vary HTTP header – In this article, Nicolas Fränkel explains the Vary HTTP header and its importance in content negotiation and caching.
Create Tweets With X API v2 – Do you want to learn how to create Tweets from a Java application using the X (Twitter) API v2? This blog post contains a step-by-step guide that will show you how to do exactly that.
Generate Object Mapping Using MapStruct – Gunter Rotsaert explains how to generate object mappings using MapStruct, a Java annotation processor for automating the creation of mappings between different object models.
Docker Compose Profiles, one the most useful and underrated features – Oskar Dudycz explains how to use Docker Compose profiles to manage different configurations for development, testing, and production environments.
Conferences and Events
Here are the most anticipated events, both online and offline:
JSail Unconference – Hemelum, the Netherlands, June 3–7
JNation – Coimbra, Portugal, June 4–5
Le Paris JUG Java Day – Paris, France, June 6
Jenseits von «Schreibt Fleissig Unit Tests» – Zurich, Switzerland, June 6
Migration issues, ZGC, Virtual Threads – Stronger Java – Bangalore, India, June 8
GOTO Amsterdam – Amsterdam, the Netherlands, June 10–12
BrabantJUG meetup – Breda, the Netherlands, June 11
DevBcn – Barcelona, Spain, June 13–14
DevConf – Brno, Czech Republic, June 13–15
J-Spring – Utrecht, the Netherlands, June 13
JJUG CCC 2023 Spring – Tokyo, Japan, June 16
Loom / Virtual thread monitoring – Bern, Switzerland, June 18
Loom / Virtual thread monitoring – Lucerne, Switzerland, June 19
Loom / Virtual thread monitoring – Zurich, Switzerland, June 20
Devoxx Poland – Krakow, Poland, June 19–21
Voxxed Days Luxemburg – Mondorf-les-Bains, Luxembourg, June 20–21
LJC Summer Unconference 2024 – London, United Kingdom, June 24
Learn Spring Boot Applications for the Cloud – Zurich, Switzerland, June 25
Chopping the monolith – Bern, Switzerland, June 26
JManc Unconference 2024 – Manchester, United Kingdom, June 28
Culture and Community
Podcast: Tips and Techniques for Improving Retrospectives – Esther Derby and David Horowitz discuss how to enhance engagement, ensure psychological safety, and achieve actionable outcomes during agile retrospectives.
39 Years of Coding – Peter Kofler shares his inspiring, almost four-decade-long coding journey from Commodore 64 to Garmin’s Monkey C language.
Distracting software engineers is much more harmful than you think – Find out what deep work is and how you can help developers reach the flow state.
Knowledge Graphs – What Are They? – Learn the benefits of knowledge graphs, which explain how to represent data through nodes (entities) and edges (relationships). This structure simplifies querying and data traversal compared to traditional databases.
Hacking our way to better team meetings – Boost your team meetings with AI! Dr. Werner Vogels shares how his team developed Distill using AWS services to transcribe and summarize meetings, improving efficiency.
Why reading whitepapers takes your career to the next level (and how to do it) – Micah Lerner explains how gaining insights from technical papers can enhance personal growth and industry knowledge. Learn how to choose, find, and dive deep into impactful research.
And Finally…
IntelliJ IDEA 2024.2 EAP Is Open! – The IntelliJ IDEA 2024.2 Early Access Program (EAP) is now open! Try out the updates and help shape the future of the IDE with your feedback.
Easy Hacks: How to Use Java Streams for Working With Data – Discover the power of Java Streams for efficient data processing! Khalid Abuhakmeh shares tips on filtering, mapping, and reducing data collections with Java Streams, plus IntelliJ IDEA shortcuts.
Java Runtimes: Insights From the Spring Boot Point of View – Choosing the right Java runtime for your Spring Boot project is more critical than it seems. Even though most of them are based on OpenJDK and TCK-verified, not all runtimes are fully identical. From tooling support to container optimization, each runtime offers unique benefits. Dive into expert insights from Aleksey Stukalov and Catherine Edelveis on making a thoughtful choice!
Videos
IntelliJ IDEA Conf – All the talks are now available to watch online!
Running Uncensored and Open Source LLMs on Your Local Machine – In our recent webinar, Kenneth Kousen demonstrated how general AI models like ChatGPT and Claude AI are often restricted by vendors. You will learn about the Ollama system, which lets you run open-source models locally without strict guardrails for enhanced privacy.
That is all for today!
We’re already gathering ideas for the next Java Annotated Monthly, so feel free to share your suggestions via email or X by June 20. Also, don’t forget to explore our archive of past JAM issues, which is perfect for catching up on any blog posts or articles you may have missed.