I am back at JavaOne 2017 this year! The conference is taking place at Moscone West and the Marriott Hotel in San Francisco.

Java EE and MicroProfile

What is new in Java EE 8? Well, there is the alignment with Java SE 8. The emphasis is on concurrency utilities and composability. JAX-RS 2.1 has reactive support as well as asynchronization on both server and client. Java EE 8 also contains Servlet 4.0, which supports HTTP 2.0. Also, CDI 2.0 has extended for multi-thread events and improvements.

MicroProfile 1.2 was also announced, and there is strong community support to accelerate the adoption of Java EE 8 through IBM, Red Hat, Tomitribe, and Payara. MicroProfile now has a Metric API for health checks, and it will be transitioning to the EE4J workload. It took about 8-9 months to move between MicroProfile 1.0 and 1.1 because the project moved to the Eclipse Foundation.

Of course, that was the big news just before JavaOne — Oracle’s decision to donate Java EE going forward to the Eclipse Foundation. The effort has a brand new project named EE4J, which is controversial. Mike Milinkovich has defended the position and appealed to the community not make a big deal about EE4J because it will be decided later. He stipulated the importance of setting up the process as the highest priority.

At the JavaOne keynote on Monday afternoon, the executive announced that Java EE 8 will be completely open sourced. Oracle also intends to hand over the controversial and expensive pay-to-play Technology Compatibility Kits to the Eclipse Foundation. This would be boon for smaller companies such as Tomitribe and Payara. It was also noted that Hitachi and Fujitsu are also looking into joining the EE4J organization because they have significant Java EE application server investments.

Dave Blevin thought that MicroProfile would come under the EE4j banner so that it works as the incubator of innovation. Currently, MicroProfile is under the Technology top-level in Eclipse, whereas EE4j is being established as a new top-level project under the Eclipse Foundation. Oracle's David Delabasse also stated the community should realize that it is still the early days and the focus should be transitioning Java EE to the Eclipse Foundation. It is worth reading the The Eclipse Enterprise for Java Project Top Level Project Charter and forming your opinion on the new top-level project initiative.

Head to Head With AWS

At this JavaOne, Oracle pushed out a self-healing, tuning, self-driving, and autonomous relational database 18c. Larry Ellison has his guns aimed at AWS' Relational Data Store (RDS) and he also guarantees to new customers will cut their cloud hosting costs in half. That’s is quite a claim and challenge. With the OpenWorld keynote, it was clear why Oracle took their eyes off the Java EE 8 drivetrain in 2016, which led to complaints in the Java EE community and spawned protest groups the Java EE Guardians and MicroProfile initiative. Obviously, Oracle directed their internal staff and focused on Oracle Cloud, the autonomous self-healing database, and their own PaaS solutions. Oracle has also been busy in the acquisition and mergers department by buying start-ups like the popular Apiary.IO, which makes RESTful API design services, and Wercker, the Dutch software development business that provides continuous integration (CI) and continuous delivery solutions to the cloud hosting space.

One clear example of this laser-sharp focus came with the surprise announcement of Project FN, Java Function, which is Oracle’s serverless implementation and attempt to get into the AWS Lambda market. Project FN is also open source. I spoke to the lead developer, Travis Reeder (Github Profile), downstairs in the exchange exhibition. “Think about serverless as a more granular layer below microservices. It is seamless and flawless integration into cloud machinery, you can think of it as a dynamic remote thread pool, if you want to.” You can read more about Project FN and its goals here.

Kubernetes, Anyone?

During the keynote, Oracle announced that it had invested a lot of resources into the Kubernetes.IO project. So this was a surprising endorsement, but also quite understandable. Kubernetes is a particularly well-known cloud provisioning layer for microservices across a range of technologies.

Oracle brought out on stage James Governor of the analysis firm Red Monk in order to draw a thick black line under the open source process. There is to be zero differences between the OpenJDK and the Oracle Java implementation from now on. I was taken aback by this because of the history of the encumbrances and the bittersweet fight to get OpenJFX out from Oracle’s house. But with the announcement, I have no choice but to take Oracle at their word. Oracle announced the license for OpenJDK would be compatible with the GNU license. I can only postulate that now that Jigsaw is in place, in the future, Oracle can still create proprietary modules of their own. I draw your attention to the Apple open source Darwin operating system. The Cupertino still own the keys to the entire enterprise because they employ digital cryptographic signatures and key registration when they release software to the public.

Frequent Releases

Java will now release more frequently and, every six months, there will be a new release. In March 2018, Java 9 release 18 will include JEP 286: Enhancement for local variable type inference.

var list = new ArrayList<String>(); // infers ArrayList<String> var stream = list.stream(); // infers Stream<String>





And then in September 2018, Java 9 release 19 will expect to have a form of pattern matching that may or may not support deconstruction of object instance members into tupled properties. This falls under the guise of Project Amber. The JEP is number 305.

String formatted; switch (obj) { case Integer i: formatted = String.format("int %d", i); break; case Byte b: formatted = String.format("byte %d", b); break; case Long l: formatted = String.format("long %d", l); break; case Double d: formatted = String.format(“double %f", d); break; case String s: formatted = String.format("String %s", s); break default: formatted = obj.toString(); }





And then the cycle returns in March 2019 with release 20.

I will have more to say about this JavaOne 2017 conference in a subsequent post.