Java Annotated Monthly – June 2023
Welcome to Java Annotated Monthly!
In this edition, we’ll share an abundance of Java news, specifically focusing on the planned features for JDK 21. As always, you’ll find a wide range of tutorials covering Java, Kotlin, and other related technologies.
Additionally, we have thought-provoking blog posts discussing the potential threat that AI poses to developers and the importance of studying ML. Finally, don’t forget to explore the list of upcoming conferences scheduled for June!
Stay informed and inspired with our hand-picked collection of Java insights and resources.
JavaDoc JDK 20 Updates – Sip of Java – JDK 20 brought several changes to JavaDoc. This article looks at how these changes can help you learn about preview features and make linking easier.
Interpolating Strings Like a King in Java 21 – Inside Java Newscast #47 – Watch this short video to get more familiar with string templates, which help you deal with literal text with embedded expressions and use template processors to produce specialized results.
Java Gets a Boost with String Templates: Simplifying Code and Improving Security – JEP 430, String Templates (Preview), has been promoted from Proposed to Targeted status for JDK 21.
Java Gets a Boost with the Record Pattern, Enabling More Expressive Coding – JEP 440, Record Patterns, has progressed from Proposed to Targeted status for JDK 21. The feature will be fully delivered with improvements based on feedback from previous preview rounds.
JEP proposed to target JDK 21: 452: Key Encapsulation Mechanism API – This JEP introduces an API for key encapsulation mechanisms (KEMs) – an encryption technique for securing symmetric keys using public key cryptography.
Breaking down Barriers: Introducing JDK 21’s Approach to Beginner-Friendly Java Programming – JEP 445, Unnamed Classes and Instance Main Methods (Preview), has been promoted to Targeted status. This feature is designed to make it easier for beginners to write their first programs in Java without needing to understand advanced features.
The SolutionFactory To Java’s Problems – Keynote – Is verbose Java too old school and not fun for modern “kids”? Project Amber aims to modernize the language! In this presentation, you’ll discover how it addresses the existing pain points of Java.
Quality Outreach Heads-up – JDK 21: Sequenced Collections Incompatibilities – When you use Sequenced Collections, newly created interfaces introduce new default methods which can cause conflicts resulting in source or binary incompatibilities. Read this article to find out what kind of conflicts may arise and how to deal with them.
State of Java Survey – Azul is conducting a Java user survey until June 15, 2023. If you participate (which takes about 10 minutes), you’ll receive the survey report and have a chance to win prizes like a MacBook Pro or a set of AirPods. Your participation will also contribute to the collective knowledge.
Java Tutorials and Tips
A Glance At The Java Performance Toolbox – Ana-Maria Mihalceanu demonstrates how JDK tools can help you gain insights into classes and threads and can perform live GC analysis or heap dump post-processing.
Java Concurrency: Condition – In this article, learn how to make threads wait on specific conditions by using the Condition interface.
These notions represent sequential code that may suspend or yield execution at some point by itself and can be resumed by a caller.
Arrays Utility Class – Sip of Java – Take a look at how to efficiently use the Arrays class for handling everyday operations on arrays.
Formatting Inlined @value in Javadocs – Javadoc specifies the details of our methods using special tags. This article studies several new tags that can improve your Javadoc experience.
Creating Scalable OpenAI GPT Applications in Java – In this article and included video, you’ll learn to incorporate the OpenAI GPT engine into your Java projects.
Foojay Podcast #23: Java Profiling and Performance – In this podcast, you’ll gain insights into the challenges of Java profiling, explore various profiling approaches, and discover when and how to use profiling to optimize your code performance.
Unleashing the Power of Lightweight Concurrency: A Comprehensive Guide to Java Virtual Threads (Part 1) – In this article, A N M Bazlur Rahman covers the basics of Java virtual threads, how they work, why they are beneficial for developers, and how they overcome the limitations of traditional Java threads.
OpenJDK – Change the Future of Java – Oracle has created the OpenJDK Developers’ Guide for aligning developers around terminology and processes for participating in the OpenJDK Project. Watch the video to learn how you can contribute to the future of Java.
Avoiding Pitfalls With Java Optional: Common Mistakes and How To Fix Them [Video] – Learn how to avoid traps with Java Optional and use it efficiently to produce readable code.
Patterns: Exhaustiveness, Unconditionality, and Remainder – This article explains how to provide compile-time checking for whether a particular switch is exhaustive for its selector type.
Rolling Binary Trees: A Guide to Common Design Patterns in Java – In this article, George Tanev introduces a linear time algorithm for moving and implementing binary trees in Java.
Languages, Frameworks, Libraries, and Technologies
Spring Transaction and Connection Management – Vlad Mihalcea explains how Spring handles transaction and database connection management. The covered topics include Spring TransactionInterceptor, read-write and read-only Spring data JPA database connection management, pushing the @Transactional methods further down to data-specific services, and more.
Spring Boot Debugging with Aspect-Oriented Programming (AOP) – Shai Almog demonstrates how to use AOP to debug a Spring Boot application effectively.
How to Backup and Restore a PostgreSQL Database – Discover all of the process stages, from preparing a database to using commands to back up and restore a PostgreSQL database.
Postgres JSON Functions With Hibernate 5 – Take a look at how you can add support for JSON functions in your projects that use Hibernate 5 and Postgres with the posjsonhelper library.
Is Podman a Drop-in Replacement for Docker? – You may have read that Podman is a drop-in replacement for Docker. But is it actually as easy as it sounds? In this blog, you will start with a production-ready Dockerfile and execute Podman commands like you would when using Docker.
Java Developer vs. ChatGPT Part I: Writing a Spring Boot Microservice – Roni Dover describes an experiment where a seasoned Java developer is pitted against the all-knowing generative AI to find out once and for all if an AI can generate a Java microservice end to end.
Hugging Face Presents HuggingChat, Open Source Alternative to ChatGPT – HuggingChat is a new AI chatbot on Hugging Face that can perform various tasks like article drafting, coding, problem-solving, and answering questions – just like ChatGPT but with a cuter name.
Write Once, Run Embedded in any IDE – After creating several Java GUI applications, Anthony Goubard found it interesting to run them within IntelliJ IDEA, Eclipse, and NetBeans. Instead of writing three plugins for each application, he devised a solution described in this article.
Using Async-Profiler and Jattach Programmatically with AP-Loader – Johannes Bechberger shares his approach to reducing hassle when using async-profiler and jattach. He wrapped async-profiler and jattach in a platform-independent JAR which can be pulled from Maven Central. In this article, he focuses on its programmatic usage.
Building High Performance Microservices for Java with Micronaut & GraalVM – In this video, Bert Beckwith walks you through Micronaut’s support for GraalVM Native Image. You can also take a look at new support for developing portable multi-cloud applications and microservices and preview some of the features in Micronaut 4, including support for records and virtual threads.
The Power of Precise Names: An Example – Is it always bad to have a long method name? Or is it beneficial because it provides precision? Discover the answer in this article.
KotlinConf’23 videos – All of the videos from the recent KotlinConf are live on YouTube! Check out the keynote for all of the announcements!
TalkingKotlin podcast: Synthesizing a Database with Kotlin – Does synthesizing a database sound like magic to you? In this episode of Talking Kotlin, we discuss how Synthesized.io uses Kotlin together with custom DSLs and OpenAPI to do just that!
Kotlin Coroutines 1.7.0 – The most recent release is here!
How to implement hexagonal architecture with your Spring Boot application – In this article, Matthias Schenk shows how to implement a hexagonal architecture using Spring Boot with Kotlin.
Functional Error Handling in Kotlin, Part 1: Absent values, Nullables, Options – Riccardo Cardin focuses on the functional approaches to error handling in Kotlin and introduces the Arrow library.
How to start with Coroutines in Spring Boot applications – Matthias Schenk describes the very basics when starting to work with Kotlin coroutines in a Spring Boot application for the first time.
Data Objects in Kotlin – Domen Lanišnik writes about the data objects introduced in Kotlin 1.7.20 and those that are currently planned to be released in version 1.9. You can take a closer look at what they are and what issue they try to solve.
Conferences and Events
Check out the list of upcoming events that may be of interest to you:
Ignite Summit – Ignite Summit is the premier event for developers who are interested in using Apache Ignite, distributed databases, and in-memory computing to tackle speed and scale challenges.
Culture and Community
Foojay Podcast #22: When Profession and Fun Overlap – In this episode of the Foojay Podcast, volunteers from different organizations explain how coding is used to inspire children to become engineers, or at least, learn to make the most out of the computers and tools around them.
Discovering the Secrets to Success: An Exclusive Interview with Java Champion Michael P. Redlich – Michael P. Redlich, a software developer with over 30 years of experience, highlights the significance of continuous learning, adapting to new technologies, and contributing to open-source projects. He addresses the current challenges faced by developers, including the rapid expansion of cloud computing, and shares entertaining anecdotes from his extensive industry experience.
Why I’m not so Alarmed about AI and Jobs – If you feel like your skills are not strong enough to survive the invasion of AI, this article is for you.
How to get into ML for a developer? – Is it necessary to start from scratch to become an ML specialist, or can you somehow upgrade your existing knowledge?
Rules of Thumb for Software Development Estimations – In his article, Vadim Kravchenko reveals the honest facts about software estimation. You will discover the importance of estimations, along with the right and wrong methods to approach them.
A Developer Perspective on Developer Experience – Paul Kelly shares examples from real companies that, in his opinion, frustrate developers and make it difficult for them to deliver. He also offers advice, from a developer’s perspective, on how to create an environment that supports innovation.
Google Maps Previews Aerial View API – Google Maps has introduced exciting new features like cinematic videos of points of interest, immersive views for routes, photorealistic 3D tiles, enhanced route customization, and more.
Working on an unfamiliar codebase – It’s common for developers to work on an unfamiliar codebase. Nicolas Fränke describes how he approaches the situation with the help of diagramming.
Tips for Effective Time Management – How can you maximize productivity and achieve your goals in a limited amount of time? Gunter Rotsaert shares his ideas on how to use your time wisely. Create to-do lists, say no to less important tasks, use in-between moments, and get many more tips from this article.
Decoding Success: An Industry Expert’s Guide to Thriving in Software Development and Security – In this insightful interview, Erik Costlow, Senior Director of Product Management at Azul, provides valuable insights on his transition from engineering to product management, current industry trends, software development challenges, and advice for new programmers.
IntelliJ IDEA 2023.2 EAP Is Open! – We are now ready to provide you with new features and product enhancements in the Early Access Program for v2023.2.
What’s New in IntelliJ IDEA 2023.1 for Spring Developers – This article highlights the most crucial updates introduced in v.2023.1, including full support for Lombok, reworked Spring tool window, navigation for Spring Security rules, and more.
How to Work With Protobuf-Maven Projects in IntelliJ IDEA – Protobuf, short for Protocol Buffers, is a language-agnostic data serialization format developed by Google. It is designed to efficiently and reliably serialize structured data to communicate between systems and programming languages. Read this article to learn more about the possibilities of working with Protobuf in IntelliJ IDEA.
Virtual Threads and Structured Concurrency in Java 21 With Loom – Watch this recording of our recent webinar, where José Paumard shows how virtual threads and structured concurrency work.
That’s all for today!
To propose content for the next edition of Java Annotated Monthly, reach out to us via email or Twitter. Keep in mind that articles need to be submitted by June 20.
Lastly, don’t forget that all JAM issues are archived on a dedicated website. So, if you came across an interesting blog but couldn’t read it at the time, don’t fret – you can find it there!
Subscribe to Blog updates
Java Best Practices
Good code follows certain rules, and knowing them increases your chances of success. We’d like to share some Java best practices that will help you on your way. We'll cover the must-know tips and tricks, from broad advice on software development to Java- and project-specific know-how. Let's get star…
The New Terminal (Beta) Is Now in JetBrains IDEs
The new terminal (Beta) is now in JetBrains IDEs and will be available in the new UI starting from the 2024.1 version of the IDEs.
‘HelloWorld’ and ‘main()’ meet minimalistic
"Just ignore the terms class, public, static and arg for now; we'll talk about it later". If you have ever mentioned these lines to a new Java student, who is about to execute their first 'HelloWorld' program, know that this is changing. If you are that student, well, congratulations, getting starte…
Easy Hacks: How To Implement Polymorphism in Java
Polymorphism is the ability of an object to take on different forms. In programming, this means that a variable or a method can have different behaviors depending on the type of object it represents. While the term may sound intimidating to beginners, polymorphism is a powerful tool: it helps you re…