There has probably never been a period in the history of Java when changes and enhancements have come as fast. The reason is that Java’s popularity makes it a candidate for leading new development efforts in areas like the cloud, modular interactive systems, and functional programming, as is demonstrated by the number of expert sessions on these topics at JavaOne 2017. As these efforts mature, they bring about changes to Java to optimize their implementation and execution. Many believe that the delays in Java 9 are due to this “support-the-leading-edge” phenomena. These new applications have defined Java in 2017 and they shape it further in 2018, both through enhancements like Java 9 and by changes in practice.
Paying attention to the mobile space
It would be fair to say that mobile development has generated the most near-term pressure on developers. Mobile applications typically split into three pieces—on-device elements that are either advanced script-based web pages or apps, front-end elements that harmonize presentation across platforms and are increasingly designed to be cloud-distributed, and back-end elements that manage the boundary between legacy transactional data center applications and the mobile world. To continue language dominance, Java has to play in all these spaces, and judging by the various sessions covering these topics at JavaOne 2017, these topics are not details being overlooked.
In terms of attending to legacy details as the industry looks towards Java 9, Wayne Citrin of JNBridge is hosting a birds-of-a-feather session entitled The Legacy Developers Guide to Java 9. Sazonia Systems' Alexander Casall is tackling the mobile UI issue with his JavaFX 101 session, and the conference is replete with sessions on effective RESTful API design.
Being mindful of the web
Web front-ends are critical in both consumer apps and business point-of-activity worker empowerment. JSON has been widely used for web programming, and another goal of Java 9 is to provide a basic JSON API in Java to tie a web front-end more effectively to a Java back-end process. This should advance both the use of JSON and the use of Java in building the critical link between web apps and mobile apps and the back-end business transaction processes.
The Java EE 8 release is obviously at the forefront of JavaOne 2017, and sessions like Oracle's Linda Demichiel's What's New in the Java EE 8 Release will demonstrate how the new Java API for JSON binding (JSON-B) will help change the game for front end developers.
The power of client-side processing
A broad and emerging trend in web front-ends for mobile and other applications is the progressive web app (PWA) model, which creates a simpler deployment of mobile applications that are based on browsers and scripting rather than on native device programming. The diversity of mobile devices and the introduction of specialized IoT elements that also rely on front-ends will likely drive older mobile-browser app technologies out of the market in favor of PWA.
Peripheral languages at JavaOne 2017
For app development, watch how the Android Kotin language, one that’s been made interoperable with Java up to now, handles the evolution of Java itself. One of the most important questions for Java overall is its ability to play a strong role in all the layers of application development emerging. Kotin is perhaps the key to enshrining Java even in the Android development space, and that would combine with other 2017/2018 developments to spread Java across the full spectrum of application evolution.
It's almost overwhelming the number of Kotlin sessions that are taking place at JavaOne 2017. A quick JavaOne schedule query brings up twelve results. Compare that to a search on WebSphere which only conjures up one. Building Kotlin Applications at Scale with Gradle is hosted by Gradle inventor Hans Dockter, so if you could only attend one Kotlin session, that's likely the one you'll want to see.
The greatest long-term pressure for change is “event-driven” applications, including functional programming microservices. While it’s sometimes said that this pressure is emerging from public cloud provider interest, these cloud service changes are themselves the result of other forces. The real drivers are the evolution of mobile computing and productivity enhancement, and IoT. The Java apps of 2017 are impacted mainly mobile computing and the exploiting of public cloud functional programming features, but everyone has their eyes on IoT in the long term.
From Java 8 to Java 9
One of the biggest advances in Java 8 was the Lambda or functional programming enhancements. Functional programming is focused largely on event processing, and arguably the most significant source of event processing opportunity is the Internet of Things. IoT is also a driver of edge computing, and in particular the distribution of processing to lightweight controllers. Amazon took a step in this direction with its Greengrass project, and so Java is moving to support the same goal.
The most important element in edge computing for Java is Project Jigsaw, a project designed to modularize Java so as to make it more practical on appliances with limited compute resources. Without Jigsaw, there is risk that Java apps couldn’t be ported all the way to an IoT edge, and that would hamper Java’s ability to support IoT and event processing in general. Project Jigsaw was moved to Java 9, which is the next release. To learn how Jigsaw might help you out on your next Java 9 project, Java platform Chief Architect Mark Reinhold's session Modules in One Lesson will not disappoint.
The need to support the cloud optimally is a thread that runs through all of this. Public cloud services offer enormous scalability and resiliency benefits, but they’ve proved difficult to harmonize with stringent security/compliance requirements and expensive when they’re applied to applications that simply sit and run day after day. Big core business applications have both these attributes, so the cloud has created a push to split applications, creating a formal cloud front-end and a transactional back-end.
Look for improvements to concurrency in Java 9, aimed at addressing the problems that arise when scalable and distributed components like cloud-scaling elements feed a static component set. There’s a risk of having the variable load from the former overwhelm the processing power of the latter, and Java 9 will make it easier to handle that problem with straightforward Flow tools. This will enhance cloud capabilities for Java apps, but also help specifically with mobile and event applications, both of which tend to create large pools of front-end processes driving a transactional back-end system.
Java 8 has been a great success, and a big factor in that success, as demonstrated by the number of JavaOne 2017 sessions on the topic, has been the determination of the Java community to keep the language up to speed with respect to emerging application needs, technology changes, and the interests of the developer community worldwide. There is every reason to believe that this determination will guide Java evolution well into the future, and ensure that the language becomes even more popular and useful.
JavaOne 2017 walks a new path, and it's the right path to be on
Beyond the JavaOne conference: Mastering life in San Francisco
Oracle OpenWorld may put spotlight on serverless