JavaFX für Web-Frontends? jpro macht's möglich - JAXenter
Interview mit Tobias Bley

JavaFX für Web-Frontends? jpro macht’s möglich

Hartmut Schlosser

Tobias Bley

Sind Sie es auch leid, für Ihre Web-Frontends JavaScript zu nutzen? Geht es Ihnen auf den Geist, JavaFX nur via Plug-in einsetzen zu können? Tobias Bley ging es auch so. Doch mit jpro, das er auf der JAX 2017 vorstellte, gibt es endlich eine Möglichkeit, JavaFX-Anwendungen ohne nötiges Java-Plug-in im Browser auszuführen. Im Interview erklärt er, wie jpro genau funktioniert und wie es um die Zukunft von JavaFX bestellt ist.

JAXenter: Hallo Tobias und danke, dass du dir die Zeit genommen hast. Auf der JAX hast du das Projekt jpro vorgestellt. Kannst du kurz beschreiben, was jpro ist und macht?

Tobias Bley: jpro bringt JavaFX ins Web, und das ohne Plug-in! Damit ist es nun erstmals möglich, HTML5-Web-Anwendungen mit Java 8 und JavaFX als Frontend-Technologie zu entwickeln, ohne eine Zeile JavaScript in die Hand nehmen zu müssen 😃 Dabei stehen dem Entwickler alle Features von Java 8 zur Verfügung wie z.B. Multi-Threading, Lambdas und das Streams-API. Für die UI-Entwicklung können alle verfügbaren UI-Libraries verwendet werden – jpro hat hier keinerlei Beschränkungen.

JAXenter: Wie funktioniert jpro? Kannst du vielleicht ein Beispiel geben, damit Entwickler verstehen, wie sich die Arbeit mit jpro anfühlt?

Tobias Bley: jpro führt die JavaFX-Anwendung auf einem Server oder in Docker aus und mappt den JavaFX-Scenegraph, der das User Interface beschreibt, direkt auf einen HTML-DOM-Graphen im Browser des Clients. Während JavaFX-Anwendungen auf dem Desktop mittels DirectX (Windows) und OpenGL (Mac/Linux) gerendert werden, werden diese durch jpro im Browser mittels HTML5 (HTML + CSS + JavaScript + SVG) gerendert. Dies passiert vollautomatisch, ohne dass der Developer etwas dafür tun muss. Deswegen entspricht die Entwicklung von jpro-Anwendungen grundlegend der von normalen JavaFX-Anwendungen.

Zum Deployen einer JavaFX/jpro-Anwendung ins Web steht ein Maven- und Gradle-Plug-in zur Verfügung. Mit dem einfachen gradle-Befehl gradle runBrowser wird zum Beispiel eine JavaFX/jpro-Anwendung im Browser als HTML5-Version gestartet. jpro-web-apps können auch als Docker image verteilt werden.

jpro-apps können übrigens in jede andere Website/HTML-Seite per einfachem Tag eingebunden werden: <div><jpro-app href="/app/chart“/></div>

Eine einfache Hello-World-Web-Anwendung, bei der das „Hello World“ im Browser mittig angezeigt wird (was per normalen HTML + CSS alles andere als einfach ist), sieht so aus:

HelloWord.java

public class HelloWorld extends Application
{
    public static void main(String[] args)
    {
        launch(args);
    }

    @Override
    public void start(Stage stage)
    {
            //load user interface as FXML file        
            FXMLLoader loader = new FXMLLoader(getClass().getResource("HelloWorld.fxml"));
    
            Parent root = loader.load();
           
            //create JavaFX scene            
            Scene scene = new Scene(root);
  
            stage.setScene(scene);

            //open JavaFX window
            stage.show();
    }
}

HelloWorld.fxml (User Interface)

<StackPane>
    <Label>Hello World</Label>
</StackPane>

JAXenter: Welchen Mehrwert bringt JavaFX auf mobile? Warum nicht gleich zu Android- oder iOS-nativen Technologien greifen?

Tobias Bley: Mit jpro wird die Kombination von Java + JavaFX zu einem Dreamteam für Entwickler: Es ist nun erstmals möglich, mit nur einer Code-Basis und mit reinem Java sowohl Backend als auch Frontend zu entwickeln und zusätzlich alle wichtigen Plattformen wie Web/HTML5, Desktop (Windows, Mac, Linux), Mobile (iOS/Android) und Embedded/IOT zu adressieren! Im Gegensatz zur nativen Entwicklung müssen so keine unterschiedlichen Code-Basen gewartet werden und es sind keine Entwickler-Teams mit unterschiedlichem Know-How mehr nötig. Während man das aktuell auch mit Hybrid-Frameworks wie Cordova/Phonegap/HTML5, Ionic oder Angular machen kann, bietet die Kombination aus jpro und JavaFX die Möglichkeit, das mit reinem Java, allen verfügbaren Java-Libraries und mit den gewohnten Werkzeugen (Eclipse, IntelliJ, Netbeans, Maven, Gradle, Jenkins, etc) zu tun. Die Wiederverwendung von vorhandenem Know-How sowie die einfachere Wartbarkeit sind sehr wertvolle Argumente gegenüber dem Einsatz von nativen Technologien.

JAXenter: Wie ist denn der aktuelle Entwicklungsstand von jpro? Was geht schon, was noch nicht? Was habt ihr geplant?

Tobias Bley: Wir befinden uns aktuell in der geschlossenen Beta-Phase, in der wir mit vielen Firmen im Enterprise-Bereich die Technologie ausgiebig testen. Wir hoffen dann so schnell wie möglich in den öffentlichen Beta-Test überzugehen. Aktuell kann fast das gesamte Feature-Set von JavaFX für Web-Apps genutzt werden, außer 3D und dem Canvas-Node. Die Unterstützung für Canvas werden wir allerdings noch umsetzen.

JAXenter: In unserem Quickvote auf JAXenter haben 58 Prozent der Teilnehmer JavaFX so eingeschätzt, dass es zwar kaum eine Chance hat, sich als Alternative für JavaScript zu etablieren, sich aber im Java-Umfeld als Swing-Nachfolger eine breite Anwenderschaft sichern wird. Würdest du dem zustimmen?

Ich kenne sehr viele Entwickler, die Web-Frontends mittels JavaScript nur sehr widerwillig programmieren und gern drauf verzichten würden

Tobias Bley: Ich sehe im Beta-Test tagtäglich sehr viele interessante und spannende JavaFX-Projekte, die man leider, im Gegensatz zu den „hippen“ JavaScript-Projekten, nicht so oft im Internet findet. Das Ergebnis der Umfrage kann ich verstehen, wenn man annimmt, dass JavaFX eine reine Desktop-Technologie bleibt. Mit dem Einsatz von JavaFX für Web-Anwendungen mittels jpro sieht das allerdings ganz anders aus. JavaFX lebt wie nie zuvor und wird aus meiner Sicht eine noch sehr rosige Zukunft haben. Ich kenne sehr viele Entwickler, die Web-Frontends mittels JavaScript nur sehr widerwillig programmieren und liebend gern drauf verzichten würden, wenn es möglich wäre. Und hier freue ich mich auf das Release von jpro 😃

JAXenter: Welche Weiterentwicklungen in JavaFX würdest du in den kommenden Monaten persönlich gerne sehen?

Tobias Bley: Die zentralen Punkte für JavaFX sind aus meiner Sicht die offizielle Unterstützung der mobilen Plattformen seitens Oracle sowie die Unterstützung von neuen UI-Konzepten wie „responsive design“ (z.B. CSS3 FlexBox). Weiterhin wünsche ich mir eine Möglichkeit, auf Desktop- und Mobile-Plattformen nativen OpenGL-Content mit JavaFX-Content mischen zu können bzw. auf den JavaFX-OpenGL-Context zugreifen zu können, um so etwa High-Performance-Videowiedergabe mit Echtzeit-Filtern realisieren zu können.

Tobias Bley ist Mitgründer der jpro technologies AG und beschäftigt sich seit zwanzig Jahren mit der Entwicklung von Cross-Plattform-Anwendungen mit Schwerpunkt in der User-Interface-Entwickung für Mobile, Web und Desktop. Mit seinem weiteren Unternehmen OneXip GmbH zeichnet er verantwortlich für die bekannteste, preisgekrönte Java-Software im B2C-Bereich „UltraMixer DJ“, die unter anderem auf der AIDA im Einsatz ist.
Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Hartmut Schlosser ist Redakteur und Online-Koordinator bei Software & Support Media. Seine Spezialgebiete liegen bei Java-Enterprise-Technologien, JavaFX, Eclipse und DevOps. Vor seiner Tätigkeit bei S & S Media studierte er Musik, Informatik, französische Philologie und Ethnologie.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.