"Write once, run everywhere" - war einst das Mantra der Java-Schöpfer. Ihr Erfolg manifestiert sich nirgends deutlicher als in der Welt der eingebetteten Systeme. Für die Teams, die Software für kleine Devices und versteckte Computer entwickeln, ist es ein Vorteil, eine Version eines Java-Programms schreiben und sie überall ausführen zu können.
In vielen Fällen wissen die Entwickler nicht einmal besonders viel über die CPU, die im endgültigen Produkt zum Einsatz kommt - und das müssen sie auch nicht. Die Flexibilität von Java hilft Produktteams auch langfristig: Die zweite, dritte oder vierte Generation eines Produkts könnte schließlich auf anderen Chips laufen. Selbst dann kann die Software in der Regel mit geringem oder gar keinem zusätzlichen Aufwand angepasst werden.
Um eingebettete Java-Applikationen zu schreiben, kommen heute zahlreiche Frameworks zum Einsatz. Einige sind eher allgemeine Tools, gedacht für den Einsatz auf vielen Maschinentypen. Für Teams, die neue Applikationen erstellen, sind sie oft ein guter Ausgangspunkt. Andere Frameworks wurden für ein bestimmtes Device, beziehungsweise Gerätefamilien entwickelt. Sie können sowohl eine Programmiergrundlage als auch Funktionen enthalten, die die Geräte (oder andere Produkte) unterstützen, auf denen die Anwendung laufen soll. Das gebräuchlichste Beispiel für diese Art von Embedded Java Framework ist wohl Android, mit dem Entwickler Anwendungen für Android-Smartphones, Chromebooks oder beispielsweise auch TV-Geräte erstellen.
8 Java Frameworks für Embedded Development
Wir haben die acht besten Java Frameworks für Embedded Development für Sie zusammengestellt. Sie alle machen sich die Stabilität und Bandbreite von Java zunutze und binden Bibliotheken von Drittanbietern ein. Diese Frameworks passen traditionelle Java-Techniken und -Ansätze für den Embedded-Markt an, so dass sie schneller und leichter laufen.
Android ist wahrscheinlich das bekannteste Embedded Java Framework. Es lieferte für Google die Grundlage, um Apps für Smartphones bereitzustellen - und mit Apple zu konkurrieren. Weite Teile der ursprünglichen Android-Codebasis wurden Open Source zur Verfügung gestellt. So unterstützen inzwischen auch viele andere Gerätetypen Android-Anwendungen - Chrome OS ist nur ein Beispiel. Android-Apps zu schreiben, ist ein einfacher Weg, um all die Nutzer dieser Devices zu erreichen. Zudem können die Gerätehersteller ihre Produkte für Drittentwickler öffnen.
Einige Entwickler arbeiten nur mit den grundlegenden Android-Bibliotheken, die für viele Programme mehr als ausreichend sind. Andere verwenden Frameworks, die auf Android aufsetzen. Zu den beliebtesten gehören:
Flutter und
Ein gängiges Feature ermöglicht Entwicklern dabei, Designs für andere Plattformen wie iOS wiederzuverwenden. Flutter beispielsweise zielt auf sechs verschiedene Plattformen ab.
Dieses Rahmenwerk erleichtert es Entwicklern, High-Level-Java-Code zu schreiben, der die in Embedded-Systemen üblichen Schnittstellen anspricht. Beliebte Beispiele sind Raspberry Pi und Orange Pi. Mit Java Embedded Framework können Sie auf Low-Level-Programmierkenntnisse verzichten, die für die Kommunikation mit Hardware-Schnittstellen wie
SPI,
I2C,
Serial,
GPIO oder
One Wire erforderlich ist.
Die Entwickler des Frameworks haben das (Meiste davon) bereits für Sie erledigt.
Java Embedded Framework ist in mehrere Hauptmodule unterteilt. Das Hauptmodul stellt eine direkte Verbindung zur Linux-Betriebssystemschicht her, die das Board steuert. Das vereinfacht es, reines Java zu verwenden, um viele Aufgaben auf Betriebssystemebene zu verknüpfen. Darüber hinaus stehen auch Treiber für die wichtigsten Hardwarekomponenten zur Verfügung.
Oracle Event Processing (PDF)
Eine Aufgabe von Embedded Devices besteht in der Datenerfassung. In Fabriken werden sie beispielsweise dazu eingesetzt, die Produktion zu tracken und auf Anomalien zu überprüfen.
Oracles Event Processing Framework ist eine leichtgewichtige Version des Oracle Event Driven Servers. Es ermöglicht Devices, Ereignisse zu erfassen, zu filtern und je nach Bedarf weiterzuleiten.
Ein Teil der Konfigurations-Syntax ist an SQL angelehnt, ist also relativ leicht zu erlernen. Das Event-Processing-Modell des Frameworks kann Event Streams auch auf Korrelationen und andere Muster untersuchen.
Soll ein eingebettetes Device auf RESTful Events reagieren, ist Jersey eine gute Option. Das Framework ist darauf optimiert, mit den ein- und ausgehenden JSON-Paketen zu jonglieren. Dazu erweitert es das JAX-RS-Toolkit. Softwarearchitekten schätzen die Lösung auch, weil sie eine der besten Möglichkeiten darstellt, um die Kommunikation mit Devices zu automatisieren.
Jersey bietet einige Extrafunktionen, darunter die Möglichkeit, Antworten zu "chunken". Das bedeutet, Daten zu speichern und sie dann in einem großen Stück ("chunk") zu versenden. Besonders nützlich ist diese Technik für Geräte, die nicht immer mit dem Internet verbunden sind. Darüber hinaus lässt sich so auch die Belastung für zentrale Server verringern, die mit vielen Devices kommunizieren müssen.
Viele haben bei Vert.x direkt das vollumfängliche Framework für die Entwicklung von Webanwendungen im Kopf. Einer dessen Vorteile ist seine Modularität: Der Vert.x Core enthält den wichtigsten Code, um Services zu schreiben, mit denen interagiert werden soll. Die Netzwerk- und Dateisystemprotokolle des Vert.x-Frameworks stellen dabei sicher, dass Streams eingehende und ausgehende Anfragen händeln. Einige Vert.x-Module sind ideal für Embedded-Aufgaben geeignet:
Die OpenAPI- und API-Service-Bibliotheken zum Beispiel übernehmen viele Aufgaben, die erforderlich sind, um eine API zu unterstützen.
Die GraphQL-Bibliothek enthält die Routinen, die erforderlich sind, um die entsprechenden Calls zu unterstützen.
Diese Bibliotheken konzentrieren sich hauptsächlich auf die Entwicklung von Webanwendungen und -Services, können aber auch für einfachere Kommunikationsaufgaben eingesetzt werden.
Besteht das Ziel darin, einen einfachen, leistungsstarken RESTful-Webservice zu erstellen, wenden sich viele Java-Entwickler an Dropwizard. Das Framework ist auch für eingebettete Applikationen eine gute Wahl. Um Devices zu steuern und zu konfigurieren, können Sie die Webservice-API verwenden, andere Geräte sind über die API in der Lage, auf den Dienst zuzugreifen. Gesteuert wird der Dienst über statische HTML-Seiten mit ein wenig JavaScript.
Auch Dropwizard ist in eine Reihe kleinerer Module unterteilt, die je nach benötigter Funktion gewählt werden können:
Sowohl Core- als auch Database-Modul eignen sich gut für grundlegende Tasks.
Menschen, die mit Ihren Diensten interagieren, können die Module Forms oder Views verwenden.
Authentifizierung ist generell eine gute Idee und das entsprechende Dropwizard-Modul bietet Support für die Protokolle Basic und OAuth2.
Jede Anwendung, die eine robuste Netzwerkschicht benötigt, kann auf Apache Mina zurückgreifen, um die verschiedenen NDP- oder TCP-Verbindungen sicher und zuverlässig zu händeln.
Der Code baut auf den neuen IO-Klassen (Java NIO) auf - Entwickler können ein- und ausgehende Daten auf abstraktere Weise behandeln. Der Code dafür ist weitgehend ereignisgesteuert, so dass sich Entwickler nicht um das Netzwerk-Interface kümmern müssen.
Einige Embedded-Prozessoren weisen zusätzliche Security Layer auf, um sensible Daten zu schützen. Oracles Java Card unterstützt den Betrieb mehrerer Applikationen innerhalb solcher sicherer Enklaven. Die CPUs die dabei zum Einsatz kommen, sind oft langsamer und verfügen über weniger Speicherplatz - deswegen ist das Java-Card-Framework entsprechend schlank, um auch mit weniger Ressourcen reibungslos zu funktionieren.
Und Java-Web-Frameworks?
In diesem Artikel geht es zwar um Frameworks für Embedded Development - in der Praxis erstellen jedoch immer mehr Entwickler Web-Applikationen für eingebettete Systeme. Kleinere Devices mögen weniger leistungsfähig sein, haben aber oft genug RAM und CPU-Leistung an Bord, um eine Webserver-Anwendung für einige wenige Clients auszuführen. Applikationen, die nicht für eine Milliarde Nutzer im offenen Internet gedacht sind, können problemlos auf einem Embedded System laufen. Das ist oft eine gute Lösung, da sich die Benutzer über eine Webanwendung mit dem Gerät verbinden, während Entwickler alle Standardfunktionen einer einfachen Website nutzen können.
Dabei funktionieren viele gängige Frameworks für Web-Applikationen auch erstaunlich gut auf kleinen Devices. Das ist zum Teil auf die Bestrebungen zurückzuführen, die Serverseite von Java-Webanwendungen zu verkleinern und zu vereinfachen. Neuere, leichtgewichtige Frameworks wie
Vaadin oder
sind allesamt eine zuverlässige Wahl. Einige Embedded-Entwickler kommen sogar mit älteren, schwereren Frameworks aus - etwa
Struts oder
Letztgenannte Frameworks stammen aus einer Zeit, in der Server weit weniger leistungsfähig waren. Sie eignen sich gut für Szenarien, in denen ein Benutzer mit der Software interagieren muss und das eingebettete Gerät relativ leistungsfähig ist.
Standard-Java für Embedded Apps?
Manche Entwickler brauchen kein Embedded Framework - sie nutzen die benötigten Bibliotheken und Funktionen einer Standard-Java-Version:
Java Micro Edition gibt es in verschiedenen Versionen, von denen einige explizit auf eingebettete Systeme abgestimmt sind. Sie bieten wichtige Java-Bibliotheken, beispielsweise OAuth für die Authentifizierung und JSON, um Messages zu parsen und zusammenzustellen.
Oracle Java SE Embedded ist eine Java-Standardversion, die für die Embedded-Welt konzipiert ist. Oracle unterstützt viele verschiedene Arten von Devices, indem es Standard-Binärdateien zur Verfügung stellt. So ist beispielsweise der Raspberry Pi (und einige andere, eingebettete Systeme) bereits vordefiniert. Auch andere wichtige Marktsegmente wie Smartphones und TV-Geräte werden unterstützt. Für einfache Embedded-Java-Entwicklungsprojekte könnte ein Standard-Download von Oracle bereits alles bieten, was Sie brauchen.
(fm)
Dieser Beitrag basiert auf einem Artikel unserer US-Schwesterpublikation Infoworld.