practicing techie

tech oriented notes to self and lessons learned

Tag Archives: javame

JavaOne 2012 – Java ME and Java Embedded

Much of my day-to-day development related work is in some way associated with Java SE and EE, so attending JavaOne provided a great opportunity to catch up on Java ME. Quite a few things have happened with Java ME, it seems.

Java in the embedded market received prime time coverage, both in the conference technical sessions, as well as in the keynotes. During the Java Strategy keynote Nandini Ramani (VP development; Java Client, ME and Card) characterized the still rapidly evolving embedded space as follows:

“Given the trends in the M2M space, as well as the “Internet of Things”, we believe that the Java embedded space is very exciting at this point in time. In the 1990s it was the internet of computers, with the PC and the web making significant advances, and in the 2000s we saw a proliferation of connectivity of people, where phones took over and everyone was connected to some gadget all the time. And now, as a third wave, we’re seeing the Internet of Things, we’re surrounded by devices, many of the so unobtrusive that you don’t even realize they’re around you all the time, like thermostat sensors, automatic controls and smart homes etc. And this explosion of devices that are connected 24/7 that tend to stay on 24/7 is the next IT revolution and Java, we believe, is the right solution for this space.

Java Embedded solutions provide a framework that not only lets you provision, manage and secure your devices, but also lets you aggregate and analyze the data that you get received. So, in this way you’re not just sending from these sensors data to the backend, but rather sending information to the backend.”

“Internet of Things” represents basically the same vision as ubiquitous computing invented 20+ years ago. Ubiquitous computing, with its vision of small Internet connected devices communicating and coordinating their activities with each other, has been a hot topic in IT on and off for the last decade or so. I remember a colleague of mine having an approximately 80 mm * 50 mm sized single-board ethernet connectable embedded device that could run Java in the early 2000s. It was a mass market device and not a prototype.

The keynote continued by describing three categories of compute devices Oracle targets in the embedded space:

“The first one are the really, really small edge devices, as I mentioned, things like thermostats and sensors, which typically are either connected directly to an backend directly through a operator network over 3g or they form part of a solution, which is in a local or personal area network, in which the gateway tends to be the hub.”

Oracle targets this device category with the Java ME Embedded, which is a runtime for small embedded devices: Microcontroller and low-power devices class platforms. Java ME Embedded is a Connected Limited Device Configuration / Information Module Profile (CLDC/IMP-NG) based Java runtime. It’s meant for headless operations i.e. it doesn’t include UI support.

“And the gateway itself is the second category device, which actually just coordinates the local network. And as the name implies, it performs the duty of being a gateway to the backend.”

This category is covered by the Java Embedded Suite: Pre-integrated full featured Java Embedded Platform. This is a small footprint optimized middleware stack, which includes Java SE Embedded (subset of Java SE optimized for mid-size headless devices), GlassFish application server (subset includes Servlet, JDBC, JAX-RS) and Java DB.

“And the backend itself is the third category of devices that you see here, which is a datacenter or a cloud.”

In this picture the backend is built on server class devices, that are able to run Java EE based middleware.

The Strategy keynote put a lot of emphasis on end-to-end solution and how the entire ME / SE / EE product spectrums form a full device to-data-center solution. There was also, a lot of talk about SE/ME convergence where the target is to reduce SE footprint to make it suitable for embedded devices. Concrete efforts towards this goal include CLDC 8 specification (JSR 360) that aims to make ME a strict subset of SE. Java SE/ME convergence is also supported by process changes where the previously separate two Java Community Process governing bodies for Java ME and SE/EE are merged into one (JSR 355). On the technical side, it’s a lot of effort is clearly being put into Project Jigsaw. Jigsaw’s purpose is to implement a module system for Java SE and apply it to the platform and JDK. This would make evolving the platform and libraries easier in the future, but also allow optimizing application memory footprint, thus enabling SE and EE applications to be run on smaller devices than today. Jigsaw is currently scheduled for Java 9, due in 2015.

At JavaOne 2011 the “Technical Keynote: Java Mobile and Embedded” session put a lot of focus on the mobile space. In the 2012 keynotes mobile devices were a mere footnote, as was the case also with the technical sessions. Looking at the sessions of Java Embedded @JavaOne sub-conference it was all about M2M, healthcare, manufacturing and industrial automation, robotics and even liquor dispensers.

I also noted an interesting piece of trivia while visiting the Oracle OpenWorld Bookstore at the conference (on 2012-09-30 in Moscone West): I counted 7 different books on Android development and quite a few on jQuery Mobile, JavaScript / HTML and HTML 5, but no books on Java ME. This is interesting given the dispute over Android’s Java compatibility.

Based on the keynotes, technical session topics and the fact that Java ME Embedded stack doesn’t support mobile phones, the mobile application platform market doesn’t seem to be a primary target for Oracle or Java ME anymore. Also, Oracle’s Java for mobile offering, the Oracle Java Wireless Client (OJWC) only appears to be targeting the feature phone segment and not smartphones.

Focusing on the embedded, and not the mobile space seems only natural given the current market realities: according to IDC 2012 second quarter smartphone platform market share, Java ME enabled phones (BlackBerry OS, Symbian) have approximately 9% market share of phones sold. Both BlackBerry and Symbian have been losing market share rapidly, and probably with little chance of the other top platforms (Android, iOS, WP) adopting Java ME, ME will likely be losing ground.

But what exactly is Oracle’s mobile strategy? They don’t currently appear to have any mobile application platform or runtime products covering the high-end smartphones. JavaFX was previously targeting also mobile devices, and Oracle even demoed JavaFX on iOS and Android tablets at JavaOne 2011. Now, JavaFX seems to be only for desktop (with ARM support in the works).

Oracle introduced Project Avatar at JavaOne last year, which was described in this year’s technical session as follows:

“Avatar is a modular, end-to-end web development framework for building enterprise mobile and desktop applications using JavaScript, HTML5 and a thin-server architecture.”

There’s also a related project called Project Easel, which provides the foundation for tooling support for project Avatar. Easel provides advanced tooling in NetBeans for HTML 5 projects. The tooling includes among other things static web resource synchronization between NetBeans and the browser, JavaScript debugging, improved HTML 5, CSS and JavaScript editing support (documentation, code completion, navigation etc.) and is available in NetBeans 7.3 beta. The browser plugin lets the developer easily adjust the screen size to various pre-defined sizes, including common smartphone screen sizes. These are nice features, but arguably, not radically better than the tools currently used by web frontend developers (e.g. FireBug etc.).

So, Oracle, like many others in the industry, seems to be betting on the browser becoming the application runtime environment also in the mobile space, as has already happened on the desktop. Avatar/Easel provide just the basic plumbing, but a technology such as Apache Cordova (previously PhoneGap) could additionally be used to achieve native application like capabilities.