Services – mit REST, JPA 2, EJB 3.2, WebFrameworks, JBoss WildFly

Die Beispiel-Applikation

Die JEE 7 Beispiel-Applikation greetingcardsadmin-primefaces des vorigen Blog-Eintrags hier arbeitet mit JSF 2.2 auf Basis der Template-Technologie und ermöglicht die leichte Pflege von und die Suche nach Grußkarten-Stammdaten und Grußkarten-Bestandsdaten durch den Admin einer Grußkarten-Applikation. Die Beispiel-Applikation verwendet im Backend JPA 2 – Entities und  EJB 3.2.

Mit JBoss Forge wurde in dem Blog-Eintrag sowohl das JSF 2.2 User Interface erzeugt, als auch die Angular JS GUI der zweiten greetingcards JEE 7 Beispiel-Applikation greetingcardsadmin-angularjs. Mit der zweiten, responsiven Applikation kann der Admin der Grußkarten-Applikation auch unterwegs im Browser auf seinem Smartphone die zu pflegenden Grußkarten-Stammdaten (z. B. Kategorien), Bestandsdaten (Grußkartenbilder) und Bewegungsdaten (versendete Grußkarten) bearbeiten oder durchsuchen.

Die Verwendung und Effektivität der eingesetzten JEE-Technologien und WebFrameworks wird durch diese simplen JEE7 Beispielprojekte belegt und die jeweils als .war Archiv verfügbaren greetingcardsadmin-primefaces.war und greetingcardsadmin-angularjs.war per Deployment auf dem JBoss WildFly Application Server zum Test zur Verfügung gestellt.

Wie zusätzliche Selenium-Tests mit dem Selenium FireFox-PlugIn durchgeführt und diese Tests gespeichert  werden können, ist bereits in diesem Blog-Eintrag hier beschrieben. Diese Selenium Tests können gespeichert und in einer Test-Suite zusammengefasst werden, um auch später jederzeit die korrekte Funktionsweise der Eingabe-Aktionen und Link-Aufrufe der Mobile Applikation automatisiert verifizieren zu können.

Bei dieser Gelegenheit darf auf das sehr effektive, interessante und erfolgreiche Seminar von Binaris Informatik

“TDD mit Java”

hingewiesen werden.

Verwendete Technologien

a) Die Beispiel-Applikation greetingcardsadmin-angularjs:

Die Beispiel-Applikation greetingcardsadmin-angularjs verwendet im Frontend Angular.js und HTML5-/CSS3 und auch die JavaScript-Bibliotheken Bootstrap.js und jQuery.

Das MVC/MVVM Framework Angular JS ermöglicht unter Einsatz des Router Design Patterns und des Front Controller Design Patterns und Two-way Binding Views das Erstellen von responsiven (Mobile) Applikationen zur Bearbeitung von über ein Service Interface verfügbaren Daten aus einem RESTful WebService.

Mit AngularJS werden in der Beispiel-Applikation mit den HTML5-Frontends deklarativ die Benutzerschnittstelle  umgesetzt und die  Anwendungslogik in den JavaScript-Dateien definiert. Für die dabei verwendeten Edit-Templates und HTML-Suchseiten können Anpassungen (z. B. für die auszugebenden Daten) innerhalb des jeweilgen JavaScript edit*Controllers.js oder auch der jeweiligen search.html durchgeführt werden. Dazu hier ein kurzer Beitrag bei DZone.

b) Die Beispiel-Applikation des vorigen Blog-Eintrags greetingcardsadmin-primefaces:

Die JSF 2.2-Applikation greetingcardsadmin verwendet im Frontend JSF 2.2 und .xhtml-Templates mit HTML5-/CSS3. Weiterhin findet die JSTL-TagLibrary Verwendung, zu der es hier eine sehr gute RefCard von DZone gibt.

c) Das RESTful WebService-Backend beider Beispiel-Applikationen:

Für das JAX-RS Service-Backend beider Beispiel-Applikationen kommt Java EE zum Einsatz (Stateful/Stateless  EJB 3.2 und JEE 7) und im Backend Model JPA 2.1 Entities. Über ein Service Interface werden die  interessierenden Daten der Beispiel-Applikationen aus einem RESTful WebService verfügbar gemacht.

Maven JEE 7 JBoss-Artefakte und Maven Dependencies

Wie die Applikationen greetingcardsadmin-primefaces und greetingcardsadmin-angularjs mittels JBoss Forge erstellt werden, ist bereits in diesem Blog-Eintrag hier beschrieben worden, und wie in der pom.xml des jeweiligen  Beispielprojekts nach erfolgtem Download erkennbar ist, werden auch hier die folgenden JEE 7 JBoss-Artefakte identifiziert, verwendet und importiert:

WildFly JBoss Java EE 7 Specification APIs with Tools:
– jboss-javaee-7.0-with-tools
WildFly JBoss Java EE 7 Specification APIs with Resteasy:
– jboss-javaee-7.0-with-resteasy
WildFly JBoss Java EE 7 Specification APIs with Hibernate:
– jboss-javaee-7.0-with-hibernate

Weiterhin werden die folgenden JEE Dependencies (für das Servlet API, Annotationen, JAX-RS Implementierungen, JBoss RESTEasy, Jackson, Hibernate, JPA und EJB) verwendet:

– jboss-annotations-api_1.1_spec
– jboss-jaxrs-api_2.0_spec
– resteasy-jackson2-provider

– hibernate-jpa-2.1-api
– jboss-ejb-api_3.2_spec
– hibernate-jpamodelgen
– jboss-servlet-api_3.1_spec

Und ebenfalls die CDI 1.1 Dependency:

– cdi-api_1.1

Dabei erfolgt die Aktivierung von CDI mittels beans.xml im WEB-INF Verzeichnis.

Deployment auf JBoss WildFly und Konfigurationen

Die Beispiel-Applikationen wurden auf den JBoss WildFlys 8.2, 9, 10 und 11 deployt und getestet und können gerne weiterverwendet und als Open Source weiterentwickelt werden. Da diese Applikationen zur Administration von Grußkarten-Applikationen dienen und es in diesem Blog-Eintrag bereits einen Eintrag über eine JEE 6- grusskarten-Applikation hier gibt (mit dem Deployment-Archiv grusskarten.war hier zum Download bereit) liegen mögliche Erweiterungen bzw. Anwendungsfälle bereits auf der Hand, z. B. die Anbindung der drei  Applikationen an dieselbe Datenbank und das Präsentieren von nur durch den Admin bestätigten Grußkarten-Motiven in der Applikation grusskarten, etc. Deshalb hier die Datasource für die adaptierte grusskarten-Applikation, die in der standalone/configuration/standalone.xml unter den <datasources> einzutragen ist:

<datasource jndi-name=“java:jboss/datasources/GreetingcardsadminDatasource“
                      pool-name=“GreetingcardsadminDS“ enabled=“true“>
        <connection-url>jdbc:mysql://localhost:3306/greetingcardsadmin</connection-url>
        <driver>mysql-connector-java-5.1.34.jar</driver>
        <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
        <pool>
                <min-pool-size>10</min-pool-size>
                <max-pool-size>100</max-pool-size>
                <prefill>true</prefill>
        </pool>
        <security>
                <user-name>root</user-name>
                <password>das entsprechende Passwort</password>
        </security>
        <statement>
                <prepared-statement-cache-size>32</prepared-statement-cache-size>
                <share-prepared-statements>true</share-prepared-statements>
        </statement>
</datasource>

Für die Weiterentwicklung, den Build und das Deployment des Projekts wurden Java 6,7 und 8 und Maven 2 u. 3 verwendet, als Server-Runtimes wurden Java 7,8 und 9 verwendet. Als  Entwicklungsumgebung wurden Eclipse in Form des “JBoss Developer Studios“ und intelliJ verwendet, weiterhin die FireFox WebDeveloper IDE/Tools. Als Datenbank wurde MySQL InnoDB 5.x eingesetzt, hier kann aber auch leicht PostgreSQL, Oracle oder auch  gerne eine andere relationale Open Source-Datenbank verwendet werden.

Die Konfiguration des JBoss WildFly Application Servers kann in diesem vorhandenen Blog-Eintrag hier und am Beispiel des WildFly 8.2 als PDF hier nachgelesen werden.

Eine fertig Version der Beispiel-Applikation greetingcardsadmin-primefaces kann hier heruntergeladen und aus dem /target-Verzeichnis ins Server-Verzeichnis  /standalone/deployments gespeichert werden. Genauso kann mit der Beispiel-Applikation greetingcardsadmin-angularjs hier verfahren werden. Durch Starten des WildFlys per  standalone.bat (Windows) oder standalone.sh (Linux) können der JBoss WildFly gestartet und die Beispiel-Applikationen deployt werden.

Die Test-Frameworks und die Tests

a) Arquillian Tests für das Service-Backend
wurden in dem vorigen Blog-Eintrag bereits erklärt.

b) QUnit-Tests für die REST-Service Endpoints
wurden in dem vorigen Blog-Eintrag bereits erklärt.

c) Selenium Tests für die Benutzerschnittstelle
wurden in dem vorigen Blog-Eintrag bereits erklärt. Die Selenium Tests können, wie beschrieben, per Selenium IDE PlugIn/Recorder erstellt und ausgeführt werden.

Hier noch eine weitere SPA (Single Page Appliction) Beispiel-Applikation, bei der das Testen des Backends mittels Arquillian und das integrative Testen des Frontends mittels Selenium (Workflow und UX Elemente) und QUnit  (Javascript-Framework zum Test-Aufruf der REST-Endpoints aus einer Browser-View) ebenfalls ausführlich beschrieben ist.

Die WildFly Server 

Das SQL-Skript zum Anlegen der Datenbank für alle drei greetingcardsadmin Beispiel-Applikationen findet sich hier.

Hier der WildFly 9 Final als Zip-Archiv zum Download und Entpacken: Für Linux hier und für Windows hier. Voraussetzung ist jeweils Java 7.

Hier der WildFly 10 Final als Zip-Archiv zum Download und Entpacken: Für Linux hier und für Windows hier. Voraussetzung ist Java 8.

Die fertig konfigurierte Version des WildFly 10.Final mit vielen Beispiel-Applikationen der vorigen Blog-Einträge hier zum Download bereit kann runtergeladen, entpackt und gestartet werden. Dabei ist nur der Pfad für JAVA_HOME in der standalone.xml anzupassen, wie in diesem Blog-Eintrag hier beschrieben wurde, damit dieser auf das tatsächliche JDK 8-Verzeichnis des Server-Systems zeigt und auch der Pfad für das log-Dateien Verzeichnis in der Datei [server]/standalone/configuration/logging.properties.

Hier auch der WildFly 11 Final als Zip-Archiv zum Download und Entpacken: Für Linux hier und für Windows hier. Minimale Voraussetzung ist jeweils Java 8, er kann aber auch mit Java 9 betrieben werden. Der fertig konfigurierte WildFly 11 mit vielen weiteren Beispiel-Applikationen ist hier zum Download verfügbar, kann runtergeladen, entpackt und gestartet werden.

Auch hier ist nur der Pfad des JAVA_HOME anzupassen, damit dieser auf das tatsächliche JDK 9 – Verzeichnis des Server-Systems zeigt und ebenfalls der Pfad für das log-Dateien Verzeichnis in der logging.properties.

Die Angular JS Beispiel-Applikation dieses Blog-Eintrags kann danach selbst erneut deployt werden, ohne den bereits gestarteten WildFly 11 Application Server überhaupt stoppen oder erneut starten zu müssen. Bei laufendem Server einfach das greetingcardsadmin-angularjs.war ins Server-Unterverzeichnis /standalone/deployments kopieren, dann startet der Deployment-Vorgang sofort.

Wie die interessierte Leserin/der interessierte Leser hier bereits feststellen konnte, macht es einfach viel Spaß, die mit Hilfe von JBoss Forge auf den JPA-Entities angelegten JEE7, JBoss, JSF 2.2 und  AngularJS  Applikationen zu erstellten und auszuprogrammieren, weshalb durchaus noch weitere Blog-Einträge zu diesen Themen folgen können. Allen interessierten Leserinnen und Lesern weiterhin viel Freude bei der agilen Softwareentwicklung mittels  Scrum und dem Test Driven Development mit Java, sowie noch einen goldenen Oktober.