Mark Reinhold started off the JavaOne 2012 Technical Keynote. He said this year's edition would be a little different because it would use largely the same example to illustrate various aspects of Java rather than standalone individual coverage of each component of Java. Richard Bair and Jasper Potts of the JavaFX team (and associated with FXExperience) introduced this example application, a schedule builder with presentation and speaker data from this year's JavaOne.
As part of the introduction of the example application, the presenters made extra effort to point out that Oracle is shipping the JVM for MacOS and that OpenJDK is what is being used in the example. They also stated that the example runs on Linux as well. They used Java SE 7 and JavaFX 2 for this application and they talked about the availability of SceneBuilder for building a JavaFX application. They demonstrated the use of SceneBuilder within NetBeans to generate the JavaFX-based login page.
Other interesting JavaFX advancements mentioned include the addition of a ComboBox (though there is no Date Picker yet), interoperability with SWT, and the availability of a JavaFX Packager. It was also mentioned that JavaFX was architected and designed from the beginning to allow for the main UI thread to be separate from background threads, allowing it to take advantage of multiple CPUs.
Bair showed the relatively verbose code that would be required to implement a JavaFX application to fully take advantage of multiple threads today. Brian Goetz came to the stage to describe how Project Lambda and the changes to the Java language will enable "better parallel libraries." Goetz said that the easiest way to help developers is to give them better libraries, but the language must sometime be extended when the limits of the language prevent libraries from being written to fully satisfy the need.
Goetz stated that the goals of inner classes are the same as Project Lambda, but inner classes have "a whole lot of other baggage." Goetz added that bulk operations on collections may not "really be needed, but things are better this way." Goetz then showed a simple but highly illustrative example of how Project Lambda changes how we process bulk data changes in a collection. His slide showed the J2SE 5 enhanced for loop is used today but can be done with the forEach method (added to all of the collections via the new default implementation interface approach) and a Groovy-like closure syntax (
Goetz's next slide was even more impressive. He showed what appeared to be three operations being performed on a collection as it was iterated. However, he pointed out that these would all be enacted at once on the collection with only a single traversal of that collection. All I could think was, "Wow!" Goetz also had a slide showing off the
computeIfAbsent operation on collections. He ended by saying there's still lots of work to do and citing two URLs for playing with Project Lambda: http://openjdk.java.net/projects/lambda/ and http://jdk8.java.net/lambda/.
There was some interesting discussion on the differences between traditional Java environments and embedded environments. Raspberry Pi received multiple and prominent mentions.
Reinhold started talking about modularity and Project Jigsaw and showed a "little bit of a spaghetti diagram that is way cleaner than where we started, which was a total spaghetti diagram." He used this as a starting point for discussing the controversial decision to boot Project Jigsaw from Java 8 to Java 9.
Reinhold had a slide focused on things that are in Java 8 such as Project Lambda, Compact Profiles, Type Annotations, Project Nashorn, and the new Date/Time API. Reinhold added that "all this work is being done in OpenJDK" and that "all the specification work is being done in the JCP."
Arun Gupta had the unenviable task of beginning his presentation at the time the keynote was scheduled to end (7 pm local time). He talked about Java EE and showed a slide titled, "Java EE Past, Present, & Future." This slide showed how Java EE has added features since the ten specifications of J2EE 1.2 in December 1999. Gupta had another slide talking about "Java EE 7 Revised Scope" and how it increases productivity (via less boilerplate code with richer functionality and more defaults) and adds HTML5 support (WebSocket, JSON, and HTML5 Forms).
Another Gupta slide was titled "Java EE 7 - Candidate JSRs" that listed JSRs that are all new to Java EE 7 as well as those being modified. He then focused individual slides on some of them. His "Java API for RESTful Web Services 2.0" slide talked about a standarized approach using a client API. Gupta's slides showing how this is done today (without libraries) and comparing it to the next client API demonstrated how much simpler this is going to be.
Gupta's coverage of JMS 2.0 included discussion of less verbosity in JMS thanks to annotations and other new features in the Java programming language. He mentioned that the required resource adapter will make it easier to "mix and match" JMS providers in the future. Gupta showed a slide full of small-font code ("this code is not meant to be readable") demonstrating sending a message using JMS 1.1. This was followed with a slide showing significantly less (and much clearer) code in JMS 2.0 taking advantage of annotations and resource injection to send a message.
Gupta's coverage of the JSON support to be added to Java EE included the bullet "API to parse, generate, transform, query, etc. JSON." He then showed some slides with example JSON-formatted data and example code for using builder-style to access the JSON. It felt a lot like Groovy's JSON handling.
Java API for WebSocket 1.0 will allow annotations to be used to easily work with WebSocket. When covering Bean Validation 1.1, Gupta pointed out that not all new adopted JSRs are being led by Oracle. He showed using the built-in
@NotNull annotation on method parameters, but also showed that one will be able to write custom constraints that can be similarly applied to method arguments.
Gupta highlighted miscellaneous improvements to Java EE such as JPA 2.1, EJB 3.2, etc. The majority of these JSRs have early public drafts available. GlassFish 4 is the reference implementation of Java EE 7 and already includes WebSocket, JSON, JMS 2, and more.
One of Gupta's slides was focused on Avatar. The "Angry Bids" example application was demonstrated. It is based on Avatar and runs on GlassFish and uses standard Java EE 7 components.
Like the Strategy Keynote, this Technical Keynote was held in the Masonic Auditorium. One of the interesting trends I noticed in tonight's keynotes was that at least three different people from three different organizations mentioned looking for skilled Java developers should contact them if interested in job opportunities.