In May, I shared that JVM Weekly became a friend of Friends of OpenJDK (Foojay.io) - a community-driven platform for OpenJDK users, especially Java and Kotlin enthusiasts. Foojay.io connects OpenJDK “friends” with expert articles and community insights on trends, tools, and practices. This week, instead of weekly highlights, I selected a few articles from last month to share useful insights you can find in them.
Foojay Podcast #62: Challenges and Innovations in the Java Ecosystem
Let’s start, as usual, with the Podcast.
In the 62nd episode - Better Coding with AI: Friend or Enemy? - Frank Delporte talks with several guests (Grace Jansen, Sean Li, John Sterken, David Vlijmincx, Joost Kaan-Wagenaar and Urs Peter) about artificial intelligence and its application in Java programming. The conversation includes various guests sharing their experiences using LLMs in practice, showcasing specific tools like LangChain4J, Jakarta EE, and MicroProfile, as well as libraries enabling interaction with different LLMs. They all agree that AI is a powerful tool that can improve developers' workflows. Still, it should not be treated as a panacea for all problems, nor should AI-generated code be copied uncritically.
According to the guests, AI will be increasingly used to generate tests, suggest code snippets, and explain how the code works. They highlight the need to understand how AI operates and its limitations, such as hallucinations, where it generates false information.
And since we’ve already started with AI...
LangChain4J: Thoughts on Integrating Java with AI
Heads up—I’m warning you: don’t take me to a lottery. When choosing tools for my AI-based apps a year ago, including some post-processing elements for this newsletter, I went with Microsoft’s Semantic Kernel instead of LangChain4J. A year later, it’s clear the community leaned toward LangChain4J—for example, Microprofile AI is being developed based on LangChain4J API, and even Microsoft seems to favor this solution. So, if you’re not using Spring (where Spring AI is quite elegantly integrated), LangChain4J seems like the safe option. Hence, we’ll start with it.
The article LangChain4J Musings by Nicolas Fränkel 🇺🇦🇬🇪 is an introduction to LangChain4J. You’ve probably seen plenty of articles like this, but Nicolas, as he states, approaches new technologies with cautious skepticism—avoiding hype-driven trends while embracing practical applications that offer real value, like LLMs in daily work. So this is a "cold-headed" piece.
The article describes the basic components of LangChain4J, such as connecting to GPT model APIs or integrating with contextual memory for managing conversation history. It provides examples of creating custom chains that combine data operations with queries to language models, simplifying the implementation of solutions like chatbots, content generators, or analytical tools. The author also analyzes potential challenges and use cases for LangChain4J in corporate environments, touching on performance optimization for large language model integration and managing API query costs.
For "newbies," it’s a perfect starting point!
PS: Nicolas also recently published a fantastic Home Assistant series on his blog. Highly recommended—tweaking Home Assistant is one of my favorite fall hobbies.
Is JDK 8 a Ticking Time Bomb?
So, who’s still on JDK 8? While I clearly see the migration trend, I suspect a few holdouts still exist. The next publication is precisely for such "late bloomers."
The article Why Java 8 is a Ticking Time Bomb Hiding Within Your Organization by Frank Delporte is a straightforward collection of arguments outlining what people "miss out on" by sticking with old Java versions. It lists incompatibilities with projects like GraalVM, functionalities like Project Loom, or new Garbage Collectors like Shenandoah and ZGC. These features translate into better non-functional parameters (latency, throughput) and, consequently, cost savings. Another challenge is the lack of modularity introduced in Java 9. The article highlights the incompatibility of Java 8 with the latest DevOps tools, such as containerization with Jib or Cloud Native Buildpacks.
Another related publication, which I find even more interesting, How Organizations Became Stuck on Outdated Java Versions, presents insights from over 20 industry experts discussing why organizations stick with older Java versions. It explores technical and organizational difficulties in migrating and mental barriers stemming from resource constraints or fears of compatibility issues.
If you need to convince yourself or others, this is a great collection of arguments. At the same time, I feel like we’re already past the educational phase—those who wanted to migrate have done so or have plans in place, and many projects will simply remain on JDK 8. Unless regulators start pushing harder, as we’re beginning to see in Europe.
TornadoVM: Building and Running in IntelliJ IDEA
One of my favorite projects—TornadoVM—had to make an appearance. TornadoVM is a Java extension for heterogeneous computing, enabling Java code compilation to platforms like OpenCL, CUDA, and SPIR-V. This time, let’s focus on something more practical.
The article Build and Run TornadoVM with IntelliJ IDEA by Thanos Stratikopoulos describes step-by-step how to set up TornadoVM in IntelliJ IDEA IDE, allowing for easy execution of applications leveraging GPU acceleration. It explains prerequisites like configuring Maven dependencies, installing GPU environments (e.g., NVIDIA drivers or OpenCL platforms), and setting up environment variables such as JAVA_HOME and paths to GPU drivers.
The second part focuses on running TornadoVM applications in IntelliJ IDEA. Using a dedicated Run/Debug profile, users can easily debug Java code utilizing GPUs. The article also provides an example of a simple application demonstrating Tornado API annotations for defining GPU-processed tasks. It’s a great introduction to getting started with GPU-accelerated applications.
Building Your Own Railway Display with Java
Do we have any train fans here? If so, you’ll be delighted.
The article Crafting Your Own Railway Display with Java! by Ancy Mariam Thomas and Rijo Sam showcases a project that uses Java, Spring Boot, and Vaadin to create a real-time railway display, mimicking the informational boards found at train stations. The authors demonstrate how Vaadin’s Grid component can be used to present live train departure data fetched from Nederlandse Spoorwegen (NS) APIs. They detail how server-side push, enabled via Vaadin’s @Push annotation, ensures the display remains up-to-date with scheduled refreshes. The project employs CSS for styling and demonstrates the flexibility of Vaadin's Component and Lit Renderers for customizing UI elements. The implementation runs seamlessly on a Raspberry Pi 4, highlighting Java’s versatility and Vaadin’s ease of use in creating responsive and visually appealing interfaces.
The project not only highlights Java’s versatility in building graphical interfaces but also inspires combining programming with everyday applications. A lovely, short case study!
PS: Ancy’s bio mentions blockchain technologies like Hyperledger Fabric. I used it in production back in 2020, and it worked quite well — the original version of vived.io was blockchain-based.
GlassFish Moves Forward: What’s New?
Jakarta EE and GlassFish. Jakarta EE 11 should be released soon (hopefully before the holidays, and I’ll talk about it next Thursday), but for now, let’s warm up by checking out what’s new in one of the most popular application servers.
The article GlassFish is rolling forward. What’s New? by Ondro Mihályi dives into the latest enhancements in GlassFish 7, reflecting the broader evolution of this server under the stewardship of OmniFish.
Since OmniFish took charge in 2022, significant strides have been made. GlassFish now fully supports Jakarta EE 10, offering improvements across key components like EJB, CDI, and Servlet API. Optimized for modern Java versions, GlassFish provides enhanced memory management and stability, making it an efficient tool for both legacy systems and cutting-edge applications.
GlassFish 7 introduces notable enhancements, including GJULE, a reworked logging engine that enables detailed logging without compromising performance. The tool also provide support for MicroProfile APIs like Config, REST Client, and JWT Authentication, while embedded runtime accelerates application startup, while updates to the Arquillian container facilitate seamless testing without requiring a full server launch. Enhanced Docker and Kubernetes support further streamline deployment across hybrid and cloud-native environments. Also, for lightweight alternatives, Piranha Cloud, built on GlassFish components, provides a "serverless-like" runtime
PS: Lastly, let me share my own publication. As part of the Java Advent Calendar by Olimpiu Pop , which I mentioned two issues ago, my article JVM in the Age of AI: A Bird’s-Eye View for the Mechanical Sympathizers was published. It explores the challenges JVM faces in AI inference, such as memory constraints and computation time. It doesn’t focus on LLMs but rather the JVM itself and the surrounding ecosystem.
By the way...