IntelliJ IDEA
IntelliJ IDEA – the Leading Java and Kotlin IDE, by JetBrains
Java Annotated Monthly – August 2024
Welcome to this month’s Java Annotated Monthly!
As always, we bring you the latest Java news and updates on related technologies. This edition features a special section with Sebastian Daschner, who shares his favorite picks for July. You’ll also find helpful articles on Java 23, a snapshot of Java in today’s tech landscape, and much more.
Dive in to stay informed and inspired!
Featured Content
As a JetBrains Community Contributor, I’m happy and honored to contribute to this month’s edition of the Java Annotated Monthly newsletter. In the following paragraphs, you’ll find my biased views on what is interesting in the Java world this month, why you definitely should use Quarkus and IntelliJ IDEA, as well as care about developer productivity. Oh, speaking of Why You Should Use Quarkus for Your Next Project, that’s the title of my talk at this year’s JavaZone conference, happening in September in Oslo.
Let’s start with a shameless plug for a recent video I published on 13 Cool IntelliJ IDEA features that you probably didn’t know about. I’ve mentioned a few times that there is probably no single person on the planet who knows every single IntelliJ IDEA feature, including the developers at JetBrains. Our favorite Java IDE is packed with cool features, and in this video, I showcase some of them that provoked an “oh wow” reaction. Especially if you don’t know about the structural search and replace (SSR), Hippie completion, HTTP Client, or Dependency Structure Matrix (DSM) features, you should definitely have a look.
Another interesting topic that I’ve played around with is generative AI/LLMs, especially with local deployments and retrieval-augmented generation (RAG) that enables very interesting scenarios, both on internal tools and potentially on production applications, too. I was inspired by Guillaume Laforge’s session at Devoxx Poland about Gemini, the LangChain4j library, and the possibilities of RAG. Guillaume built a chatbot website on top of the Groovy documentation that knows the docs and can accurately generate responses, which, thanks to RAG, produces a much better quality output than your typical LLM chatbot. I’m curious to see what additional use cases the industry will come up with that can be helpful for developers, and of course, it shows that Java is a great fit for GenAI applications.
Another insight that I had recently was how much Quarkus is a win-win-win for the Java community, from developers’, managers’, and ecological perspectives. What I mean is that the technologies that are typically chosen from a budget or cost perspective might not have the best developer experience, nor effectiveness in terms of resource consumption. Quarkus, however, makes our applications greener thanks to its lower footprint and for the same reason saves money by being more cost-effective – especially in cloud deployments. Still, the developer experience is also outstanding, which is why pretty much all developers I talk to enjoy its quick turnaround and build times, especially its dev mode. That’s what I’d consider a win-win-win for managers, developers, and the environment. Holly Cummins also has a few great talks about Quarkus’ eco-friendliness, for example in her Voxxed Days talk Faster, greener, and happier- why Quarkus should be your next tech stack.
Java News
Java News Roundup 1, 2, 3, 4, 5 – Stay informed on the latest Java news with this weekly selection.
Java and AI? – Inside Java Newscast #72 – Nicolai Parlog talks about Java’s strengths and weaknesses in AI development. He highlights its competitive edge in integrating AI features into larger projects, thanks to projects like Valhalla, Panama, and Babylon.
Integrity by Default – Inside Java Newscast #73 – The article introduces new security measures in OpenJDK that restrict certain operations like deep reflection and native code by default.
Java 23: What’s New? – Loïc Mathieu details the new features in Java 23, including the removal of string templates, support for primitive types in patterns, and Markdown for Javadoc comments. He also covers the deprecation of unsafe memory-access methods, enhancements to the ZGC Garbage Collector, and the introduction of module import declarations.
Java Tutorials and Tips
Java 21 Virtual Threads – Dude, Where’s My Lock? – Check out how the implementation of virtual threads in Java 21 helped to enhance performance in Netflix’s microservices.
Foojay Podcast #55: Embedded Java, Part 2 – The episode explores the history of Java Micro Edition and highlights how modern embedded systems can run the same Java runtime as larger systems.
Java Language Futures – Spring 2024 Edition – Gavin Bierman discusses the rapid evolution of the Java programming language, highlighting recent changes and upcoming features expected in Java.
The power of embeddings: How numbers unlock the meaning of data – Guillaume Laforge explains how vector embeddings convert data into numerical codes that capture meaning, improving search and analysis. He covers the creation process, storage in vector databases, and applications like semantic search and anomaly detection.
Java: Demystifying The Stream API – Part 3 – Mahendra Rao B explains the Java Stream API, highlighting how it uses functional programming techniques like map, filter, and reduce for efficient data processing.
Foojay Podcast #56: Vectors in Java Code, Databases, and LLMs – In this podcast, Frank Delporte and guests Jonathan Ellis and Alexander Chatzizacharias discuss how vectors enhance AI and machine learning, looking at their practical application in the tech industry.
Java and AI – A Structured Analysis – Nicolai Parlog discusses Java’s strengths and limitations for AI development, highlighting enhancements from OpenJDK projects like Panama, Babylon, and Valhalla, and its competitive edge for large AI projects.
Project Loom – Structured Concurrency – Structured concurrency treats groups of related tasks as a single unit, improving error handling, cancellation, reliability, and observability, and it pairs well with virtual threads. This session by Alan Bateman introduces the concept and the preview API supporting it.
PASSED! Scott’s Experience Taking the Java 21 Certification Exam 1Z0-830 – If you’re planning to take this exam, this article might be helpful.
New video series “JavaFX In Action”, Part 1 – Check out the recent interviews with JavaFX developers. It showcases their projects, insights, and the benefits of using JavaFX for creating responsive, feature-rich applications.
Effective Java Logging – Muaath Bin Ali explains how developers and operations teams can leverage the Simple Logging Facade for Java (SLF4J) and Logback to turn logs into strategic resources for application management and incident resolution.
Improving Maven build times – Check out helpful tips on speeding up Maven builds. Learn to optimize dependencies, use parallel builds, and leverage build caches.
Kotlin Corner
KotlinConf 2025 Tickets Are Now on Sale! – The conference will be held from May 21–23, 2025, in Copenhagen, Denmark, featuring various workshops and sessions on Kotlin-related topics. Early bird and regular tickets are available, with workshops covering asynchronous programming, Kotlin Multiplatform, Ktor, and Compose Multiplatform.
Enhanced Column Selection DSL in Kotlin DataFrame – Garth Gilmour and Jolan Rensen detail new functions for easier column selection in Kotlin DataFrame. These enhancements include handling nested data, selecting columns by index, and using predicates.
Coroutine Essentials – Dave Leeds introduces the basics of Kotlin coroutines such as coroutine builders, suspending functions, and suspension points.
Coroutines: Concurrency in Kotlin by Dave Leeds – If you prefer a video format for the previous topic, check out this presentation.
Ultimate Kotlin TDD FizzBuzz by Duncan McGregor – Find out what the FizzBuzz kata is all about.
Xcode-Kotlin 2.0 Release by Touchlab – Xcode-Kotlin 2.0 offers up to five times faster debugging performance, expanded variable information, and support across Swift, Kotlin, and Objective-C code. The blog post provides installation instructions and showcases the improved debugging experience.
Languages, Frameworks, Libraries, and Technologies
This Week in Spring 1, 2, 3, 4, 5 – Don’t miss the recent Spring news!
What’s wrong with createDirectories() – A Beginner’s Guide to IntelliJ Profiler – Igor Kulakov explains how to use the IntelliJ Profiler to make Java applications run faster. He covers basic profiling and finding performance issues, and he also offers optimization tips with an example.
OpenTelemetry Tracing on Spring Boot, Java Agent vs. Micrometer Tracing – Nicolas Fränkel explains how to implement OpenTelemetry tracing in a microservices setup using Spring Boot and Flask applications.
9 Best Java Profilers to Use in 2024 – Lee Sheinberg reviews the top nine Java profilers for 2024, including tools like YourKit, JProfiler, and the IntelliJ Profiler. She explains their features, use cases, and how they help developers improve performance and manage memory.
Reduce Maven Plugin logging – Maarten Mulders offers tips to reduce excessive logging from Maven plugins, specifically the OpenAPI Generator Maven plugin. He suggests using SLF4J to suppress unnecessary log messages, resulting in significantly cleaner build logs.
Enhancing the Visibility of Integration Tests – Anton Belyaev provides practical tips for improving the visibility of integration tests, focusing on interactions with external services. He recommends using DSL wrappers, JsonAssert, and storing specifications in JSON files to make tests more readable and maintainable.
Better ‘printf’ Debugging – Igor Kulakov demonstrates how to use logpoints in IntelliJ IDEA to enhance traditional printf debugging. He covers the usage of live templates for logging method parameters, values, and entries, setting logging breakpoints to avoid manual log management, and managing frequent events to prevent console flooding.
Prompt Engineering – Basic Concepts For Developers – Marco Behler invites you to learn about essential concepts for writing non-trivial applications on top of LLMs.
How to use symbolic links to move the DB data folder – Vlad Mihalcea explains how to use symbolic links to move a database data folder to a different partition to free up space.
Have you ever considered just not writing bugs? by Tagir Valeev – This talk examines several Java code snippets with common mistakes and explores some tools and approaches that can prevent these bugs.
Get Started With Allocation Profiling – Igor Kulakov explains how to diagnose and fix a memory leak in a Java application using allocation profiling tools.
Conferences and Events
Check what events are available in August:
London Java Community (LJC) Live with Trisha Gee – London, United Kingdom, August 5
Bangalore JUG Meetup – Bangalore, India, August 10
Moving Java Forward Together – Online, August 21
SpringOne – Online, August 26–28
JUG.CH Sommerparty 2024 – Zurich, Switzerland, August 30
Culture and Community
FAQ: What’s a @KevlinHenney? – Find out what a @KevlinHenney screen is and why people are terrified when they see one.
Being a Responsible Developer in the Age of AI Hype – Justin Sheehy discusses the need for responsible AI development, emphasizing the importance of avoiding hype and creating ethical systems. He offers guidance on assessing AI technologies critically to ensure they are used responsibly and ethically.
Building a Culture of Continuous Experimentation – Sarah Aslanifar discusses leveraging continuous learning to drive efficiency, eliminate waste, and significantly improve product outcomes, covering the crucial role of minimum viable products (MVPs).
And Finally…
The New UI Becomes the Default in 2024.2 – Don’t miss this update if you are still using the classic UI and haven’t updated to the new one yet.
Top Tools for Java Developers in 2024 – Check out a convenient list with helpful links about the tools you might need for productive work with Java.
Using Dev Containers in JetBrains IDEs – Part 1 – Yuri Trukhin explains how dev containers streamline development in JetBrains IDEs by creating isolated, consistent environments with all the necessary tools and dependencies. This first part of the series covers the basics of dev containers, their advantages, and how to set them up for your projects.
Is Java Still Relevant Nowadays? – Despite new languages emerging, does Java remain widely used in various sectors? Find out in this blog post.
That’s all for today!
We’re gathering ideas for the next Java Annotated Monthly. Share your suggestions via email or X (formerly Twitter) by August 20. Don’t forget to explore our archive of past JAM issues to catch up on any posts or articles you might have missed.