Zum Inhalt springen
  • Von: Andreas Koop
  • Java Development
  • 06.04.2016

Moderne HTML5-Anwendungen mit Oracle JET entwickeln

Die Entwicklung von HTML5-Anwendungen auf Basis von JavaScript nimmt immer mehr an Fahrt – und Qualität – auf. Mit Oracle JET steht ein neues Toolkit zur Verfügung, welches die Entwicklung moderner Enterprise- bzw. Cloud-Anwendungen mittels JavaScript unterstützt. Dieser Artikel gibt einen detaillierten Einblick und zeigt die wichtigsten Schritte und Tools zur Erstellung der ersten JET-Anwendung.

Die Entwicklung von HTML5-Anwendungen auf Basis von JavaScript nimmt immer mehr an Fahrt – und Qualität – auf. Mit Oracle JET steht ein neues Toolkit zur Verfügung, welches die Entwicklung moderner Enterprise- bzw. Cloud-Anwendungen mittels JavaScript unterstützt. Dieser Artikel gibt einen detaillierten Einblick und zeigt die wichtigsten Schritte und Tools zur Erstellung der ersten JET-Anwendung.

Neben den bekannten Entwicklungsframeworks Forms, ADF und APEX hat Oracle eine weitere Option hinzugefügt. Mit Oracle JET – dem JavaScript Extension Toolkit – bietet Oracle ein Toolkit zur Erstellung client-seitiger Webanwendungen. Obwohl es bereits viele JavaScript-Bibliotheken und -Frameworks gibt, decken die wenigsten alle typischen Anforderungen an Enterprise-Anwendungen ab. Mehrsprachigkeit, Security, Barrierefreiheit, eine umfangreichen UI-Komponentenbibliothek – all das verspricht Oracle JET von Haus aus.

Dieser Artikel stellt die entscheidenden Konzepte und Methoden von Oracle JET vor, zeigt wie die erste JET-Anwendung erstellt werden kann, gibt Empfehlungen und einen Ausblick.

 

Architektur für moderne Web-Anwendungen

Zum besseren Verständnis der Implementierungskonzepte von Oracle JET ist es hilfreich sich die Entwicklung von Web-Architekturen, sowie der eingesetzten Entwurfsmuster zu veranschaulichen.

Seit jeher ist der De-facto-Standard zur Entwicklung von Web-Anwendungen das altbekannte MVC-Entwurfsmuster (Model-View-Controller). Nahezu alle Web-Frameworks empfehlen den Quellcode stets in Modell, View und Controller zu trennen. Abb. 1 veranschaulicht dieses Grundmuster.

Abbildung 1: Web-Architektur mit Model-View-Controller-Pattern auf Serverseite

Abbildung 1: Web-Architektur mit Model-View-Controller-Pattern auf Serverseite

Die Client-Seite setzt Anfragen an den Server ab und hat als Hauptaufgabe, die vom Server erhaltenen HTML-Seiten darzustellen. Neben dem einfachen Request/Response-Verhalten hat sich auch asynchrone Kommunikation mittels AJAX etabliert. Dabei wird nicht die vollständige Seite, sondern meist nur Daten oder Seitenfragmente übertragen. Die Serverseite hält den Anwendungszustand eines jeden Benutzers, was bei hohen Nutzerzahlen zu erhöhtem Ressourcenbedarf führen kann bzw. zur Beeinträchtigung der Performanz.

In den letzten Jahren hat sich diese klassische Web-Architektur weiterentwickelt. Mit der Standardisierung von HTML5, CSS3, JavaScript und immer performanter werdenden JavaScript-Interpretern verlagert sie sich mehr und mehr auf den Browser-Client. Die Zeiten von unstrukturiertem JavaScript-Code und einfachen DOM-Manipulationen scheinen vorbei zu sein. Moderne JavaScript-Bibliotheken und -Frameworks ermöglichen die vollständige Implementierung von Modell, View-Templates und UI-Logik in JavaScript. Der Server kümmert sich weiterhin um die Backend-Integration, bleibt jedoch zustandslos und stellt nunmehr nur noch JSON-basierte REST-APIs, WebSockets oder Server-Sent-Events (SSE) zur Verfügung.

Wesentliche Treiber für diese Entwicklung sind neben der HTML5 -Weiterentwicklung die vermehrte Nutzung von Cloud-Services, mangelnde Skalierbarkeit der serverseitig implementierten Webanwendungen, und nicht zuletzt die Anforderung, kontinuierlich neue Geräteklassen in kürzester Zeit bedienen zu wollen bzw. zu müssen. Abbildung 2 zeigt die typische Architektur für Single-Page-Applications (SPA) auf Basis des Model-View-ViewModel-Entwurfsmusters.

Abbildung 2: Clientbasierte Architektur für Webanwendungen mit Model-View-ViewModel-Entwurfsmuster

Das Model stellt die Anwendungsdaten für das ViewModel bereit und ist die zentrale Schnittstelle zu den Backend-Services. Es tauscht Daten mit den jeweiligen View-Modellen aus, um je nach View-Template die entsprechenden Daten mittels Binding zur Verfügung zu stellen bzw. auf Events (durch Nutzereingaben) zu reagieren. Um die User Experience (UX) durch kürzere Reaktionszeiten zu verbessern, nutzen moderne Web-Anwendungen des Weiteren den lokalen Browser-Speicher um View-Templates bzw. Daten auf Client-Seite zu cachen.

In der Regel kommunizieren derartig konzipierte Anwendungen mit dem Backend-System über JSON-basierte REST-APIs. Jüngste Architekturansätze empfehlen je Anwendung dedizierte "Backend For Frontend"-APIs (BFF-API) auf der Server-Seite. An Stelle generischer APIs können damit optimierte APIs je Anwendung bereitgestellt werden. Das BFF-API implementiert anwendungsspezifische Geschäftslogik und nutzt bestehende Enterprise-APIs oder Drittanbieter-APIs (z.B. Google Maps, etc).

Oracle JET – Das JavaScript-Extension Toolkit

Dem Grunde nach ist Oracle JET eine Zusammenstellung bewährter, aufeinander abgestimmter Open-Source-JavaScript-Bibliotheken, ergänzt durch ein umfangreiches Set vorgefertigter UI-Komponenten. Darüber hinaus existiert ein „Kochbuch“ zur Verwendung der UI-Komponenten und ein ausführlicher Development Guide.

"Alta UI"-Theme an Board

Oracle hat mit der „Alta UI“-Design-Initiative einen logischen und strategisch wichtigen Schritt gemacht. Neben der Verbesserung der Benutzeroberfläche ermöglicht Alta UI die Verwendung unterschiedlicher Technologien für die Implementierung. Kein Wunder also, dass das Standard-Theme für „Oracle JET“-Komponenten Alta UI lautet.

Neue Module einer größeren ADF-Webanwendung beispielsweise (ebenfalls auf Alta UI basierend) können somit mit Oracle JET implementiert werden, ohne dass End-Anwender dies bemerken würden.

Basiswissen für die erfolgreiche Entwicklung mit Oracle JET

JavaScript

Neben den grundlegenden Web-Technologien HTML5 und CSS3 ist ein solides Verständnis von JavaScript von Vorteil, um erfolgreich mit Oracle JET durchzustarten.

Anders als z.B. Java ist JavaScript eine dynamisch typisierte Skriptsprache, die auf sog. Prototypen basiert. D.h. es existieren keine Klassen, sondern nur Objekte bestehend aus Attributen und Funktionen. Vererbungsbeziehungen werden durch Objekt-Klone realisiert. Objekteigenschaften können jederzeit zur Laufzeit ergänzt werden. Das alles macht JavaScript so leistungsfähig, kann aber auch zu unerwarteten Fehlern führen, welche erst zur Laufzeit festgestellt werden.

jQuery / jQuery UI

jQuery [9] ist eine der beliebtesten JavaScript-Bibliotheken für die Bearbeitung des HTML-DOMs, der Event-Verarbeitung und einfachen Handhabung von AJAX. Es abstrahiert von unterschiedlichen Browser-Implementierungen und ermöglicht somit „sauberen“ – und damit wartbaren – JavaScript-Code zu schreiben.

jQuery UI setzt auf jQuery auf und implementiert ein Set von sog. UI-Widgets und verschiedenen Animationseffekten auf Basis eines definierten Komponentenmodells. Oracle JET nutzt dieses Komponentenmodell, um die eigenen JET-UI-Komponenten nach den gleichen Prinzipien zu entwickeln.

Knockout

Knockout [7] ist eine leichtgewichtige JavaScript-Bibliothek, die dabei hilft, das Model-View-ViewModel-Pattern in JavaScript zu implementieren. Das Hauptmerkmal von Knockout ist das Binding von HTML-DOM-Elementen (View) mit dem jeweiligen JavaScript-ViewModel. Je nachdem ob das ViewModel JavaScript-seitig geändert wird oder Benutzerinteraktionen in der View stattfinden, Knockout hält beides stets synchron. Listing 1 verdeutlicht diesen Binding-Mechanismus anhand eines einfachen Beispiels.

Listing 1: Binding von ViewModel-Attributen zu HTML-Templates mittels Knockout

Sobald Änderungen durch Benutzereingaben erfolgen, werden die dazugehörigen Eigenschaften im ViewModel automatisch aktualisiert (hier: firstName und lastName). Neben einfachen Bindings unterstützt Knockout die automatische Aktualisierung von Attributwerten, die auf anderen von Knockout observierten Eigenschaften basieren (vgl. fullName). Dieses Feature ermöglicht es, wartbaren HTML-/JavaScript-Code zu erstellen, da das Schreiben der typischen „onchange“-Eventhandler wegfällt.

RequireJS

Umfangreiche (client-basierte) Webanwendungen verfügen typischerweise über große Mengen an JavaScript-Code. Um Chaos und Verwirrung zu vermeiden, sollte JavaScript-Code modular in mehrere Dateien aufgeteilt und möglichst dynamisch nachgeladen werden – d.h. nicht pauschal, sondern immer dann, wenn der jeweilige JavaScript-Code benötigt wird. RequireJS [8] ist eine kleine Bibliothek, die genau das ermöglicht. Anstelle mehrerer script-Tags (je JavaScript-Datei) im HTML-Code, bedarf es mittels RequireJS nur einer einzigen Anweisung. Listing 2 zeigt einen typischen Anwendungsfall, bei dem das data-main-Attribute auf die anwendungsspezifische JavaScript-Datei (js/main.js) verweist, um weiteren JavaScript-Code asynchron nachzuladen.

Listing 2: index.html: JavaScript-Code mittels RequireJS einbinden

Die js/main.js-Datei definiert (neben den gewünschten Versionen) Abhängigkeiten zu weiteren erforderlichen JavaScript-Modulen und initialisiert im Beispiel das Knockout-Modul (vgl. Listing 3).

Listing 3: js/main.js: RequireJS lädt asynchron erforderliche Abhängigkeiten und benachrichtigt per Callback-Funktion

Zeile 1 gibt an, dass RequireJS die Module ojcore, knockout und jquery aus den entsprechenden JavaScript-Dateien laden soll. Sobald die Module geladen worden sind, wird die übergebene Callback-Funktion aufgerufen (Zeile 3). Über die entsprechenden Parameter kann anschließend innerhalb der Callback-Funktion auf die gewünschten JavaScript-Module zugegriffen werden. Dank RequireJS bleibt der JavaScript-Code modular und das Laden vom Server erfolgt effizient, da immer nur die jeweiligen Dateien übertragen werden, die gerade benötigt werden.

SASS

SASS [10] steht für „Syntactically Awesome Style Sheets“. Es erweitert die Möglichkeiten von CSS3 durch Einsatz von Variablen, Funktionen, verschachtelten Anweisungen und sog. Mixins. Mit SASS lassen sich Redundanzen in Stylesheets vermeiden, was in Summe zu wartbarerem CSS-Code führt. Oracle JET nutzt SASS intern zur Erstellung des „Alta UI“-Themes. Als JET-Entwickler wird man SASS nutzen müssen, sobald das „Alta UI“-Theme überschrieben oder ein eigenes Theme entwickelt werden soll.

Hammer.js

„Oracle JET“-Komponenten verwenden Hammer.js intern zur Touch-Gestenunterstützung. Um eigene Anwendungen mit Oracle JET zu entwickeln, ist kein Know-how von Hammer.js erforderlich.

Umfangreiche UI-Controls in Oracle JET enthalten

Im Gegensatz zu vielen anderen JavaScript-Toolkits kommt Oracle JET mit einer besonders umfangreichen Palette an UI-Komponenten daher. Neben klassischen Ein- und Ausgabeelementen sowie nützlichen Layout-Controls, sind zahlreiche Diagramm-Komponenten enthalten (DVT – Data Visualization Tools). Darüber hinaus existieren moderne UI-Elemente wie Switch, Filmstrip oder ListView (siehe Abbildung 3).

Abbildung 3: Moderne UI-Komponenten Out-of-the-Box nutzbar

Für die Implementierung von responsiven Layouts bringt das „Alta UI“-Theme Style-Klassen mit sich – basierend auf einem 12-spaltigen Rastersystem. Es ist sehr leistungsfähig und unterstützt vier verschiedene Geräteklassen: small, medium, large, x-large. Weitere Details und gut dokumentierte Beispiele sind im Oracle JET Development Guide [5] enthalten.

Barrierefreiheit

Barrierefreies Webdesign ist zum Glück kein Randthema mehr, sondern zentraler Bestandteil jeder ernsthaft betriebenen Webentwicklung.  Webanwendungen sollten vollständig mit Tastatur, Braillezeile und einem Bildschirmlesegerät bedienbar sein. Insbesondere für Sehschwache müssen Farbkontraste so gewählt sein, dass alle Informationen auch bei einer Umschaltung auf eine Schwarz-Weiß-Ansicht deutlich erkennbar bleiben.

Erfreulicherweise gibt es seitens des W3-Konsortiums Standards für barrierefreies Webdesign – WCAG 2.0 (Web Content Accessibility Guidelines) und seit 2014 die WAI-ARIA (Web Accessibility Initiative – Accessible Rich Internet Applications) Spezifikation, welche insbesondere die heutigen Anforderungen an dynamische Inhalte mittels AJAX, HTML5 und JavaScript adressiert. Die Spezifikation erweitert den HTML5-Standard um zusätzliche Attribute und Metadaten, um ansonsten semantikfreien HTML-Elementen eine klare Bedeutung zuzuweisen. Beispielsweise kann durch das WAI-ARIA Attribut role=“dialog“ auf einem DIV-Element ausgedrückt werden, dass es sich bei dem DIV-Element und seinem Inhalt um einen Popup-Dialog handelt. Aktuelle Bildschirmlesegeräte wie z.B. JAWS oder NVDA interpretieren die zusätzlichen Attribute und ermöglichen damit ein verbessertes Benutzererlebnis.

Sämtliche „Oracle JET“-UI-Komponenten implementieren entsprechende WAI-ARIA Features, was die Sicherstellung der Barrierefreiheit in der resultierenden Webanwendung unheimlich vereinfacht. Abbildung 4 zeigt die Verwendung der InputDate-UI-Komponente inkl. dem zur Laufzeit gültigen Quellcodes.

Abbildung 4: „JET UI“-Komponenten sind dank Nutzung von WAI-ARIA-Attributen standardmäßig barrierefrei

Im Beispiel wird das aria-describedby-Attribut in Verbindung mit einem visuell versteckten Element genutzt, um für Bildschirmlesegeräte zusätzliche Informationen zur Verfügung zu stellen. Diese wichtigen Details übernimmt Oracle JET.

Mehrsprachigkeit

Oracle JET hat den Anspruch sämtliche Anforderungen an Enterprise-Anwendungen zu erfüllen. So beinhaltet JET u.a. eine Unterstützung für Mehrsprachigkeit. Je Sprache können Übersetzungen in separaten JavaScript-Dateien hinterlegt werden. Der Zugriff erfolgt logischerweise über ein JavaScript-Modul – oj.Translations. Listing 4 zeigt ein Beispiel für die Definition und Verwendung von mehrsprachigen Texten in JavaScript.

Listing 4: Mehrsprachige Texte ablegen und verwenden

Theming

Das Standard-Theme bei Oracle JET ist Alta UI. Wem dies nicht gefällt bzw. es nicht zum Corporate Design passt, kann es mittels SASS überschreiben oder ein komplett eigenes Theme implementieren.

Security

Die Hauptaspekte bzgl. Security sollten serverseitig implementiert werden. Auf Clientseite setzt Oracle JET aktuelle Best Practices innerhalb der JET-Module und UI-Komponenten um, wie z.B.

  • Ausführung von JavaScript-Code im „strict mode“
  • Vermeidung von Inline-Script-Elementen
  • Escaping bzw. Bereinigen von generiertem HTML-Code
  • Daneben enthält JET ein JavaScript-API (oj.OAuth), welches das OAuth 2.0-Protokoll unterstützt. Weitere Details dazu befinden sich im JET Developers Guide [5].

Das „Oracle JET“-Kochbuch

Die Entwicklung mit Oracle JET folgt – zumindest bislang – einem codezentrierten und nicht deklarativen Ansatz. Statt „Drag-n-Drop“ ist bei JET „Copy & Paste“ angesagt. Es existiert ein umfangreiches „Kochbuch“ (Oracle JET Cookbook [4]) mit Codevorlagen für alle UI-Komponenten respektive Live-Vorschau – direkt im Browser. Abbildung 5 zeigt die Hauptbestandteile eines JET-Rezeptes für die Slider UI-Komponente: (1) Live-Vorschau, (2) HTML-View-Template und (3) JavaScript-ViewModel sowie Event-Handling. Dank der hohen Dynamik von JavaScript können Änderungen am HTML- und JavaScript-Code direkt im Browser ausprobiert werden.

Abbildung 5: JET-Entwicklungsrezept bestehend aus Live-Vorschau, einem View-Template und JavaScript-Handler

 

Oracle JET – Getting Started

Für den einfachen Einstieg in die Entwicklung einer JET-Webanwendung existiert ein Quickstart-Template als ZIP-Datei [3] einer modularen Single-Page-Anwendung. Ausgepackt enthält das Anwendungstemplate eine wohlstrukturierte Rahmenanwendung mit allen notwendigen Bibliotheken wie jQuery, RequireJS und Knockout-Templates. Abbildung 6 zeigt den Aufbau und die Struktur des Quickstart-Templates.

Abbildung 6: Aufbau und Struktur des JET-Quickstart-Templates

Den Ausgangspunkt bildet die index.html-Datei, die aus einzelne Regionen zusammengebaut wird. Unter Verwendung der Knockout-spezifischen data-bind-Syntax und der ojModule-Komponente werden entsprechende View-Templates inkl. dazugehöriger View-Modelle geladen (siehe Listing 5).

Listing 5: index.html: Zusammensetzung einer modularen JET-Anwendung

Mit der ojModule-Direktive wird mitgeteilt, das DIV-Element (navigationContent) mit dem View-Template navContent.tmpl.html auszufüllen (Das Suffix für View-Templates ist zentral in main.js vordefiniert). Auf diese Art lassen sich also statische Regionen erstellen.

Für den Hauptinhalt der Anwendung muss der Name des jeweiligen View-Templates und View-Modells dynamisch ermittelt werden. Dies geschieht in JET mit Hilfe eines ojRouter-Objektes, das den aktuellen Navigationszustand enthält (router.stateId()). Die State-Id enthält dabei den Namen des gewünschten View-Templates. Die Initialisierung des Routers und Vorbelegung des Defaults (home.tmpl.html) erfolgt in der „js/main.js“-Datei (siehe Listing 6).

Listing 6: js/main.js: Mittels ojRouter dynamische Regionen implementieren

Das Quickstart-Template ist ein guter Ausgangspunkt für neue JET-Anwendungen. Es folgt den „Alta UI“-Design-Prinzipien und bildet einen modularen Rahmen zur Implementierung der Anwendungsfälle.

Daten von RESTful Services anzeigen

In der Praxis werden typsicherweise RESTful-Services konsumiert, um die Daten anschließend beispielsweise in Tabellenform darzustellen. Dieser Anwendungsfall soll nachfolgend mit Oracle JET realisiert werden. Als Datenquelle fungiert ein Employee-REST-Service, der die Daten im JSON-Format zurückliefert [13]. Die JSON-Daten sollen gemäß Abbildung 7 in Form einer sortierbaren Tabelle aufbereitet werden.

 

Abbildung 7: Darstellung von JSON-Daten in einer sortierbaren Tabelle

Für die Umsetzung sucht man sich zunächst das passende Rezept aus dem Oracle JET Cookbook [4] und kopiert die entsprechenden Teile in das gewünschte View-Template und View-Modell. Anschließend erfolgt eine Anpassung an die jeweilige Datenstruktur des angebundenen Service (hier: Employee). Das angepasste View-Template für die Tabelle ist in Listing 7 dargestellt.

Listing 7: View-Template für eine sortierbare Tabelle

Die JET-Table-Komponente übernimmt jede Menge Arbeit. Als Entwickler müssen nur einige Eigenschaften konfiguriert werden und insbesondere die Spalten und die Datenquelle angegeben werden.

Als nächstes wird das View-Modell definiert. Es delegiert den REST-Aufruf und bereitet die JSON-Rohdaten für das View-Template als Collection auf. Listing 8 zeigt den JavaScript-Code für das empViewModel.

Listing 8: View-Modell für eine sortierbare Tabelle

Das Toolkit gibt die Implementierung für das View-Modell durch die JET-Objekte oj.Model, das einen Datensatz repräsentiert, und oj.Collection (Liste von Datensätzen) strikt vor. Durch Erweiterung und Konfiguration dieser JavaScript-Objekte erhält man spezifische Objekte (Emp, EmpCollection), welche die zugrundeliegenden Operationen (hier: fetch) automatisch ausführt. Optional kann eine parse-Funktion angegeben werden, um ein spezifisches Mapping zwischen JSON-Attributen und eigenen Modell-Attributen herzustellen (Im Beispiel auskommentiert).

Deployment von JET-Anwendungen

Da Oracle JET-Anwendungen in der Regel nur ein Bündel von HTML, JavaScript und CSS-Dateien sind, gibt es keine speziellen Vorgaben. Um die Anwendung für Benutzer verfügbar zu machen, müssen die zugehörigen Dateien also einfach auf einen beliebigen Web-Server kopiert werden.

Je nach Größe und Anwendungsschnitt empfiehlt es sich die Oracle-JET-Anwendung zusammen mit den zugehörigen REST-Services bereitzustellen. Bei Verwendung von JAX-RS kann die Anwendung dann als WAR paketiert und auf einem Java EE-Anwendungsserver – z.B. WebLogic – bereitgestellt werden. Für JavaScript-Fans ist eine Paketierung als Node.js-Anwendung denkbar.

Tools & Best Practices

Im Grunde kommt so ziemlich jeder Editor in Frage, der gute Unterstützung für HTML5, CSS3, JavaScript und idealerweise aber auch für korrespondierende Erweiterungen wie SASS mitbringt. Die aktuelle Empfehlung ist jedoch NetBeans [2]. Es enthält eine ausgereifte Unterstützung für HTML5-, JavaScript-, SASS-, Knockout-Code und ist derzeit die einzige Entwicklungsumgebung mit einem „Oracle JET“-Plugin.

Darüber hinaus existiert mit dem NetBeans Connector für Chrome eine integrierte Lösung für das Debugging von JavaScript-Code in der NetBeans-Entwicklungsumgebung inklusive einem leichtgewichtigen Server und automatischer Synchronisation von Code-Änderungen. Nach jedem Speichern wird im Browser die Live-Vorschau der Anwendung aktualisiert, was die Entwicklungsproduktivität enorm steigert.

Zusammenfassung und Ausblick

Oracle JET bietet ein umfassendes Toolkit zur Erstellung clientseitiger Webanwendungen mit JavaScript. Die umfangreiche Palette von UI-Komponenten inkl. Diagramm-Funktionalität sowie die eingebaute Barrierefreiheit machen es neben existierenden JavaScript-Frameworks sehr attraktiv. Die Einarbeitung in Oracle JET ist einfach, da es auf bewährten Open-Source-Bibliotheken basiert, zu denen es jede Menge Dokumentation und Lernmaterialien gibt. Die fehlende Tool-Unterstützung in Form eines grafischen Designers ist für ein Werkzeug aus dem Hause Oracle ungewöhnlich.

Die integrierten Features für Mehrsprachigkeit, Barrierefreiheit und Security machen deutlich, dass Oracle JET ein ernstzunehmendes Toolkit zur Erstellung cloudbasierter, unternehmenskritischer Webanwendungen ist. Oracle selbst nutzt es bereits seit einigen Jahren – primär zur Erstellung der Benutzeroberflächen für ihre Cloud-Services.

Die in der Version 1.0 noch fehlenden JavaScript-Build-Werkzeuge wurden Ende Februar 2016 mit Oracle JET 2.0 zur Verfügung gestellt. So fungiert Grunt [11] als Buildsystem, Yeoman als Generator und NPM als Package- und Dependency-Manager. Zudem wurde Oracle JET mit Version 2.0 auf GitHub Open Source bereitgestellt [12]. Klasse!

Mit dem im März 2016 freigegebenen Oracle Application Builder Cloud Service (ABCS) ist zu erwarten, dass die Entwicklung von JET-Anwendungen zukünftig im Browser stattfinden wird. Der ABCS ist seinerseits mit JET gebaut und ermöglicht es, JET-Anwendungen deklarativ, per „Drag-n-Drop“ zu erstellen. Mittels vorgesehener Extension-Hooks für CSS, HTML und JavaScript können komplexere Anwendungsfälle auf konventionellem Wege entwickelt und anschließend in die browserbasierte Entwicklungsumgebung integriert werden.

Wer sich mit JavaScript bislang noch nicht befasst hat, sollte lieber heute als morgen beginnen J. Es bleibt abzuwarten, wie sich Oracle JET in Mitten von ADF, APEX und Forms positionieren wird.

Weitere Informationen

[1] Oracle JET Homepage

[2] NetBeans 8.1

[3] Oracle JET Quickstart Basic Template

[4] Oracle JET Cookbook

[5] Oracle JET Development Guide

[6] Oracle JET Community Space

[7] Knockout

[8] RequireJS

[9] jQuery / jQueryUI  

[10] SASS

[11] Grunt

[12] Oracle JET auf GitHub

[13] Beispiel REST Service

[14] NetBeans Connector