The Duke's Choice Award is dedicated to all members of the Java ecosystem! In keeping with its 17-year history, the 2019 Duke's Choice Award winners will be announced at Code One, the world's biggest Java technology conference and gathering of Java community members. The Duke's Choice Award celebrates extreme innovation using Java technology. The primary judging criterion for this prestigious award is innovation, putting small developer shops and individual developers on an equal footing with global giants. Nominations are accepted by everyone (including Oracle employees) for anyone (including self-nominations) of a project, person, product, service or any program related to Java innovation.
2019 Duke's Choice Award winners will be provided an Oracle Code One full conference pass, Duke statue, 2019 winner badge, and inclusion in Oracle corporate social media programs. Most rewarding of all, Duke’s Choice Award winners receive community recognition as elite members of the vast Java ecosystem.
In our previous issue, we explored the use of lightweight frameworks— Javalin, Micronaut, and Helidon—to create microservices, which typically are deployed in the cloud. In that issue’s article on Helidon, we also showed how to package a service into a Docker container for deployment.
In this issue, we continue the theme by examining how to build apps with containers in mind and how to deploy containers. For straight Java apps, the jlink and jdeps tools are excellent solutions for creating modularized, small, self-contained apps. We discuss how to use those tools on page 25.
If very fast startup time is a concern, then consider the GraalVM platform. It is written in Java but compiles Java code to an executable format. We’ve discussed GraalVM in past issues, but this article focuses on the latest features and their use in creating small executables with native-code startup speed. Finally, if you’re straddling the Dev and Ops sides of DevOps, you surely have seen that most containers are managed with the open source Kubernetes platform.
In our lead feature, we give you a full introduction to Kubernetes and all the information you need to start working with managing your containerized apps. In addition, we explore what’s new in the recent release of Java 12, and we examine a major upgrade to Java Card, which in all senses is the very smallest container for a Java app.
In addition, we have our usual quiz and our events calendar. Finally, future issues of this magazine will look materially different from what you’re used to. Please see the editorial in this issue for details
The emergence of microservices as the new architecture for applications has led to a fundamental change in the way we use frameworks. Previously, frameworks offered an omnibus scaffolding that handled most needs of monolithic applications. But as microservices have gained traction, applications now consist of orchestrated containers, each performing a single service. As such, those services require far less scaffolding—favoring instead lightweight frameworks that provide basic connectivity and then get out of the way.
In this issue, we examine three leading frameworks for microservices: Javalin (page 13), which is a very lightweight, unopinionated Kotlin-based web framework; Micronaut (page 23), which handles all feature injection at compile time and so loads extremely fast; and Helidon (page 34), which is a cloud native framework that generates a pure Java SE JAR ile that can be run as a service or a complete app. Helidon comes in two flavors: a minimal framework and a slightly heftier one for developers wanting additional services.
In addition to these articles, we continue with the final installment of our series on Java design patterns—this time covering the Proxy pattern (page 53), with practical examples and coverage of the rarely discussed dynamic proxy feature in a little-used corner of the Java language. Ben Evans examines a common optimization in VMs, loop unrolling (page 62), and explains the subtle reason why loops on the JVM will execute more slowly if they’re indexed by longs rather than ints.
And of course we have our quiz—somewhat expanded for this issue (page 81)—and our book review (page 7).
Java Champions have had an incredibly busy 2018. They have supported their communities by giving over 1400 talks at conferences and user group meetings in over 60 countries.
The efforts of these community experts sharing their knowledge around the would influence countless others, professional engineers and students new to the craft to think in new ways, apply new solutions to problems and enhance, not only the commerce of the organizations they work for but also their own professional growth.
We have also welcomed 30 new Java Champions to the program in 2018, including new members from countries as diverse as Japan, India, South Africa, and New Zealand.
Ivan St. Ivanov
Nikhil J. Nanivadekar
Rafael Chinelato Del Nero
Roy van Rijn
The full bios of these and all other Java Champions may be found here
Information about the Java Champions Program can be found here
Java Shell (or JShell) is a new tool introduced in Java 9 for running standalone code snippets. JShell in NetBeans is explored in six articles. The first article introduces JShell with NetBeans including how to access the JShell. JShell-only commands such as /list and /save are shell commands to facilitate the use of the tool. The first article discusses how to run code snippets to import a package or a type. Further, the first article discusses declaring and using variables explicitly.
The second article continues with declaring and using variables; implicit variables. Further, code snippets for String comparison and statements are run in the second article. Resetting JShell is also discussed in the second article.
The third article is all about running code snippets for methods in JShell. Modifying method definition, method overloading, and making a forward reference to a method are discussed as used in JShell. Some JShell specific features for methods are also discussed including listing code snippets for methods, and method modifiers not permitted in a top-level method declaration.
The fourth article is mainly about running code snippets for classes in JShell including declaring a class, modifying a class, using class constructors, extending a class and overriding methods. Further, interfaces, arrays and unchecked exceptions are also discussed.
The fifth article discusses running code snippets for enums and the various control flow statements.
The sixth article discusses lambda expressions, in addition to discussing saving and loading code snippets in JShell.
There is a lot happening in Java, and in this issue we do our best to make the state of Java as clear as possible. We begin with a survey (page 15) of Java developers. The survey covers JDK, tools in use, processes, and finally a profile of Java developers.
We follow that up with a look at Java 11 (page 39), which was released in September: what’s in this release that you need to know about—such as changes to lambda syntax, a new HTTP client, and the updated WebSocket interface. The Java 11 release was the first in several years not to include JavaFX, which has been spun out from the JDK. This means that JavaFX can evolve on its own timeline, which is discussed (page 62) by Johan Vos, one of its principal developers.
We also examine upcoming technology from the Valhalla project (page 56), which promises to make it far easier and faster to access primitive data types. This performance enhancement will be particularly welcome when accessing objects in arrays, as Ben Evans explains in his deep look inside the JVM.
Finally, the product management team for Java explains recent changes (page 52) to the licensing model. In addition, we have a deep dive into the
decorator design pattern (page 67), our quiz (page 78), and our book review (page 8), as well as our calendar of upcoming developer conferences and
In keeping with its 16-year history, the 2018 Duke's Choice Award winners were announced at the Groundbreakers Hub at Code One. The winners include JPoint, a self-driving car; community winners BgJUG (the Bulgarian JUG) . Among the winners announced were also tools from ClasssGraph, Twitter4J, Apache NetBeans and Jelastic vertical memory scaling along with open source initiatives, MicroProfile.IO and Project Helidon.
Apache NetBeans - Toni Epple, Constantin Drabo, Mark Stephens
An integrated development environment (IDE) for Java. NetBeans allows applications to be developed from a set of modular software components and runs on Microsoft Windows, macOS, Linux, and Solaris.
Bulgarian Java User’s Group, BgJUG - Dmitry Alexandrov, Nayden Gochev, Ivan St. Ivanov, Mihail Stoynov, Martin Toshev
The BgJUG deserves recognition for their mastery of two pillars: the technical side and the community. Influencing the adoption of Java for more than 10 years, the group organizes highly effective events regularly. The passion, dedication, and professionalism at BgJUG are highly contagious. The human aspect, the empathy, the collaborative nature, and the diversity this team consistently promotes is very refreshing.
ClassGraph - Luke Hutchison
ClassGraph is an uber-fast parallelized classpath scanner, module scanner, and build-time/runtime annotation processor for JVM languages. ClassGraph directly parses class files to build a graph of the relatedness of all visible classes, methods, fields, and annotations, and this graph can be queried or visualized in a wide range of ways, bringing valuable metaprogramming features to the JVM ecosystem.
Jelastic - Ruslan Synytsky
Elastic JVM with Automatic Vertical Memory Scaling allows the JVM
to dynamically adjust the maximum memory limit for running Java process without JVM restart, and releases unused memory back to the host machine to save money for companies running workloads in the cloud.
JPoint - Bert Jan Schrijver
An autonomous driving vehicle created with Raspberry Pi, an RPi camera, Vert.x (the reactive toolkit for the JVM), and the OpenCV Java bindings. MicroProfile.IO - Josh Juneau
The MicroProfile project fills a gap in the Java EE ecosystem, allowing developers and vendors to develop and deploy simple, low-profile microservices developed on the Java EE/Jakarta EE Platform.
Project Helidon - Joe DiPol
A set of Java libraries for writing microservices, Helidon supports two programming models. Helidon MP implements MicroProfile for developers familiar with Java EE, and Helidon SE provides a functional and reactive-style API. Both are powered by Netty.
Twitter4J - Yusuke Yamamoto
A library based on OAuth, REST API, JSON, and HTTP/2 technology that helps integrate microblogging service in a type-safe way.
The Java Platform Module System (JPMS) main goal is to make it easier to construct and maintain Java libraries and large applications. You will also experience improved application performance by scaling down the Java SE platform and JDK.
In a series of five tutorials, Deepak Vohra explains how to use the module system in your applications. He walks you through setting up your environment, creating classes within modules, configuring VM Args for your module path and running your application.
Your application will be portable when you use a module as a JAR file. Deepak explains how to create and export a Java project as a JAR file using Eclipse IDE. The tutorial is a step-by-step guide from setting up your environment to running your application.
With the JPMS, you still need to manage your application dependencies, including third-party application dependencies. The last two tutorials detail how to create a module which depends on another module’s dependencies. To use multiple modules, you need to create multiple Java projects in Eclipse because Eclipse does not allow creating multiple modules in one project. The last article describes how to configure the two Java projects and run the main module application to demonstrate module dependency.
OpenJDK provides production-ready open-source builds of the Java Development Kit, version 11, an implementation of the Java SE 11 Platform under the GNU General Public License, version 2, with the Classpath Exception.
Java SE 11 is the latest update to the Java Platform. It contains improvements like Local-Variable Type Inference, Parallel Full GC, Application Class-Data Sharing. This release is part of the announced critical patch updates and it includes important bug fixes. This JRE will expire with the release of the next critical patch update.
Java SE 8u181(Java SE 8 update 181) is now available. Oracle strongly recommends that most Java SE users upgrade to the latest Java 8 update, which includes important security fixes. Oracle will not post further updates of Java SE 8 to its public download sites for commercial use after January 2019. For information on new features and bug fixes included in this release, please read the Java SE 8u181 release notes.
Oracle Java SE Embedded Version 8 Update 181 is also available. You can create customized JREs using the JRECreate tool. To get started, download an eJDK bundle suitable for your target platform and follow instructions to create a JRE that suits your application's needs. Oracle Java SE 8 Embedded is the final major release of the Oracle Java SE Embedded product. Starting with JDK 9, Oracle doesn't plan to offer a separate Java SE Embedded product download.
Also released are Java SE 7u191 and Java SE 6u201, which are both available as part of Oracle Java SE Support. For more information about those releases, please read the following release notes:
Few programming languages make it past 20 years and still retain high popularity. But Java has managed to remain widely used in many contexts because of its evolution—not just of the language, but of the larger direction of the ecosystem. None of this is clearer than in the advent of GraalVM, an ahead-of-time native compiler for Java code that coincidentally is written in Java and supports many other languages—both JVM-based and native. To understand how to use Graal for your own projects, see our article on page 17.
In the enterprise, Java EE has moved out from Oracle’s aegis and is now hosted at the Eclipse. Foundation under the name of Jakarta EE, which we examine in detail (page 26) in anticipation of its upcoming 1.0 release.
Much of Java’s success comes from new tools contributed as open source. Hystrix from Netflix is an excellent library for assuring uptime in distributed apps— especially microservices. Our coverage of Hystrix (page 37) shows its benefits and elegance of implementation.
Finally, we look at one of the most exciting platform developments: running Java apps on power-sipping ARM processors. As our article (page 54) demonstrates, migration of existing code is not difficult, and on recent chip releases, it does not entail a compromise on performance.
We also include the next installment (page 66) of our series on design patterns, this time covering the Visitor pattern. And of course, this issue includes our usual quiz (page 76), editorial (page 5), and a book review (page 8) of an unusually interesting volume.