Java als universelle Programmiersprache

Seite 2: Typen heutiger Anwendungsentwicklung

Inhaltsverzeichnis

Als Basis für sämtliche Diskussionen über den universellen Einsatz von Java dienen die Applikationstypen heutiger Anwendungsentwicklung. Folgende sollen sich generell von einem Produkt beziehungsweise einer Applikation bedienen lassen:

  • Standalone-Anwendungen für typische Desktop-Betriebssysteme: Windows, macOS und Linux
  • Desktop- und mobile Webanwendungen für die gängigen Browser: Internet Explorer, Edge, Firefox, Chrome, Safari und Android Browser
  • Mobile Apps für Android und iOS auf den diversen bestehenden und auch zukünftigen Geräten: Smartphone, Tablet, Android Wear, Android TV, Android Auto sowie watchOS, tvOS und CarPlay
  • Standalone-Anwendungen für kleine und Kleinstgeräten wie bei IoT, Lego Mindstorms und Raspberry Pi

Im Bereich der Standalone-Anwendungen auf den Desktop-Betriebssystemen kann Java seine volle Stärke ausspielen. Mit UI-Frameworks wie Swing, SWT und JavaFX wurden komplexe Desktop-Anwendungen sowie unter anderem typische Entwicklerwerkzeuge wie IntelliJ IDEA (Swing), Eclipse (SWT), NetBeans (Swing) und MagicDraw UML (Swing) implementiert. Dank der JVM laufen diese Anwendungen in Windows, macOS und Linux, ohne dass Programmänderungen erforderlich sind.

In diesem Bereich ist Java praktisch gesetzt, auf das Paradigma "Write Once, Run Anywhere" kann man sich voll verlassen. Die einzige Alternative ist, ganz auf die Microsoft-Welt zu setzen. Insbesondere Swing erfreut sich trotz einiger Designfehler und geringer Beachtung durch Sun beziehungsweise Oracle einer großen Beliebtheit und erlaubt Java-Entwicklern, schöne und schnelle Benutzeroberfläche umzusetzen.

Als Nachfolger für Swing steht JavaFX bereit, allerdings muss man hier von einem holprigen, sich über Jahre hinziehenden Start sprechen. Das geht soweit, dass immer noch nicht wenige gar von einer Totgeburt sprechen. Anderseits nimmt das Interesse an JavaFX mittlerweile anscheinend zu. Last, but not least gibt es diverse weitere Plattformen und Frameworks für das Erstellen von Standalone-Java-Anwendungen, beispielsweise die Eclipse Rich Client Platform (RCP) und die NetBeans Platform. Allerdings hat die Bedeutung von Standalone-Anwendungen in den letzten Jahrendank zunehmend leistungsfähiger Webframeworks drastisch abgenommen – ein Trend, dessen Ende nicht abzusehen ist.

Eine Webanwendung besteht in aller Regel aus zwei Teilen (Datenbanken und andere zu integrierende Systeme müssen hier nicht betrachtet werden):

  • serverseitiger Teil: Er läuft auf einem Web-Container wie Tomcat, Jetty, JBoss und Wildfly. Seit einiger Zeit steigt allerdings die Nachfrage nach einfachen Containern, sodass die genannten Applikationsserver häufig mit Dinosauriern verglichen werden, deren Karriere bekanntlich ja ein eher tragisches Ende nahm.
  • clientseitiger Teil: Er läuft auf einem Webbrowser. Letztlich gilt es, HTML5, CSS und JavaScript zu erzeugen.

In der rein serverseitigen Webanwendung bietet Java viele Frameworks sowohl für das serverseitige Erstellen von Benutzeroberflächen als auch für die Implementierung der Businesslogik an: Spring MVC, JSF-basierte Web-Frameworks, Vaadin, Struts, Wicket, Play Framework sind einige populäre Beispiele für serverseitige Benutzeroberflächen-Frameworks. Bezüglich der Businesslogik stehen Java EE und Spring Framework mit ihren beinahe unbeschränkten Möglichkeiten zur Verfügung.

In heutigen Webanwendungen spielt jedoch die grafische Oberfläche eine große Rolle. Typische Webanwendungen der Vergangenheit mit endlosen Formularen und Fehlermeldungen, die erst nach dem Klick auf OK erschienen, akzeptieren Nutzer nicht mehr. Mit HTML5, CSS und JavaScript werden interaktive Anwendungen innerhalb ihres "natürlichen Lebensraums", des Webbrowsers, umgesetzt.

Wie geschildert, lösen Webanwendungen die Standalone-Anwendungen Schritt für Schritt ab. So wurde Google Picasa (Desktop) durch Google Photos (Web) ersetzt. Eclipse Che ist komplett als Webanwendung umgesetzt und kann sowohl auf dem Server als auch komplett auf dem Desktop laufen. Die IDE hat somit das Potential, zur Alternative des heutigen Eclipse zu werden.

Sämtliche Webanwendungen lassen sich lokal als Desktop- und Standalone-Anwendungen mithilfe eines integrierten Webbrowsers und Webcontainers installieren und ausführen. In vielen Fällen können beispielsweise Chrome Apps Standalone- und Desktop-Anwendungen ersetzen. Sämtliche Systemzugriffe werden sowohl generell von HTML5 als auch von der Chrome Plattform angeboten.

Java-Techniken, welche die clientseitige Ausführung von Webanwendungen erlauben, wie Java-Applets oder Java Web Start haben sich nicht durchgesetzt und lassen sich heute ebenso wie ihre Pendants außerhalb der Java-Welt (Flash, Silverlight) ignorieren. HTML5, CSS und JavaScript sind derzeit De-facto-Standards für die Implementierung der Benutzeroberfläche auf Basis eines Webbrowsers. Müssen Java-Entwickler, zumindest was die GUI anbetrifft, also doch ihre gewohnte Entwicklungsumgebung verlassen und sich mit JavaScript und Konsorten beschäftigen? Analog zur Bewegung, JavaScript mit Node.js auf den Server zu bringen, gibt es einige Projekte, die indirekt den Einsatz von Java auf dem Webbrowser ermöglichen.

Verallgemeinert gesprochen wird dazu entweder der Java-Code auf die ein oder andere Art in JavaScript übersetzt oder eine Java Virtual Machine (JVM) in JavaScript implementiert. Tabelle 1 zeigt einige Werkzeuge für die Nutzung von Java für Webanwendungen.

Produkt Typ Bemerkung
GWT (früher: Google Web Toolkit) Java-zu-JavaScript-Transpiler auf Quellcode-Ebene mit JRE-Emulation Etablierter (knapp 10 Jahre alt!) Java-zu-JavaScript-Transpiler, beinhaltet außerdem Benutzeroberflächen-Elemente, ein Client-Server-Kommunikationsprotokoll und andere Dinge, die eine komplette Umsetzung einer Webanwendung ermöglichen. GWT wird aktuell für komplexe Webanwendungen bei Google und auch bei Eclipse Che verwendet. Die neueste GWT Version 2.8.0 wurde im Oktober 2016 mit Java 8 und besserer JavaScript-Interoperabilität veröffentlicht. Einen aktuellen Überblick über GWT (auch J2CL) sowie dessen Zukunft findet sich hier.
JSweet Java-zu-JavaScript-Transpiler auf Quellcode-Ebene, keine Emulation zu Java-Standard-Klassen Ähnlich wie GWT, jedoch mit eigens entwickelten Basisklassen, die sehr an JavaScript angelehnt sind. Der Benutzer kann also seine gewohnten Entwicklungswerkzeuge und die Java-Syntax nutzen, um JavaScript zu implementieren.
ST-JS (Strongly Typed JavaScript) Java-zu-JavaScript-Transpiler auf Quellcode-Ebene, keine Emulation zu Java-Standard-Klassen Einfacher Transpiler, sehr ähnlich zu JSweet
Java2Script (J2S) Java-zu-JavaScript-Transpiler auf Quellcode-Ebene mit JRE-Emulation Dieser Transpiler übersetzt den Java- zu JavaScript-Code, ähnlich wie GWT. Speziell zu diesem Transpiler ist die Integration für Eclipse SWT. Eclipse SWT wurde aus Java in JavaScript übersetzt und kann so auf dem Browser verwendet werden.
TeaVM Java-Bytecode-zu-JavaScript-Transpiler TeaVM kompiliert den Java-Bytecode zu JavaScript. Java-Quellcode wird hierfür nicht benötigt. TeaVM bietet einige Möglichkeiten zur Integration von bereits vorhandenen JavaScript-Code ähnlich wie in GWT an.
Bck2Brwsr Java-Bytecode-zu-JavaScript Transpiler Sehr ähnlich zu TeaVM
DoppioJVM JavaVM auf Basis von JavaScript DoppioJVM ist eine Java Virtual Machine, die 100 Prozent in JavaScript (bzw. TypeScript) geschrieben wurde. Die Idee ist, dass die Java-Anwendungen, ohne Änderung auf dem Browser, innerhalb dieser Virtual Machine laufen können.
DukeScript Generelles Framework, nicht nur für Webbrowser DukeScript passt nicht zu der Kategorie Transpiler oder JavaVM auf Basis von JavaScript. DukeScript ist ein Java-basiertes Framework mit Knockout als Data-Binding-Framework. Die Modelle für das Data Binding werden in Java umgesetzt. Um die Anwendungen auf dem Browser laufen zu lassen, wird Bck2Brwsr oder TeaVM benötigt. DukeScript erlaubt, ähnlich wie GWT, einen direkten Zugriff von Java auf JavaScript.

Hierbei fällt auf, dass Oracle, also der Besitzer von Java, kein einziges Produkt bietet, mithin kein rechter Wille zu erkennen ist, hier Java voranzubringen. Statt sich mit die Verbesserung und Verbreitung von Java zu beschäftigen, bietet Oracle mit JET (JavaScript Extension Toolkit) eine JavaScript-Framework-Sammlung an. Positiv anzumerken ist, dass Oracle keinen erneuten Versuch startet, das Rad neu zu erfinden – das Application Development Framework (ADF) sei an dieser Stelle als abschreckendes Beispiel genannt. Schaut man an der Stelle aber beispielsweise auf die JSF-Komponentenbibliothek Primefaces, besteht Anlass zu einer gewissen Verwunderung. Sie ermöglicht es, ohne weiteres ansprechende, moderne Weboberflächen zu programmieren. Leider ist von Seiten Oracles wenig Enthusiasmus zu spüren, die konzeptionellen Schwächen von JSF zu verringern.

Darüber hinaus zeigt alleine die pure Masse an Java-zu-JavaScript-Transpilern das große Interesse an ihnen. Oracle scheint in diesem Bereich jedoch nichts auf dem Plan zu haben. Nichtsdestotrotz ist es mit den Alternativen aus Tabelle 1 möglich, Webanwendungen mit HTML5, CSS und Java zu entwickeln, ohne JavaScript einzusetzen.