Oracle's roadmap for Javas 7 and 8 shows it recognizes the world is pulling away and leaving Java with last-century concepts and ideals. Java 7 is meant to set the foundation for a cloud-friendly platform, but the real cloud-ready features won't make an appearance until Java 8 in 2013 at the earliest.
While Larry and company can't be blamed for the years of stagnation suffered by both the platform and language under Sun Microsystems, the problem faced isn't that Java lacks the technology to work nicely in the cloud: the problem is, as ever, one of perception.
Java is either not "enterprise" enough for cloud computing – apparently lacking the required widgets – or it's too enterprisey and therefore not cool enough to join the likes of Ruby and Python.
It doesn't help that cloud computing itself is so nebulously defined. It can be any of utility computing, SaaS, PaaS, IaaS, pretty much anything released by Google, virtualized web hosting, online storage, thin clients, fat browsers communicating by AJAX, streaming sockets, web services, or moth farts.
Fuat Kircaali, founder and chairman of SYS-CON Events, Inc., said: "Cloud has become synonymous with 'computing' and 'software' in two short years, and (Cloud Expo) has become the new PC Expo, Comdex, and InternetWorld of our decade."
Ellison: Attorneys and Java patent law suits, he has
One can understand luminaries and event organizers wanting to grab a slice of image pie, but comments like Kircaali's do sum up the problem. Cloud – like agile – can mean whatever you want it to mean, to prove whatever point you want to prove.
So if cloud itself is such a broad and meaningless term, does it even matter (beyond the necessity of marketing) that Oracle intends to make Java more cloud-friendly? It does, because many of the individual meanings do posit solutions to real problems. But with the Java Standard and Enterprise Edition roadmaps, Oracle appears to be focusing on problems that have already been solved, while pushing back on fundamental issues.
The tools and languages required for serious server-side computing needs – parallel processing, scalability, modularity and so forth – are already there. While Java's built-in support for multithreading is an improvement over, say, C++, it's still surprisingly broken and non-obvious.
For example, being able to change a variable in one thread and not have its changes be seen in another. However, people who prefer a more intuitive approach - namely immutable objects, Actors and messaging, which avoid the complexity inherent in any shared-memory concurrent system - can already turn to the uber-Java, Scala.
In so many ways, Scala is already "up there" and proving to be a popular, successful choice among developers looking for a non-kiddie, JVM/cloud-based solution.
Those looking for modularity in their cloud solution needn't wait for Project Jigsaw to shake its box; OSGi already provides a working model for app segregation, and works nicely with Java EE.
Oracle, and the Java EE vendors, would just prefer for these ready solutions to be something "new" under the Java EE umbrella.
Support for dynamically typed scripting languages (due in Java 7) will allow Java to kick around with the cool kids, and may entice the casual web coder who wants to augment his site with a bit of EC2 or App Engine hosted scripting. While this supposedly vital improvement is welcome, JRuby and Jython are already doing nicely without it.
The one feature that genuinely is vital for Java to succeed in the cloud has been pushed back yet again. Lambda functions (essentially closures) are now set to appear in Java 8 (yes, 8) - though I'll believe it when I see it.
For all of Oracle's thundering, the improvements listed in the roadmap speak not of a cloud-heady future, but instead of a minimal check sheet – the least they can get away with promising in order to justify shouting about clouds.
Compare this with the early, energetic days of Java when there was a JSR for every eclectic purpose, many of which failed like Wallet while some were a huge success such as Smartcard, but that wasn't the point – it was a breeding ground for innovation, an energy-filled community of future-facing, Microsoft-bashing optimists.
Unofficial Java scores on creativity
That energy seems somehow lacking in present-day "official" Java, and Oracle's roadmap does little to revitalize the platform. Where are the more vertical JSRs for solving cloud-specific problems?
How about a vertical API for resource sharing, state caching, cloud deployment and monitoring, Distributed Management Task Force (DMTF) open management interoperability, or minimizing the number of network calls or calculations a CPU-constrained app makes? Or cloudy authentication and authorization requirements?
New APIs that are geared around the shift in architectural thinking that Java cloud developers must adopt would be most welcome. And closures – to enable developers to write isolated functions that can be evenly distributed – should be the cornerstone of Oracle's cloud strategy, their top priority.
When you think about the number and variety of cloud-specific JSRs Oracle could be kickstarting, and compare this with the promised offerings in Javas 7 and 8, it's obvious that some more creative thinking, a re-injection of steroids, is needed.
Luckily, much of that is already being supplied, just not by Oracle or the JCP. There are Java-based cloud platforms and libraries aplenty: Google AppEngine (currently runs a restricted form of Java), Stax (based on Amazon EC2), vForce.com, Aptna Cloud, RightScale for Java, SpringSource, and so on.
Another development worth watching is VMware's effort also called CloudFoundry, currently in beta. This open-source hosted service will allow Spring-configured Java apps to run in a full-on PaaS environment. And even Microsoft's Azure supports Java and offers an Eclipse plug-in.
I don't think we can expect any leadership from Oracle (just court cases and alienation of the faithful); rather, as usual, count on a buzzing community to lead Java in the right direction. ®