Java retrospective #2 – best tools, frameworks and features of 2019
As 2019 draws to a close, we got in touch with some prominent members of the Java community to gather their thoughts on the events of the last year. In this five part series, we will look at what they had to say. In this second part, we asked which Java tool, framework or feature they were most excited about in 2019.
Which Java tool, framework and/or feature thrilled you in 2019 and why?
Definitely Quarkus. The community has developed a great tool to optimize common Java paradigms for the JVM and even the GraalVM native image – this has affected many projects for which Quarkus has dependencies. That they are currently working on becoming officially MicroProfile compatible makes me personally very happy. The website of our Java Usergroup Mainz has now been running on Quarkus for several months without any problems, and that as a native image.
Tim Zöller – Team Leader Java, ilum:e informatik AG
Keycloak: proven and robust tool for modernizing existing IAM infrastructures. I was also impressed by Jabel. Jabel is a Java compiler extension that makes Java 9+ language features available for Java 8 applications. It allows developers to take advantage of the convenience of Java 9+ and still create Java 8 compatible libraries.
Thomas Darimont – Founder of Java User Group Saarland and Fellow at codecentric AG
Since I wrote my first integration test in Spring Data JDBC for a non memory database in 2017, I’ve been totally excited about test containers. It’s one of those tools that makes you wonder after half a year how you ever got along without it.
Jens Schauder – Spring Data team, Pivotal
GraalVM being released was a major milestone. GraalVM provides the VM technology that will keep the Java platform relevant for the next decade. The successful releases or Java 12 and Java 13 show that the release cadence is working.
Johan Vos – Java Champion, co-founder Gluon and LodgON
Well, I’m very excited about the Hypersistence Optimizer tool I started in 2019. With Hypersistence Optimizer, you can finally focus on data access logic, leaving the performance-related issues to be analyzed by this tool.
So, instead of inspecting every little change submitted as a pull request in a large JPA or Hibernate project, Hypersistence Optimizer can analyze the code on your behalf and inform you if there are JPA mappings or Hibernate configurations that can cause performance issues.
To get a feeling about the value, it brings to Java Persistence projects, check out this video about how you can optimize the Spring Boot Petclinic application.
Vlad Mihalcea – Java Champion and author of High-Performance Java Persistence
SEE ALSO: Java 14 update news
I’ve been using Kotlin and Spring Boot for a live demo and tutorial. Kotlin is very pleasing to work with, you can start coding in a Java-ish way and then let IntelliJ IDEA guide you to a more Kotlin-ish style (the same way I use IntelliJ IDEA to point me to new features in Java I could use). Spring Boot is really such a great way to get started with microservice applications, taking care of lots of the mundane stuff for starting a new application. Using these together has been my fun coding project this year.
Trisha Gee – Java Champion and Developer Advocate, JetBrains
There are actually 3 having a big impact.
RSocket – new shiny Reactive-Streams Network Protocol, which brings all the semantics of the Reactive-Streams specification into communications for distributed systems. It means that using RSocket, you can build an end-to-end reactive system where application-level flow control will be propagated over the network. Initially, the protocol was developed at Netflix to solve the problem of maintaining the stability of the system when it’s not possible to predict the behavior of the consumer of the stream. You can imagine thousands of devices connected to the gateway, which are blinking all the time. With RSocket, such an outage or instability can be gracefully handled by built-in backpressure support. Therefore, if a device is unavailable to receive – then it is unavailable to ask for more data. Later on, the technology was adopted by Facebook, and today, the protocol is actively developed and supported by 4 companies: Netifi Inc., Facebook, Pivotal, and Alibaba.
R2DBC – as I mentioned earlier, I’m a big fan and user of reactive programming and reactive streams. For me, the main pain point during the last 4 years was the absence of a proper non-blocking (I’m not even talking about Reactive) relational database driver API. Fortunately, R2DBC was created to solve that problem with a new API for relational database access, as well as 4 implementations for the most popular databases Postgres, MySQL, Microsoft SQL Server, and H2. From my standpoint, it is a breath of fresh air in the world of reactive programming. That is why I’m so happy to use it as well as contribute to its development.
TestСontainers – I guess nobody will be surprised that with the appearance of Docker, it became super easy to spawn a container and run your tests against a newly created Database or Service. Unfortunately, it required reinventing the wheel every time in order to have proper integration tests for your service. Fortunately, TestContainers solved that and provided a seamless Java development experience for writing such tests, which made my life much more comfortable.
Oleh Dokuka – Java Champion and Principal Engineer / Dev Rel, Netifi
I liked JDK 12, especially the inclusion of switch expressions. Besides being a really useful feature and making switches less prone to error, it is also the first preview feature in the JDK. These enable feedback to be incorporated in changes before they become part of the standard. This is a very powerful way of developing the JDK.
Simon Ritter – Java Champion and Deputy CTO, Azul Systems
I was especially enthusiastic about Graal and the frameworks that have positioned themselves around it. What stands out for me with Graal is the reduced need for memory, which has become more relevant again in times of microservices. The new frameworks around Graal have shown what is possible and necessary to develop for Graal without constantly worrying about it. This has also put pressure on the established frameworks and thus sparked innovation.
Michael Vitz – Senior Consultant, innoQ Deutschland GmbH
The most important thing for the Java community was, I think, that the new release train, the switch to Java 11 and the question of suitable LTS versions of Java 8 and 11 kept a lot of the community busy this year. While a few years ago we simply downloaded Java from Oracle, we now have to decide if we want to use AdoptOpenJDK, Liberica from Bellsoft, Corretto from Amazon or one of the many other Java distributions. Even though very good community work has been done in many areas (e.g. by the Java Champions), every Java project had to ask itself which Java distribution to use. I find AdoptOpenJDK especially positive, which provides a completely community-based Java distribution.
Hendrik Ebbers – Java Champion and Java developer, Karakun AG
kind – kubernetes in docker: a super easy way to finally write integration tests for kubernetes components in any (almost) programming language This offers a lot of possibilities to write better test coverage for kubernetes components.
Johannes Unterstein – Java User Group Kassel organizer and Distributed Applications Engineer, Mesosphere
The microservice frameworks Micronaut, Quarkus and Helidon have established themselves and have entered the cloud-native age. Also the combination of these frameworks with the GraalVM features as cloud runtime sounds promising.
I was also impressed by the upward trend of JavaFX UI technology with increasing downloads at Maven Central in 2019 and the concrete project discussions at the JFX Days 2019 in Zurich.
Wolfgang Weigend – Systems Engineer Java Technology and Architecture, Oracle
I love R2DBC, which is a reactive-streams compliant way to build non-blocking SQL-centric data-access applications. Put another way: it lets you write the scalable SQL-based applications that JDBC does not. Finally, all those existing SQL-based applications that talk to RDBMSes like PostgreSQL, H2, MySQL, Microsoft SQL Server, Microsoft CosmosDB, SAP HANA, and others, all have a way to move forward to take better advantage of the vaunted scalability of reactive programming.
The other thing I loved seeing was the GA support for RSocket landing in Spring Framework 5.2, on top of which we’ve since released support for Spring Security, Spring Boot, and Spring Cloud. RSocket is a reactive binary protocol for use on byte stream transports such as TCP, WebSockets, and Aeron designed to surpass the many limitations of technologies like HTTP. While nobody would deny that HTTP is an excellent document-retrieval protocol, it’s hard to argue that it’s a great service protocol. It was originated by developers who worked at Netflix who went to Facebook and who have firm notions and a wealth of insight about what it means to run production applications at scale. It’s now as easy to create RSocket-based services as it is to generate HTTP-centric applications using Spring.
Josh Long – Java Champion and a Spring Developer Advocate, VMware