The day one keynote convinced everyone that Java is moving forward. There are good things happening, good things on the horizon, and a few surprise changes-in-direction from Oracle.
JavaOne keynotes are pretty low-key compared to years past. The theme this year is that Java is back on track and "moving forward" once again. I must agree; many new releases were announced. It is a small crowd but nearly double last year according to Oracle.
The schedule—lot's of "Cloud" sessions—gives hints of where Java is headed. Clouds of all sorts are here. Whatever your favorite definition of cloud, there's something for you. I am also struck by the number of REST-related sessions. Web services are a key enabler for cloud computing and it seems REST is the way to get there.
There was a dog and pony show about the Intel/Sun-Oracle relationship over the years. The data was impressive though. In the six years working closely with Intel, JVM performance has improved fourteen-fold and concurrent user capability has improved fifty times.
Ashok Joshi announced that Oracle is introducing its own NoSQL database. This, along with cloud computing, marks a turn around for Oracle, which had panned both technologies as fads in the past. Some numbers were presented that showed linear scalability for their new database. Off to a good start.
Mark Rienhold gave a presentation on the new features of Java 7, several of which received big applause. The language changes are going to help reduce code size, improve safety, and increase clarity. They are evolutionary in nature, but much welcomed.
Looking forward, Mark gave a survey of the key features being considered for Java 8. The two big things are Project Lambda and Project Jigsaw. Project Lambda will provide functional programming features without breaking backward compatibility. It's a good effort, striking the balance well. There are no closures because only "effectively final" variables can be referred to in the body of a function. Project Lambda will be a great enhancement to Java, keeping it competitive with newer languages for a few more years.
Project Jigsaw is a bit less satisfying. The main goal, of providing modular control for programming-in-the-large, is an important addition to Java. But there are some other confusing directions that may undermine the utility of this project. For example, version information can be embedded in source code, thus enabling a dependency graph within the JVM. This begins to encroach on the Maven value proposition and Oracle is, in fact, experimenting with using Maven repositories. It remains to be seen whether it is a good idea to embed versioning and dependency information in code, and it remains to be seen what Oracle does with this information.
One benefit of modules is to allow smaller deploys and standard configurations. For example, a goal is to be able to load a runnable JVM application in under 10MB. One hopes this will reduce build times and program startup.
It was mentioned that OSGi capabilities were being considered as part of the project. Sun had a history of folding existing technologies into core Java, whether they belong there or not. Think CORBA, XML, SQL, and JAX-WS. It appears that Project Jigsaw may be heading in that direction. My hope is the designers stick with the primary goal of improving programming-in-the-large and enabling reduced footprints.
A laundry list of potential Java 9 features were presented including self-tuning JVM, improved native integration, big data support, reification, tail calls and continuations, JVM multi-tenancy, and resource management. These all seem like great ideas.
Rich Bair discussed JavaFX and announced version 2.0, which is moving away from scripting and toward native Java. Is JavaFX giving up on taking down Adobe Flex, and now aiming at GWT? JavaFX still seems to me like a storm in a teacup, or coffee mug. Who is using it? Run everywhere is still a long way off. There were some pretty demos, but I've seen these for several years so JavaFX is still niche technology. Scene Builder for NetBeans was highlighted, but it is unclear whether more popular IDEs will be supported.
Linda DeMichele presented a new layer of lipstick for Java EE 7: as a PaaS solution. Moving EE into the cloud involves adding a slew of metadata for provisioning, configuration, QoS, sharability, and APIs. Key enablers are JAX-RS, caching, state management, and JSON among others. Finally, a raft of new roles will be introduced. It all smacks of extreme overengineering to me.
Arun Gupta gave a demo of this and the elephant in the room was that provisioning takes forever. It appears Glassfish has been extended to control the provisioning and elasticity capabilities. Other extensions mentioned were CDI, managed beans, JMS 2.0, and services metadata.
Hinkmond Wong spoke on mobile. It seemed not much new here. There was a rigged DNLP demo that wasn't very compelling.
I attended The Future of Java Build and Continuous Integration. This was a panel discussion which, I am afraid, had nothing new to discuss. Best practices seem to be meeting the needs for those who are using them. There were a couple of tidbits. Eclipse said it will never ship Jenkens because it changes too fast. Everyone on the panel agreed. An online Hudson book was just finished. One panel member is working on Hudson in the cloud.
I attended an interesting presentation by Bob Lee on the dark underbelly of references. I now understand soft, weak, and phantom references. If you don't, look up the presentation. You'll probably be surprised.
Alex Buckley drilled down on Project Lambda to Multicore and Beyond. He discussed the main features for building better parallel libraries and code as data.
It all starts with functional interfaces that express a function as one method.
The lambda expression is introduced as an implementation of a functional interface, along with a concise syntax for writing them. As I mentioned, you can only refer to effectively final variables, which is an extension of today's final-only variable use. Improved type inference enables the concise syntax. There is a new syntax for direct method references, allowing you to assign a method to a variable, for example. Finally, to avoid breaking compatibility, an interface syntax for default implementation is a new language feature. It allows a virtual extension or fallback to a static method defined somewhere else if it is not defined in an implementing class.
I attended a presentation called JAX-RS 2.0: what's in JSR 339? by Santiago Pericas-Geertsen. There are many new features being considered for the next release. The key items to expect are a client API, Filters, asynchronous invocation, JSR 330 (dependency injection), hypermedia support (transition links in headers), validation support, and better content negotiation support. These features have appeared in some REST framework implementations and seem to be best-in-class approaches. Check JSR draft and java.net for more details.
I had a great breakfast at Sears diner and great Thai food at Old Siam. I recommend both.