IoT, Mobile, Embedded und.... Java

JavaOne Tagebuch – Tag 2

Lars Röwekamp

Getreu dem Motto „Reduce to the Max“ habe ich mir für heute einige Sessions rund um das Themen Java für IoT und Mobile Devices, vorgenommen. Es war schon interessant zu sehen, welche unterschiedlichen Ansätze es derzeit in der Java Welt für diese beiden Anwendungsgebiete gibt. Nicht unbedingt überraschend spielt dabei natürlich auch Java ME Embedded weiterhin – oder sollte ich besser sagen wieder – eine Rolle.

iOS und Android Apps mit Java 8

Mobile Anwendungen für iOS und Android mit unserem geliebten Java 8 programmieren? Das passt irgendwie nicht so richtig zusammen. Schon gar nicht, wenn wir für beide Welten auf einer gemeinsamen Code-Basis aufsetzen wollen. Das dachte ich zumindest, bis ich heute den Talk von Shay Shmeltzer, Director of Product Management Oracle, gesehen habe. Shmeltzer präsentierte in seiner Session das Mobile Application Framework (kurz MAF) von Oracle.

MAF ist ein vollwertiges MVC-Framework zur Cross-Plattform App-Entwicklung in Java 8. Als Runtime, die mit der App gebundelt wird, was u.a. ein direktes Debuggen des Java-Codes auf dem Device ermöglicht, nutzt Oracle eine spezielle Lightway 64-Bit-JVM, die das Java 8 Compact 2 Profile unterstützt. Die Anwendung selbst wird in Java, JavaScript und HTML 5 geschrieben, wobei dank Integration von Apache Cordova ein Zugriff auf diverse Device-Features und native APIs des zugrundeliegenden mobilen Betriebssystems besteht. Oracle selbst nutzt MAF übrigens für die Entwicklung etlicher ihrer eigenen Kunden-Apps, so Shmeltzer. Gut zu wissen. „Eat your own dogfoot“ war schon immer einer guter Weg zur Verbesserung der eigenen Produkte.

Für die View hat Oracle mit AMX eine XML-basierte, Komponenten-orientierte Lösung – inkl. deklarativem Data-Binding – geschaffen, die stark an JSF- bzw. FXML-Views erinnert. Mehr als 80 vorgefertigte UI-Komponenten, die sich via CSS visuell anpassen lassen, stehen „out-of-the-box“ zur Verfügung. MAF inkl. spezieller visueller Editoren, lässt sich via „Oracle Enterprise Pack“ in Eclipse integrieren.

Wer nun, wie auch ich, auf den gloreichen Gedanken kommen sollte, MAF als Wrapper nutzen zu können, um so JavaFX-Anwendungen auf iOS- und Android-Devices zu bringen, den muss ich leider enttäuschen. Die beiden Ansätze sind nicht kompatibel und sprechen laut Shmeltzer unterschiedliche Zielgruppen an.

Auf die Frage „Does it cost anything?“ kam die leicht zynische Antwort „Of course it costs. It’s from Oracle“. Der Preis hängt aber wohl stark vom Einsatzszenario der App und bereits bestehender Oracle-Lizenzen ab.

Noch eine kleine Anmerkung am Rande: Es gibt einen Projektvorschlag von Oracle, die OpenJDK Runtime 9 in einem Headless-Mode auf führende mobile Plattformen zu portieren. Sollte dieses Projekt real werden, könnte es zukünftig in Kombination mit JavaFXPort doch noch einen eleganten Weg geben, JavaFX-Anwendungen plattformübergreifend und mit wenig Aufwand auch für iOS- und Android-Devices zur Verfügung zu stellen. Mehr dazu inkl. interessanter Diskussion über Sinn oder Unsinn dieses Vorschlags findet sich hier.

Microservice für IoT in Aktion

Microservices und IoT sind erst einmal kein Widerspruch in sich. Allerdings bringen IoT-Devices unter Umständen Restriktionen mit sich, die einen wesentlichen Aspekt von Microservice-orientierten Systemen – Continuous Integration & Deployment – deutlich erschweren. Stark limitierte Ressourcen oder Connectivity sind hier nur zwei Beispiele. Wie man mit dieser Herausforderung umgeht, konnte ich heute von Marcel Hoffmanns, Luminis Technologies, lernen.

An einer Demo eines modular aufgebauten Entertainment Systems (Music, Weather Info, Navigation, Phone …), welches zum Beispiel auf einem Smartphone oder in einem Car-Infotainment-System laufen könnte, zeigte Hoffmanns praktische Lösungen für Entwicklung, Integration, Deployment und Monitoring der verschiedenen Module.

Die einzelnen Module waren in dem Beispiel als RESTfull Microservices in Java realisiert und wurden als OSGi Bundles mit Hilfe der Open-Source-Plattform Amdatu in eine Demo-Cloud deployed. Zur Vereinfachung der OSGi-basierten Entwicklung verwendete Hoffmanns das Eclipse-Plug-in Bndtools.

Um auch zur Laufzeit einen Zugriff auf die einzelnen Entertainment-System-Module zu haben und diese bei Bedarf problemlos updaten zu können, wie man es sich ja bei Microservices wünscht, setzte Hoffmanns das Software Distribution Framework Apache ACE ein.

Alles in allem kam hier also ein wirklich interessanter Tool-Stack zum Einsatz, der die Entwicklung und das (Continuous) Deployment von OSGi-basierten Microservices in der Cloud mit relativ wenig Aufwand ermöglicht.

Klein, kleiner, am kleinsten a.k.a. Java ME Embedded

Es mag den einen oder anderen verwundern, aber Java ME gibt es tatsächlich noch! Und dank der stark wachsenden Anzahl von zum Teil ziemlich leistungsschwachen IoT-Devices scheint das Thema aktuell eine wahre Renaissance zu erleben. Die angepeilten Zielgeräte von Java ME Embedded sind dabei schon lange nicht mehr die guten alten Mobile Phones. Stattdessen rücken eher Sleep Tracker, Fitness-Armbänder, Smart Meter oder vernetzte Sensoren in einem Auto in den Fokus. Ein super spannendes Umfeld mit einem extremen Zukunftspotential. Für mich Grund genug, mich in der Session „Smart Devices fort he IoT: Java ME Embedded 8.2. and beyond“ durch Terrence Barr (Senior Technologist, Oracle) auf den aktuellen Stand der Dinge bringen zu lassen.

Wenn ich übrigens über leistungsschwache IoT-Devices rede, dann meine ich damit nicht den Raspberry Pi oder ähnliche, derzeit angesagt Devices. Derartige Geräte gelten aus Sicht von Java ME Embedded schon fast als Supercomputer. Es geht vielmehr um Geräte mit einigen wenigen 100 KByte RAM.

Was genau ist nun aber eigentlich Java ME Embedded? Leider ist es nicht ganz trivial, durch die ganzen Varianten und Profiles von Java ME durchzusteigen. Ein guter Einstieg zu dem Thema findet sich hier.

Stark vereinfacht gesprochen handelt es sich bei Java ME Embedded 8.2. um eine abgespeckte Version von Java SE 8. D.h. Sprach-Features wie Generics etc. stehen nahezu 1:1 zur Verfügung. Natürlich gibt es Abstriche bei einzelnen APIs. So findet man zum Beispiel keinerlei bzw. nur sehr rudimentäre APIs zur visuellen Gestaltung von Nutzeroberflächen. Diese sind bei Embedded Devices, die in der Regel Daten untereinander oder mit einem Server austauschen und dazu keine UI benötigen, auch nicht wirklich notwendig. Im Gegenzug dazu bringt Java ME Embedded Tools für die Remote-Installation und das Remote-Management der Anwendungen mit.

In einer „In-Vehicle IoT Services“-Demo zeigte Barr dann auch an einem realen Beispiel, wie Java-ME-Embedded-Anwendungen auf unterschiedlichsten Boards via OTA (over the air) deployed und gemanaged werden können. Die verschiedenen auf den Boards installierten Services sammelten zur Laufzeit Daten, z.B. ob das Board bewegt wurde, und sendeten diese zur Auswertung an einen im Auto eingebauten Server. Als Laufzeitumgebungen kamen in der Demo neben einen Raspberry Pi, mit dem Freescale K64 Freedom und dem STM32429I-EVAL, auch deutlich leistungsschwächere Boards zum Einsatz. Wirklich interessant ist, dass auf allen Boards exakt dieselbe Java-ME-Anwendung zum Einsatz kam. Sollte „Write once, run anywhere“ im Embedded-Umfeld tatsächlich doch noch Realität werden können? Das wäre zu schön, um wahr zu sein.

Laut Barr ist das nächste Release von Java ME Embedded für Q2 2016 geplant. Mit der neuen Version soll nicht nur wie bisher eine Java-Anwendung Over-the-Air aktualisiert werden können, sondern die gesamte Java-Runtime. Wenn man bedenkt, dass wir über einen Massenmarkt reden, bei dem teilweise mehrere hunderttausend Devices aktualisiert werden müssen, scheint dies ein wirklicher Mehrwert zu sein. Weiterhin soll eine Unterstützung für Bluetooth LE integriert werden. Ebenfalls ein wichtiger Schritt, da mehr und mehr Embedded Devices diesen Standard unterstützen und so eine vereinfachte Connectivity zu den Devices ermöglicht wird.

Resümee

Wie genau sieht nun mein Fazit für den heutigen Tag aus? Aus meiner Sicht ist der Zug für Java auf dem Smartphone oder Tablet längst abgefahren. Selbst wenn das von Oracle vorgeschlagene Projekt zur Portierung der OpenJDK Runtime 9 für iOS, Android und Windows Mobile umgesetzt wird, werden die resultierenden Anwendungen nicht mit nativen Apps vergleichbar sein. Java wäre somit nur eine weitere Cross-Plattform-Lösung unter vielen. Zugegeben, sicherlich eine Lösung mit einer sehr großen Community. Aber möchte man wirklich ein und dieselbe Anwendung auf so unterschiedliche Plattformen wie Android und iOS bringen? Als Android-Nutzer ist es mir doch egal, ob die Anwendung auf dem iPhone meines Kollegen genau gleich aussieht. Viel wichtiger ist mir doch, dass sie sich auf meinem Device wie erwartet – also wie native – verhält.

Viel interessanter erscheint mir da die Wiederauferstehung von Java ME (Embedded). Aktuell ist die Programmierung der meisten Embedded Devices aufgrund proprietärer Programmiersprachen und APIs extrem kompliziert. Hier kann Java eine wirkliche Vereinfachung bringen. Dies gilt insbesondere vor dem Hintergrund des zu erwartenden Wachstums und dem zu deckenden Bedarf an Entwicklern.

Überhaupt scheinen sich dank aktueller Diskussionen zu Themen wie Microservices oder IoT bereits totgesagte Technologien wieder in den Fokus zu schieben. Ein gutes Beispiel hierfür ist OSGi. Warum ist das so? Man mag es drehen und wenden wie man will, aber am Ende hat man es immer wieder mit stark verteilten Systemen und den damit zusammenhängenden Problemen zu tun. Ein Themenumfeld, das nun wirklich nicht neu ist und für das es im Laufe der letzten 20 Jahre nicht nur schlechte Lösungen gab.

Auch für morgen habe ich mir wieder einige, hoffentlich interessante Session vorgenommen. Was genau wird noch nicht verraten. Jetzt heißt es aber erst einmal ein paar alte Bekannte treffen, das eine oder andere Bier trinken und Networking betreiben. Das Abendprogramm der JavaOne ist mindestens genauso interessant und informativ, wie die Sessions tagsüber.

In diesem Sinne: Stay tuned …

Lesen Sie auch: JavaOne Tagebuch – Tag 1

Geschrieben von
Lars Röwekamp
Lars Röwekamp
Lars Röwekamp ist Gründer des IT-Beratungs- und Entwicklungsunternehmens open knowledge GmbH, beschäftigt sich im Rahmen seiner Tätigkeit als „CIO New Technologies“ mit der eingehenden Analyse und Bewertung neuer Software- und Technologietrends. Ein besonderer Schwerpunkt seiner Arbeit liegt derzeit in den Bereichen Enterprise und Mobile Computing, wobei neben Design- und Architekturfragen insbesondere die Real-Life-Aspekte im Fokus seiner Betrachtung stehen. Lars Röwekamp, Autor mehrerer Fachartikel und -bücher, beschäftigt sich seit der Geburtsstunde von Java mit dieser Programmiersprache, wobei er einen Großteil seiner praktischen Erfahrungen im Rahmen großer internationaler Projekte sammeln konnte.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: