Services – mit REST, JPA 2, EJB 3.2, JSF 2.2, Angular JS, Bootstrap, JBoss Forge

Mittwoch, 30. September 2015 von  
unter Fachartikel Architektur

 Die Beispiel-Applikation

Die JEE 7 Beispiel-Applikation ‘library‘ arbeitet mit JSF 2.2 auf Basis der Template-Technologie und ermöglicht die leichte Pflege von und die Suche nach Buchausleihen oder Ausleihen anderer Medien, z.B. PDFs, bestimmter Kategorien durch Kunden einer Stadtbücherei (Stammdatenpflege und Bestandsdatenpflege). Die Beispiel-Applikation verwendet im Backend JPA 2 – Entities und EJB 3.2.

Mittels JBoss Forge werden sowohl JSF 2.2 Benutzerschnittstellen verfügbar gemacht, als auch die Angular JS GUIs der zweiten JEE 7 Beispiel-Applikation ‘library-angularjs‘. Mit dieser zweiten, responsiven Applikation kann sich der Kunde der Stadtbücherei auch unterwegs im Browser auf seinem Smartphone die Bibliotheksausleihen ansehen und diese bearbeiten, oder nach interessanten Büchern stöbern.

Durch diese zwei simplen, übersichtlichen JEE7 Beispielprojekten wird die Verwendung und Effektivität der eingesetzten Technologien gezeigt und diese jeweils als .war Archiv-Deployment auf dem JBoss WildFly 8.2 Application Server zum Test zur Verfügung gestellt.

TDD der Beispiel Applikationen

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.

Dabei darf das folgende sehr effektive und interessante Seminar “TDD mit Java”

hier und hier von Binaris Informatik ebenfalls erwähnt werden.

Verwendete Technologien

a) Die Beispiel-Applikation ‘library-angularjs’:

Die Beispiel-Applikation ‘library-angularjs‘ verwendet im Frontend Angular.js und HTML5-/CSS3, als auch die JavaScript-Bibliotheken Bootstrap.js und etwas jQuery.

Das MVVM Framework ‘Angular JS‘ ermöglicht bekanntlich unter Einsatz des Router Design Patterns und des Front Controller Design Patterns das Erstellen von responsiven (Mobile) Applikationen zur Präsentation und Änderung von z. B. über ein Service Interface verfügbaren Daten aus einem RESTful WebService.

In AngularJS werden mit HTML-Code deklarativ die Oberflächen gestaltet. Ein weiterer Aspekt dabei ist, dass Anwendungslogik nur in den JavaScript-Dateien definiert wird. Diese sollte weitmöglichst unabhängig von der Benutzeroberfläche bzw. der Anwender-Schnittstelle (User interface) sein. Im Gegensatz zu anderen MVC-Frameworks erweitert AngularJS den HTML-Code, anstatt diesen komplett zu kapseln.

Um einen Bereich einer HTML-Seite von AngularJS verwalten zu lassen, muss dieser von einem Element mit dem Attribut ‘ng-app’ umschlossen sein. Nach dem Laden der Seite sucht AngularJS nach dem Atrribut ‘ng-app’ und analysiert den davon umschlossenen Bereich. ‘Controller’ werden in AngularJS mit dem Attribut ‘ng-controller’ definiert. Controller und View kommunizieren über den ‘Scope’, einen Container auf dessen Inhalt von beiden Seiten aus zugegriffen werden kann. Mit der ‘{{}}’ Notation kann mittels einem One-Way-Binding im HTML auf Elemente des ‘Scope’ zugegriffen werden. Die Daten können angezeigt, aber nicht zurückgeschrieben werden. Two-Way-Bindings ermöglichen auch das Schreiben in den ‘Scope’ und können entsprechend nur an HTML-Input-Elementen verwendet werden.

Eine Iteration über alle Elemente einer list kann in AngularJS mit der Anweisung ‘ng-repeat’ erfolgen, wie im Beispiel ‘library-angularjs‘ zu sehen ist. Innerhalb jedes ‘<li>‘ Elementes wird dann z. B. der Inhalt der Property ‘text’ jedes Listenelementes ausgegeben, welches in der Beispiel-Applikation für das jeweilige Edit-Template innerhalb des jeweilgen JavaScript edit*Controllers an die Erfordernisse angepasst werden kann und für das jeweilige Search-Template innerhalb der jeweiligen search.html.

b) Die Beispiel-Applikation ‘library‘:

Die Beispiel-Applikation ‘library‘ verwendet im Frontend JSF 2.2 und .xhtml-Templates mit HTML5-/CSS3. Hier können auch leicht Rich Faces oder Primefaces, also die jeweils gewünschte JSF-Implementierung anstatt dem MyFaces-Default zum Einsatz kommen. Zusätzlich wird die Forge TagLib verwendet (siehe /META-INF/forge.taglib.xml), welche eine modernere Version einer TagLib ist.

Über den klassischen Einsatz von Tags und TagLibs, z.B. im Zusammenhang mit dem Struts 1.3 Framework und mit Spring Roo, gibt es hier einen weiteren Blog-Eintrag in diesem Blog.

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 Artefakte und Dependencies

Wie die Applikationen ‘library‘ und ‘library-angularjs‘ mittels JBoss Forge erstellt werden, ist in diesem Blog-Eintrag hier bereits beschrieben worden, und wie in der pom.xml des jeweiligen Beispielprojekts nach erfolgtem Download erkennbar ist, werden auch hier die folgenden JEE 7 Artefakte für den JBoss WildFly 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 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

Einsatz von CDI

Über CDI und JavaEE gibt es bereits Blog-Einträge in diesem Blog hier und hier. Die Aktivierung von CDI erfolgt, wie beschrieben, mittels beans.xml im WEB-INF Verzeichnis.

Deployment auf JBoss WildFly und Konfigurationen

Die Beispiel-Applikationen wurden auf dem ‘JBoss WildFly 8.2‘ und dem ‘JBoss EAP 6.3‘ Applikationsserver erfolgreich deployt und getestet und können gerne weiterverwendet und als Open Source weiterentwickelt werden.

Für die Weiterentwicklung, den Build und das Deployment des Projekts ist mindestens Java 6 und Maven 3 erforderlich. Als Entwicklungsumgebung wurde Eclipse 4.4 (Luna) in Form des “JBoss Developer Studios 8.1.0“ mit Java 7 verwendet und die FireFox WebDeveloper IDE/Tools. Als Datenbank wurde MySQL InnoDB 5.x eingesetzt, hier kann aber auch leicht PostgreSQL, Oracle oder MS SQL verwendet werden.

Die Konfiguration des JBoss WildFly Application Servers kann ebenfalls in diesem Blog-Eintrag hier nachgelesen werden.

Diese Minimal-Konfiguration betrifft:

– die MySQL Datenbank/den Java MySQL-Datenbank-Treiber und die MySQL-Datasource der ‘library‘ Beispiel-Applikation
– die Hibernate Version und ihre interessierenden Features/Dependencies
– das Start-Skript des Application Servers WildFly 8.2

Eine fertig Version der Beispiel-Applikation ‘library‘ kann hier heruntergeladen und das library.war-Archiv aus dem /target Unterverzeichnis ins Verzeichnis /standalone/deployments gespeichert werden. Genauso kann mit der Beispiel-Applikation ‘library-angularjs‘ verfahren werden. Durch Starten von standalone.bat (Windows) oder standalone.sh (Linux) kann der JBoss WildFly gestartet werden. Anschließend ist die Beispiel-Applikation aufrufbar unter der folgenden Url:

http://localhost:8080/library

Und die Beispiel-Applikation ‘library-angularjs‘ ist danach aufrufbar unter der Url:

http://localhost:8080/library-angularjs

Die Test-Frameworks und die Tests

a) Arquillian Tests für das Service-Backend

wurden in diesem Blog-Eintrag hier bereits erklärt.

b) QUnit-Tests für die REST-Services

wurden in diesem Blog-Eintrag hier bereits erklärt.

Bei dieser Gelegenheit darf auch auf das sehr effektive und interessante Seminar “TDD mit Java”

hier und hier von Binaris Informatik hingewiesen werden.

Hier nun auch das Beispiel-Projekt library.zip zum Download und hier ebenfalls das Beispiel-Projekt library-angularjs.zip, in welchem mittels JBoss Forge PlugIn die ausgewählten JSF 2.2 oder Angular JS Views und der RESTful WebService generiert wurden.

Hier die library.sql zum Anlegen der MySQL-Datenbank zum Download:
http://www.4shared.com/document/T0-NzTe_ba/library.html

Hier der WildFly 8.2 als Zip-Archiv zum Download und Entpacken:
http://download.jboss.org/wildfly/8.2.0.Final/wildfly-8.2.0.Final.zip

Installation/Start der Beispiel-Applikation:

– Die MySQL-Datenbank per library.sql-Skript anlegen.
– JAVA_HOME, JBOSS_HOME entsprechend setzen und
in der standalone.bat oder standalone.sh verwenden. Dann noch die folgende Datasource (dieselbe für beide Beispiel-Projekte) in der standalone/configuration/standalone.xml einmal eintragen

<datasource jndi-name=“java:jboss/datasources/LibraryDatasource“ pool-name=“LibraryDS“
       enabled=“true“>
       <connection-url>jdbc:mysql://localhost:3306/library</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>

library.war ins Server-Unterverzeichnis /standalone/deployments speichern
– Neben ‘library.war‘ eine leere Textdatei namens library.war.dodeploy speichen.
library-angularjs.war ins Server-Unterverzeichnis /standalone/deployments speichern
– Neben ‘library-angulajs.war‘ eine leere Textdatei namens library-angularjs.war.dodeploy speichen.
– Server starten per standalone.bat oder standalone.sh,
http://localhost:8080/library/ bzw. http://localhost:8080/library-angularjs/ aufrufen
– Die Selenium Tests per Selenium IDE PlugIn/Recorder erstellen und ausführen.

Allen interessierten Leserinnen und Lesern weiterhin viel Freude bei der agilen Softwareentwicklung mittels Scrum und dem Test Driven Development mit Java, sowie schöne Herbstferien, ‚Happy Halloween‘ und noch einen erholsamen Urlaub.

Kommentare

4 Kommentare zu “Services – mit REST, JPA 2, EJB 3.2, JSF 2.2, Angular JS, Bootstrap, JBoss Forge”

  1. Von Services – mit REST, JPA 2, EJB 3.2, WebFrameworks, JBoss WildFly 9 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Samstag, 31. Oktober 2015 21:42

    […] 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. Weitere Erklärungen zu AngularJS finden sich in diesem Blog-Eintrag hier. […]

  2. Von Services – mit Angular JS, REST, JPA 2, JEE7 auf JBoss WildFly 9 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 22. November 2015 19:38

    […] ‘educationorganizer‘ erläutert und ebenfalls im Blog-Eintrag zum Beispiel-Projekt ‘library‘ und können dort nachgelesen werden. Für JSF 2.2 Views (Auswahl JSF) erhält man die folgenden […]

  3. Von WebApps – mit REST, JPA 2, EJB 3.2, Angular JS, JSF 2.2 auf JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 31. Januar 2016 12:00

    […] Weitere Erklärungen zu AngularJS finden sich in diesem Blog-Eintrag hier. […]

  4. Von WebApps – Migration JSF 2.2 MyFaces, RichFaces zu Primefaces, REST, JPA 2, JEE7 auf JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 27. März 2016 22:57

    […] auf dem GlassFish 3 Application Server erklärt wurde. Die in diesen Blog-Einträgen hier und hier mittels JBoss Forge Eclipse PlugIn erstellten Applikation bookstore und library werden zu den […]