Oracle has released the latest version of embedded Java, Java ME Embedded 3.3, along with the Jave ME SDK 3.3. Oracle is looking to support applications for the Internet-of-Things (IoT) and machine-to-machine (M2M) solutions. They have even come up with the Java Platform Integrator Program to streamline the engineering work required to target and deploy Java applications across multiple platforms. Remember that “write-once, run everywhere” claim?
- Can I run Java on low end microcontrollers? 4
- Java Tool Slims Down Embedded Runtime
- Making Sure Java Web Applications Are Secure
Java has made a significant impact in the enterprise and on the desktop. Java underlies many Android applications as well. Java has been utilized in embedded applications but typically where the hardware can readily support it. For example, a system that can run Linux easily supports Java in all its forms.
Getting Java to run on more resource constrained platforms is a challenge but one that has been addressed by Oracle as well as other Java suppliers (see Java Tool Slims Down Embedded Runtime). The migration from 8- and 16-bit micros to 32-bit Arm processors makes Java more interesting. It is possible to target the smaller platforms but the restrictions are many and the results are less than stellar. Besides, there are plenty of low end platforms that have more then enough capability to handle Java.
Oracle has essentially sidelined real time Java that was initially pushed by the Real Time Specification for Java (RTSJ). RTSJ has been around for awhile but did not garner lots of traction (see Real-Time Java Spec Gets Reference Platform). Companies like Atego still have real time Java implementations like Atego aonixPerc that including real-time garbage collection (see Atego Q & A On Real Time Java) but the bulk of embedded Java applications tend not to require real-time support.
This is where Oracle's latest comes into play. Java ME Embedded 3.3 also highlights the importance of the Arm architecture. It now supports everything from the ARMv5 through ARMv7 that matches most of the processors and microcontrollers with an ARM license. Java ME Embedded targets platforms from the low end on up where the low end is represented by platforms like the Raspberry Pi (see Arduino, Raspberry Pi or BeagleBone?) or Keil's STM32 F200 Evaluation Board for ARM (Fig. 1) that is an STmicroelectronics-based Cortex-M processor platform.
The Java ME Embedded binaries and tools are freely available, for internal development and testing purposes only, on the Oracle Technology Network (OTN). This includes support for the Keil board and the Raspberry Pi. The minimum memory requirements are 8 Mbytes of RAM and 5 Mbytes of program memory but that does not leave any space for an application. It also targets Linux 2.6.22 or higher with glibc2.9. The G1 and HotSpot garbage collectors are supported.
- Java Program Controls Tuning Of Direct Digital Synthesizer Chip 1
- Atego Q & A On Real Time Java
- Real-Time Java Spec Gets Reference Platform
Oracle has made a number of improvements and move the ME closer to the SE version. This includes support for a wider array of network and communication devices as well as improving logging and monitoring. Of course, extended lifetime support is part of the package that is important to embedded developers.
The Java ME SDK 3.3 supports the 32- and 64-bit versions of Windows 7. There are plug-ins for the NetBeans and Eclipse IDEs. There is also support for in-field and remote administration and debugging that works off the added logging and monitoring support.
Many embedded C/C++ programmers will wonder why anyone would choose Java for embedded applications but those who have used it think otherwise. It is simply a matter of choosing the right tool for the job and in the IoT connected world it makes sense having a platform that can help reduce programming errors, improve security and has a significant number of frameworks and support. It also makes a good match for M2M applications where Java is being employed on the server side so both programs are written in the same language.