Services – mit Angular JS, REST, JPA 2, JEE7 auf JBoss WildFly 9

Sonntag, 22. November 2015 von  
unter Fachartikel Architektur

 Die Motivation

Das MVVM Framework ‘Angular JS‘ ermöglicht ebenfalls unter Einsatz des Router Design Patterns und des Front Controller Design Patterns das Erstellen von responsiven (Mobile) Applikationen zur Stammdatenpflege und Bestandsdatenpflege von über ein Service Interface verfügbaren Daten aus einem RESTful WebService. Die erstellte JEE7 Beispiel-Applikation ‘bookstore‘ arbeitet auf Basis der Template-Technologie und ermöglicht die leichte Pflege von und die Suche nach Produkten bestimmter Kategorien und Bestellungen von Kunden, etc. Die Beispiel-Applikation verwendet die JPA-Entities des Petstore-JEE Beispiels aus diesem Blog-Eintrag hier und erweitert diese, außerdem werden mittels JBoss Forge sowohl JSF 2.2 Benutzerschnittstellen verfügbar gemacht, als auch die Angular JS GUIs. An diesen einfachen, übersichtlichen JEE7 Beispielprojekten wird dadurch die Verwendung der eingesetzten Technologien gezeigt und diese als .war Archiv-Deployment auf dem JBoss WildFly 9 Application Server zum Test zur Verfügung gestellt. An dieser Stelle noch ein Hinweis in eigener Sache zum leichteren Durchsuchen und Finden der Binaris Fachartikel mittels responsivem educationorganizer.
Es besteht allerdings auch die Möglichkeit, eine simple Mobile Browser-App für den Apache WebServer hier mittels bekannter Build-Plattformen oder in einem PhoneGap-Projekt für die gewünschte Mobile Zielplattform zu erstellen, was jedoch in einem extra Blog-Eintrag besprochen werden soll.

TDD der Beispiel Applikation

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.

Die Technologien:

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

Für das JAX-RS Service-Backend kommt Java EE zum Einsatz (Stateful/Stateless EJB 3.2 und JEE 7) und im Backend Model JPA 2.1 Entities. Die Applikation wurde auf dem ‘JBoss WildFly 9‘ und dem ‘JBoss WildFly 8.2‘ Applikationsserver erfolgreich deployt und getestet und kann 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 und Eclipse Mars in Form des “JBoss Developer Studios 9.0.Final“ mit Java 8 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.

Hier die verwendeten pom.xml (mit den WildFly JEE 7 Dependencies):

Für das Projekt bookstore:
pom.xml (bookstore)

Und für das Projekt bookstore-angularjs:
pom.xml (bookstore-angularjs)

Wie in der pom.xml erkennbar ist, werden hier die folgenden JEE7 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

Ü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.

Die Architektur:

a) Das Service Backend:

Die Beispiel-Applikation verwendet die folgenden Entities:

– Address
– Country
– Category
– Customer
– Product
– Item
– OrderLine
– PurchaseOrder
– CreditCard
– CreditCardType

Die Relationen und Constraints (HibernateValidation bzw. javax.validation) zeigen sich auch in den entsprechenden JPA 2 Entities und deren Annotationen.

b) Der RESTful WebService mit den Service-Endpoints:
Aus diesen Entities lassen sich mit dem JBoss Developer Studio und dem JBoss Forge PlugIn über das Kontextmenü auf dem Maven-Projekt der RESTful WebService mit den Service-Endpoints generieren.

Die RESTful WebService-Endpoints verwenden wiederum die folgenden DTOs:

– AddressDTO
– CategoryDTO
– CountryDTO
– CreditCardDTO
– CustomerDTO
– ItemDTO
– NestedCategoryDTO
– NestedCountryDTO
– NestedCustomerDTO
– NestedItemDTO
– NestedOrderLineDTO
– NestedProductDTO
– NestedPurchaseOrderDTO
– OrderLineDTO
– ProductDTO
– PurchaseOrderDTO

Nun können aus dem Kontext-Menü auf dem Maven-Projekt mittels Forge/Scaffold Untermenüpunkt die gewünschten Views generiert werden. Die Architektur und die Assoziationen für die Auswahl des Angular JS MVVM Frameworks wurden bereits im Beispiel-Projekt ‘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 BackingBeans mit den entsprechenden CDI Annotationen (@Named anstatt @ManagedBean, etc.):

– CategoryBean
– CountryBean
– CustomerBean
– ItemBean
– LocaleBean
– OrderLineBean
– ProductBean
– PurchaseOrderBean
– ViewUtils (eine Utils-Klasse für die BackingBeans)

Die Konfiguration des JBoss WildFly Application Servers kann ebenfalls im Blog-Eintrag zum ‘educationorganizer‘ nachgelesen werden.

Diese Minimal-Konfiguration betrifft:
– die MySQL Datenbank/den Java MySQL-Datenbank-Treiber und die MySQL-Datasource der Beispiel-Applikation
– die Hibernate Version und ihre interessierenden Features/Dependencies
– das Start-Skript des Application Servers JBoss WildFly 9

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.

Wie Test-Suites, die mit dem Selenium IDE PlugIn durchgeführt wurden und automatisiert ausgeführt werden können, erstellt werden, wurde bereits in diesem Blog Eintrag hier beschrieben.

Hier nun das komplette Projekt bookstore.zip zum Download, in dessen /target-Unterverzeichnis sich das Archiv bookstore.war befindet.

Hier auch das komplette Projekt bookstore-angularjs.zip zum Download, in dessen target-Unterverzeichnis sich das Archiv bookstore-angularjs.war befindet.

Hier den WildFly 9 als Zip-Archiv zum Download und Entpacken:
http://download.jboss.org/wildfly/9.0.0.Final/wildfly-9.0.0.Final.zip

Installation/Start der Beispiel-Applikation:
– Die MySQL-Datenbank per import.sql-Skript hier anlegen.
– JAVA_HOME entsprechend setzen und noch die folgende datasource in der standalone/configuration/standalone.xml eintragen oder den vorkonfigurierten Server hier auspacken:

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

– bookstore.war ins Server-Unterverzeichnis /standalone/deployments speichern
– Neben bookstore.war eine leere Textdatei namens bookstore.war.dodeploy speichen.
– bookstore-angularjs.war ins Server-Unterverzeichnis /standalone/deployments speichern
– Neben bookstore-angularjs.war eine leere Textdatei namens bookstore-angularjs.war.dodeploy speichen.
– Server starten per standalone.bat oder standalone.sh
http://localhost:8080/bookstore/ bzw. http://localhost:8080/bookstore-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 eine schöne vorweihnachtliche Zeit.

Kommentare

2 Kommentare zu “Services – mit Angular JS, REST, JPA 2, JEE7 auf JBoss WildFly 9”

  1. 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

    […] das Deployment 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 […]

  2. Von WebApps – vom Modell zur App, mit JSF 2.2, Angular JS, REST, JPA 2, JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 29. Mai 2016 17:03

    […] das Deployment auf dem GlassFish 3 Application Server erklärt wurde. Die in diesem Blog-Eintrag hier mittels JBoss Forge Eclipse PlugIn erstellte Applikation greetingcardsadmin wurde bereits zur […]