1. Docker acquire AtomicJar
In the realm of Java libraries/services, spectacular acquisitions are few and far between nowadays. When they do occur, they’re typically large corporate acquisitions, such as the recent VMWare case. But even in a more dynamic ecosystem, the acquisition as we’re discussing in today’s edition wouldn’t go unnoticed – we’re dealing with a scenario where both entities involved are highly recognized within the broader community.
Docker has acquired AtomicJar, the creator of TestContainers, which – especially for JVM developers – is a significant move in the container technology sector. Created in 2015 by Richard North, TestContainers is an open-source library that simplifies the testing process in Docker environments. It enables easy setup and removal of containerised instances of database and other services, which is particularly useful for setup of integrations tests. That has led to its widespread adoption in the developer community.
AtomicJar, established in 2021 by the initial developers of Testcontainers, sought to enhance the tool’s functionalities, leading to the introduction of Testcontainers Cloud. This service built around the Testcontainers library was crafted to utilize the strength of cloud infrastructure for testing environments – enabling us to run test for our microservices fleet without the necessity of local setup. It provides developers the opportunity to employ cloud resources to generate and control single-use instances of Docker containers, applicable for both local development and CI/CD systems. Thus, it represents a very complementary service to the current Docker offering.
Docker’s acquisition signifies a strategic move to directly incorporate Testcontainers capabilities, potentially broadening its user base and enabling it to penetrate the Cloud Development Environments market. Docker has consistently aimed to monetize developer productivity (after all, they are now profiting from Docker Desktop licences), so this appears to be a natural progression of that strategy. The competition is intense – Cloud Developer Environments have undoubtedly been one of the more notable trends in 2023, with a plethora of new tools emerging – but widespread adoption is still on the horizon. You can explore an intriguing publication and overview of existing solutions on Georgely Orosz’s blog.
2. New IntelliJ IDEA – AI Assistant, Java 21 and more.
Last week marked the arrival of a new version of IntelliJ. This tool, which is likely second only to Spring in terms of usage frequency by Java Developers, has some exciting updates in its latest release. We’re going to delve into these, as they finally include several much-anticipated features.
The launch of IntelliJ IDEA 2023.3 marks the end of the testing phase for AI Assistant, which is now freely (however, unfortunately not “for free”) available to any person interested. This assistant provides enhanced code generation directly in the editor, a context-aware AI chat for project-related questions, and AI Actions that are aware of the project and use extended context to yield more thorough results. Picture a ChatGPT incorporated into your IDE, with extra improvements due to its close integration with the IDE itself.
I’ve experimented with the entire system based on one of the initial tasks from this year’s Advent of Code, and it’s undoubtedly a useful tool. My only doubt is the pricing. On one side, an additional $10 on top of the existing license fee isn’t much (particularly considering AI assistants can significantly enhance productivity for many task characters), but for an additional extra ten dollars, we already have ChatGPT Premium, which offers a broader range of possibilities through GPT-4. I must confess that while the AI Assistant is indeed seamlessly integrated and the code it generates closely mirrors my own (which isn’t always advantage…), ChatGPT-4 was able to push a bit further in mentioned tasks. Nonetheless, it’s crucial to remember that the wide context of our codebase, the consistency with our own code style and integration with IDE are the most significant benefits here. It’s goal is not to replace you, but make you more productive.
It’s worth noting that OpenAI could be “criticized” for setting their prices too low. Considering its capabilities, ChatGPT is simply surprisingly affordable. As per the FAQ, AI Assistant solution relies on OpenAI, and while tool creators have hinted at developing their own models too, AI Assistant must be priced appropriately to prevent financial instability for the parent company. AI models are just a very expensive toy.
Remember to check out where your data is being transmitted. JetBrains is notably transparent about this.
However, man does not live by AI alone. Java developers will thus surely value the comprehensive support for Java 21. New Intellij update includes support new language features, including virtual threads, Record Patterns, and Pattern Matching in Switch expressions. Even features from Preview, like Spring Templates, are introduced in this version.
Some new capabilities were introduced in Kotlin support as well. The update includes starter tips in sample projects for those new to Kotlin, auto-configuration of Kotlin in Java Gradle projects (praise for this, it will make Java-to-Kotlin’s migrations much easier!) and an even stronger ‘bundling’ of Kotlin plugins with IntelliJ – judge for yourself if this is an advantage for you. What I am, however, most excited about is the full support for the Beta version of the K2 compiler. There are more and more “lessons learned” from the migration processes of popular projects, and I think I will touch on this topic in an upcoming edition.
Beyond artificial intelligence, Java, and Kotlin, IntelliJ IDEA 2023.3 incorporates several other enhancements. These include enhanced support for Scala, upgraded database tools, and better integration with Kubernetes and Terraform, as well as automatic downloading of shared JDK indexes. The focus also extends to UI enchantments, such as a new feature like floating toolbar, a ‘Run to Cursor’ inlay option in the debugger, and a comprehensive diff viewer. Each may seem minor initially, but they are additions that we are certain to value once we need them.
3. Release Radar
And finally, there are some new releases and the last Release Radar for this year. Even though it appears that everyone is already in the Christmas spirit, there are evidently some individuals resisting the Code Freeze.
TornadoVM is a platform specifically designed to allow Java applications to run efficiently on various hardware platforms, such as GPUs, FPGAs, and multi-core systems. It achieves this by converting Java bytecode into OpenCL, NVIDIA’s PTX and Intel’s SPIRV. With these three backends (OpenCL, SPIR-V and PTX) TornadoVM can run on many platforms, from IoT platforms such as Jetson Nano, to laptops, PCs, and data centres, ensuring that Java applications can utilize the computational power of specialized hardware without requiring hardware-specific modifications. This provides developers with a consistent and efficient environment for their applications. TornadoVM is integrated with GraalVM and utilizes its JIT compiler, which is capable of transforming Java bytecode into native machine code. TornadoVM can also use GraalVM’s JIT compiler in its translation processes, gaining additional advantages from the advanced optimizations provided by GraalVM.
Finally, we have TornadoVM 1.0, although this version hasn’t been heavily celebrated. Key features include a huge API Refactor, including new interface for off-heap object and array allocation using
MemorySegments from the Panama project, support for cospi and sinpi operations, extended vector data types, and improved default device ordering. This new release can integrate with JDK 21 and GraalVM 23.1.0, including all available Truffle-based languages. The release also fixes a number of bugs, including issues with SPIR-V devices, and offers enhanced FPGA compilation and batch processing support.
The most significant new feature introduced with Gradle 8.5 is comprehensive support for Java 21, enabling users to build, test, and run applications using the most recent version of Java. This release also emphasizes enhancements to the Kotlin DSL – this is an area that likely always has room for improvement, as it is regular part of release notes. Furthermore, it offers better error messages, updates to Javadoc, and a more streamlined and understandable Gradle Wrapper file size.
However, the main emphasis of Gradle 8.5 seems to be on builds and dependency verification. The newly introduced Build Features API provides enhanced flexibility and control and is, as per the developers, significantly more user-friendly.
Hibernate Search is a library that integrates Hibernate ORM with Apache Lucene or Elasticsearch. The library has recently launched its version 7.0. This new version updates to JDK 11 and Hibernate ORM 6.4, enhancing compatibility with Elasticsearch 8.10/8.11 and OpenSearch 2.10/2.11, and updating to Lucene 9.8. The latest features include Hibernate Search Bin-Of-Material for simplified dependency management, experimental compatibility with Amazon OpenSearch Serverless, and enhanced support for Multi-Tenancy, originally introduced in Hibernate ORM 6.4. This release also signifies the transition to Jakarta EE, accompanied by a complete project repackaging.
Quarkus 3.6.0 introduces a number of upgrades, with a particular emphasis on enhancing server-sent event (SSE) management in the REST client, as well as numerous enhancements to OpenID Connect and the overall security of the framework. This version also incorporates the transfer of
quarkus-smallry-opentracing to Quarkiverse.
Quarkiverse is a collection of extensions for Quarkus – a free-to-use platform for creating and launching microservices applications in Java. Quarkus is engineered to be both lightweight and speedy, making it an ideal choice for cloud and container settings, while also offering extensibility. Quarkiverse serves as a sort of ‘hub’ for community extensions that are not directly incorporated into the primary Quarkus project.