Java ME 8 Released With A Big Slice Of Raspberry Pi
Monday, 05 May 2014
Java ME should have taken the embedded world by storm, after all that's what Java was originally intended to do. With the release of Java ME 8 and its support for Raspberry Pi, it may have its best second chance.
Java ME is the cut down version of Java aimed at small computing devices such as embedded processors, smart phones and even tiny card/SIM computers. It really should have been used by every mobile phone, because that's what it was designed for long before Apple or Google settled on Objective C and a dialect of Java for their mobile phones.
Many smart phones did adopt Java ME - it is claimed that it is on 2.1 billion phones in total including Nokia's series 40, Bada and Symbian. However, the current state of the market is that Java ME accounts for around 3% of the mobile phone market.
With the release of Java 8, the language as a whole has a new vitality and a few days ago Java ME 8 was released with an increased emphasis on embedded processors and Raspberry Pi in particular.
A blog post by Terrence Barr Principle Product Manage for Oracle's small embedded Java Products explains:
"This release is the culmination of a two-year effort driving a major update of the Java ME technology as a modern embedded software platform, purpose-built as a foundation for new services in the Internet Of Things. "
The key feature of Java ME 8 is that it is moving closer to Java 8, but it also now supports a very low cost entry to the world of embedded processing - Raspberry Pi. The Java team at Oracle has seemed very keen on the Pi since it was introduced, but most of this effort has gone almost unnoticed as most Pi users have tended to use Python for their embedded development.
Now with ME 8 the emphasis on the Raspberry Pi is more evident. There are only two example systems supported by the development system - the Pi model B and the Qualcomm IoE. The Pi costs about $35; the Qualcomm IoE is $499 - guess which one is going to get more attention from experimenters and start ups? Unless you really need the special features of the IoE, the Raspberry Pi is an obvious choice and it has a huge community to draw on.
So how likely is it that Raspberry Pi can boost the popularity of Java ME?
In principle, developing with Java ME and the Pi is easy. Java ME development is supported by Netbeans 8 and this is a very easy-to-use IDE. Unfortunately, trying to follow Oracle's documentation is not an easy task. Unlike Python development, which can be hosted on the Pi, you have to setup Netbeans on a PC and download the programs you create to the Pi. In this sense, development using ME and Pi is more like working with the Arduino, which isn't powerful enough to host its own development environment.
There are two other problems in using the ME with the Pi. The first is the generality of Java ME. You can customise it to run on a wide range of devices from mobile phones, to secure cards, through embedded IoT (Internet of Things) devices. This makes the documentation, and actually using ME, seem more complex than it is when you focus on a single physical device like the Pi.
The second problem is caused by the fact that Java ME has lots of security built in. After all, it is going to be used with mobile phones and security is important. The problem for the average Pi programmer is that security often isn't an issue at all. The Raspberry Pi is secure because it's sitting on a desk and the only code that is going to be loaded into it is code you have produced. Adding security makes things more difficult for the beginner - for example, code has to be signed before it gets the API permissions it needs even to flash an LED.
Overall the task of using Java ME on the Raspberry Pi is tougher than using Python. The reward of working with Java ME is that you are working in a language and system that is transferable to other devices. If it turns out that your creation is a great hit, you can port it to a custom-made Java ME device and move the code without any effort. The hardware is essentially configurable within the software. If you use Python, say, on the Pi you most likely have to start from scratch unless you move to something very similar to the Pi.
Of course you can argue that the idea of a system like Java ME, which Oracle clearly sees as a professional tool, is out of place on the Pi and any success it might have on this amateur platform would have little impact. I'm not so sure that this is true - the Raspberry Pi is a phenomenon of low cost computing driving enthusiasm and leading to applications that otherwise wouldn't get off the ground. There is also the small matter that a professional version of the Raspberry Pi was recently announced and you can expect it to find its way into professional projects.
Java ME could do worse then get caught up in the growth of the Pi and similar development boards. There are even hints that Oracle is considering expanding ME support to other, as yet unnamed, low cost embedded processors.
Perhaps Java ME's true place is within the Internet of Things.
But if it is, Oracle's team is going to have to do a lot to make it much easier to use for the complete beginner to Java ME.
To make the point I leave you with this definition from the glossary:
IMlet An application written for IMP-NG. An IMlet does not differ from MIDP 2.0 MIDlet, except by the fact that an IMlet cannot refer to MIDP classes that are not part of IMP-NG. An IMlet can only use the APIs defined by the IMP-NG and CLDC specifications.
The story of pointer events and its API is a complicated and divisive one, but now that it is effectively a W3C standard browser makers should start to support it. The problem is that Apple won't and [ ... ]