JavaOne 2016: The Outcomes

Taras Matyashovsky
10 min readOct 20, 2016

--

This is the third and the last blog post related to JavaOne 2016. In this post I’d like to focus mostly on my personal technical outcomes of the conference as well as to highlight the most interesting and valuable presentations I was lucky to attend.

Keynote

First, the keynote. It is worth watching anyway. The main official focus from Oracle: Platform, Cloud, Big Data, IoT. Oracle has provided separate videos for different parts as keynote lasted for 2.5 hours, but I highly recommend to watch the most technical one if you are limited in time starting from 0:12:30 till 0:50:30 (~38 minutes). Technical outcome of this part is quite clear:

  • Java 9 is close to the release, everybody should look into it, start preparing for it, give a try for your current project if possible in order to provide valuable feedback
  • There are 2 specific projects for Java 10: Valhalla and Panama
  • The future of JEE 8 is blurred, all proposals are just an open topic for a discussion

More low-level technical details from the keynote are listed below.

Java 9:

  • Jigsaw = Modularization
  • JShell = Java + REPL (read-evaluate-print-loop)
  • Enhanced deprecation
  • HTTP2 client
  • Etc.

Full list is displayed below.

JDK 9 Features

JDK 10 (Valhalla and Panama):

  • Value types
  • Generics over primitives
  • Interconnecting JVM and native code
  • Etc.
Brian Goetz and Mark Reinhold discussing JDK 10

JEE 8:

  • at least desired features were prioritized
  • a roadmap for releases was provided
JEE Roadmap

If you have more time then definitely watch the part by Dr. Anita Sengupta (Research Professor, University of Southern California) called an Engineering the Red Planet. It is all about Curiosity and its landing on Mars. Very inspiring indeed even if it is not directly related to Java and Java ecosystem.

Engineering the Red Planet talk during JavaOne 2016 keynote

Also one tiny point worth mentioning from the keynote — only one 3rd party framework was mentioned during the keynote. That was Apache Spark and a few valuable minutes were dedicated to Reynold Xin, a co-founder and Chief Architect of Databricks. Sounds very promising as Java community explicitly decided to put an additional accent on it. By the way here are some links to my presentations related to Apache Spark too.

Reynold Xin, a co-founder and Chief Architect of Databricks

Trends

Second, the trends. I tried to summarize the trends into some sort of clusters connected to the specific interesting presentations from the conference.

Java 8 adoption

Trisha Gee presented “Refactoring to Java 8” where she showed that sometimes refactoring to Java 8 style can be harmful and can cause performance degradation. So, performance tests should be created in advance (for instance using JMH) in order to do refactoring supported by performance metrics. More details here.

Brian Goetz and Stuart Marks gave great “Thinking in Parallel” talk during which they demonstrated how to avoid an imperative style of programming in order to remove barriers to parallel computation. Also, they explained how parallel streams work under the hood and mentioned scenarios when they can be useful and when not.

Slide from excellent “Thinking in Parallel” talk

Stuart Marks gave another talk called “Collections Refueled”. This presentation described some of the recent enhancements made to Collections, particularly the lambda-capable default methods added in Java 8.

Venkat Subramaniam, as usual, had a few excellent talks related to this area “Refactoring to Functional Style with Java 8” and “A Few Hidden Treasures in Java 8”. If you haven’t seen any of his talks then you missed at least an hour of pure technical pleasure, humor and heartiness.

Early Evaluation of JDK 9

Oracle’s postponed the release date from March 23, 2017 to late July 2017. So Java engineers have more time to get acquainted with new features of the language as well as a platform. So, Mark Reinhold, Alan Bateman and Alex Buckley prepared a few sessions to get acquainted with what’s coming in JDK 9 and get ready for that:

Mostly, they showed how to prepare an existing code for JDK 9 and took a look at new features designed to help migration, such as JDK versioning, multi-release JARs, and enhanced deprecation.

I visited “Enhanced Deprecation in Java 9” talk by Stuart Marks during which he explained the work in Java 9 to update and clarify the @Deprecated annotation, plus additional tools being provided to enable developers to assess the impact of deprecation on their codebases and to help them deal with code migration more effectively. So @Deprecated annotation has been extended with 2 properties “since” and “forRemoval” that would help engineers to understand if this feature is going to be actually removed and in which major version. Also jdeprscan has been introduced to assess the impact of deprecation and raise awareness about deprecated code in advance.

Deprecation work in Java 9

Also, I can recommend Venkat’s session “Interactive Development and Fast Feedback with Java 9 REPL”. During this all-live-coding, no-slides session Venkat demonstrated how to leverage the Java 9 REPL to accelerate your Java development. After any of Venkat’s talks you clearly understand that programming is an act of continuous discoveries.

Microservices

Microservices architecture is still overhyped nowadays. Thus, this topic was presented from one or another perspective during a number of talks. I will mention just a few as in total there were more than 40 (!).

Edson Yanaga focused on the storage layer while making a journey from monolith to microservices during his “Microservices Evolution: Breaking Your Monolithic Database” talk. In particular, he mentioned CQRS, event sourcing and introduced http://debezium.io/ used to stream changes from your databases.

Chris Richardson and Kenny Bastani continued data topic during their “Handling Eventual Consistency in JVM Microservices with Event Sourcing” talk. On the one hand they explained how event sourcing can be useful to handle eventual consistency in the world of microservices as 2 phase commit transactions are not an option, on the other hand they demonstrated how to pass events between services in order to notify each service about data changes. Looks controversial as I thought that microservices are about clever endpoints and dump pipes, but a quite handy approach nevertheless.

Also, I was quite surprised that some of the speakers advocate microservice architecture based on JEE platform. For instance, Adam Bien performed “Live-Coding No-Ceremony Microservices” on JEE platform and showed how important design patterns from microservices world (bulkhead, circuit breaker, service discovery, etc.) can be implemented using it.

Another related topic I’d like to mention is gRPC — a high-performance open source general RPC framework that puts mobile and HTTP/2 first. gRPC supports both sync and async calls as well as multiple streaming options to enable you to build sophisticated real-time apps. Ray Tsang gave “gRPC 101 for Java Developers” talk to raise awareness about gRPC and show some of its nice possibilities.

Reactive Programming and Reactive Systems

Reactive programming models and architectures are getting more and more popular, e.g. CompletableFuture, RxJava, Reactive streams, Reakt, Vert.x, etc. Escoffier Clement gave great overview of Vert.x — a toolkit for building reactive distributed applications on top of the JVM. When previous time I tried Vert.x (that was about 2 years ago) for me it looked like a great but immature initiative. Now I might say it has become quite mature and I’d like to try it when I have free time. The slide I liked a lot from the presentation is below:

Slide from Escoffier Clement’s presentation

Also, Escoffier Clement had a separate hands-on-lab session that I missed as it was fully booked beforehand. Link to it is here and I hope to go through it too. In addition to Escoffier, Burr Sutter gave “Reactive Microservices with Vert.x” talk that is worth watching too.

Geoffrey Chandler and Rick Hightower presented “Reactive Java: Promises and Streams with Reakt”. I personally was not aware of Reakt — a reactive Java library that provides promises, streams, and a reactor to handle asynchronous call coordination.

RxJava topic was covered by others like “A Practical RxJava Example with Ratpac” by Laurent Doguin and “Full-Stack Reactive Java Applications with Docker” by Arun Gupta and Nicolas Raboy.

DevOps for Java Engineers

Java engineers have to be aware of modern devops tendencies, e.g. CI/CD, containers, orchestration, serverless, blue/green deployment, zero downtime, etc. Docker, Docker Swarm, Kubernetes are the most used buzzwords at the moment.

Thus, this area was covered by variety of talks, tutorials and hands-on-labs. Among them I can recommend “ Docker for Java Developers” by Arun Gupta, “From Monolith to Docker Distributed Applications” by Carlos Sanchez and “Microservices with Kubernetes, Docker, and Jenkins” by Rafael Benevides and Christian Posta. For me personally it was interesting to hear that Docker Swarm has become more mature and can be considered as an alternative to, for instance, Kubernetes. Another interesting point was that Mesos/Marathon stack was almost not represented in talk while I think that its popularity is pretty high. Also, Kohsuke Kawaguchi has presented “Jenkins 2.0” that includes pipelines, improved default setup, new web UI, etc.

JVM Languages

JVM languages were represented in different talks related to Scala, Kotlin, Groovy, also there were quite controversial titles like “Erlang versus Java” and “Haskell for the JVM”. The one point I’d like to highlight here is increased popularity of Kotlin, as Hadi Hariri mentioned:

So, please review “Creating Small DSLs with Idiomatic Kotlin” by Hadi Hariri and two great Scala related talks by Wix engineers: “Java 8 and Beyond: A Scala Story” by Ittai Zeidman and “Scala from the Trenches” by Kfir Bloch.

Summary

  • Java 8 adoption
  • Early evaluation of JDK 9
  • Microservices
  • Reactive programming and reactive systems
  • Devops for Java engineers
  • JVM languages
  • Applied machine learning*
  • Other (that was broadly represented but not so relevant for me): GC, JavaFX, JSF, PrimeFaces, Portlet, JavaME, IoT, etc.

Talks

In this section I’d like to highlight a few talks in random order that I had visited with very special and useful aftertaste either from technical content or from speaker’s impressive level.

First is “JDBC Next: A New Nonblocking API for Connecting to a Database” by Douglas Surber. This session presented entirely separate API that provides completely non-blocking access to the same databases as JDBC. More detailed blog post about this topic is here.

Goals
Current status of great initiative by Oracle

Second is “Automated Tuning of the JVM with Bayesian Optimization” by Ramki Ramakrishna, Alexander Wiltschko and Jianqiao Liu. Twitter engineers have applied state-of-the-art machine learning technology to continuously optimize the performance of a JVM-based microservice. Initial results showed that machine-learning-based Bayesian optimization can be used to solve an otherwise intractable high-dimensional combinatorial optimization problem. One case showed a performance efficiency improvement of over 80%, measured by requests served per unit of GC time. Impressive!

Performance Optimization
Bayesian Optimization
Lessons from optimal result

Third is “Java Libraries You Can’t Afford to Miss” by Andres Almiray and Ixchel Ruiz. Andres covered few libraries that have risen to the top, having proved themselves to be worthy of a place in every developer’s toolbox, for both production and testing code. Among them:

  • OkHttp — Basic HTTP/HTTP2 Client API
  • Retrofit wraps REST calls with Java interfaces, relies on OkHttp
  • JDeferred delivers the concept of Promises, promises can be chained, Java8 friendly, one shot execution
  • RxJava implements the Observable pattern, supports backpressure
  • JUnitParams parameterizes multiple methods with different argument cardinality, different data provider strategies are supported
  • Awaitility DSL for testing multi-threaded code
Libraries mentioned by Andres and Ixchel

Announcements

NetBeans As Apache Incubator Project

NetBeans — an open source development environment, tooling platform, and application framework, used by 1.5 million individuals each month — has been accepted for incubation at Apache. Although NetBeans is already open source, moving it to a neutral place like Apache, with its strong governance model, is expected to help get more contributions from various organizations. More info on that is here.

IBM Plans to Open-source its J9 VM for Java 9

During this year’s JavaOne community keynote, IBM’s Java CTO and a distinguished engineer, John Duimovich, announced one of the biggest news items of the evening — that IBM is planning to open-source its entire J9 VM for Java 9. The IBM SDK is built on OpenJDK libraries and (Open) J9. There is an OMR component that contains all the language neutral runtime subcomponents — the GC, the JIT, etc. The OMR (also known as Eclipse OMR) is a VM toolkit that helps various languages to create their own runtimes. More info on this is here.

--

--

Taras Matyashovsky

Software Engineer / Speaker / JEEConf & XP Days Ukraine Program Committee Member / Morning@Lohika Leader / Lohika / Altran Group