Unfortunately, I arrived really late and missed the big announcement: closures in Java 7! Rejoice! (or not)
Below is a summary of what I did get to see.
The Java EE 6 Platform by Antonio Goncalves
A laundry list presentation of the new concepts, new specs and additions to existing specs in JEE 6. It’s funny how “new” actually means “stuff that implementations (Hibernate, JSF libraries, etc.) have gotten right and that we’re importing.”
Apparently, the full JEE 6 spec contains 28 other specs and is 8000 pages long! As Alex astutely pointed out to me afterwards, this essentially prevents new players from entering a market which has been reduced to roughly 3 vendors (Weblogic/Oracle Server/GlassFish, WebSphere & JBoss).
That’s where the Web Profile comes to the rescue: a spec stripped down to the stuff that 80% of web apps actually use. A lightweight server implementing it would be nice.
The fact that EJB 3.1 (a.k.a. EJB Lite) can run in a JSE environment and a few sweet new annotations (@Asynchronous, @Inject) make the EJB component model a lot more attractive than was, even in 3.0.
If you speak french and want to hear more of Antonio, you should listen to the excellent Les CastCodeurs podcast and its all-star line-up.
Writing Asynchronous Web application (Comet) using the Atmosphere Framework by Jean-Francois Arcand and Paul Sandoz
Atmosphere is framework that hides the ugliness of hand-coded server-side AJAX push and the bizarre workarounds necessary to get it to work in all browsers. For example, in WebKit, they must initially return lots of “<!– —————————– –!>”. As I said, bizarre. Atmosphere also abstracts away server-specific implementations.
Not much to say about this presentation, as it really was an introduction to the framework, but it looked very clean and simple and played nicely with JAX-RS, which is a very good API.
Distributed Programming the Google Way by Gregor Hohpe
This session divided into two parts: a brief presentation of some of Google’s infrastructure (Google File System, BigTable, MapReduce and Sawzall) and a discussion of the higher-level “Underlying Considerations” that drive their implementation. These were:
- Sharding.
- Less is more. Give up some features to gain others. e.g. BigTable abandons many fundamental features of relational databases to gain distribution and scalability.
- Expect failure. Failure will happen, all the more frequently when running on vast clusters of commodity hardware. Coping mechanisms include replication, re-starting and even accepting certain forms of data loss.
- Autonomy. Individual components should be able to survive the failure of a node by carrying on with the information they were able to retrieve. In GFS, clients look up chunk servers through a “master,” but read directly from the chunk server so that they can function even if the master subsequently fails.
- Empower the runtime.
- Favour Stateless.
- Separate stateless from stateful. Three related points. Higher-level, functional, declarative programming gives the runtime more freedom to optimise, parallelise, etc. Carefully decomposing and bounding stateful contexts from stateless ones has similar benefits. In general, this means separating data gathering and aggregation (stateful) from data processing (stateless).
- Precision vs. speed. You can’t always have both, so know when you need one or the other.
While these points aren’t really new, it’s always interesting to hear about the kinds of architectural trade-offs you have to engage in at a certain scale.
Fantom on the JVM (BOF) by Dror Bereznitsky, Frederic Simon and uncredited English guy
You may be wondering what “Fantom” is. It’s The Language Formerly Known As Fan. Although not quite as hyped as Scala, I feel Java -> Fantom is, from a language point of view, a much easier transition than Java -> Scala. Fantom seems to try to solve a lot of everyday problems developers have, in a fairly simple language with a relatively low learning curve.
I’d looked at Fan(tom) before and nodded appreciatively, but this whirlwind tour of its features boosted my desire to really dig into it. Some of the things I really like are the native JavaScript compiler, null-safe types, optional dynamic typing, the build system and, of course, the functional aspects. The time literals for hours, minutes, nanoseconds, etc. seem a little arbitrary and weird; I just hope the Fantom approach won’t lead to too many warts.
They’re getting close to a 1.0 release, maybe adoption will start then.
