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

Samstag, 31. Oktober 2015 von  
unter Fachartikel Architektur

Die Beispiel-Applikationen

Die JEE 7 Beispiel-Applikation greetingcardsadmin 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 werden das JSF 2.2 User Interface erzeugt  und auch die Angular JS GUI der zweiten 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/-Bestandsdaten bearbeiten oder durchsuchen.

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

TDD der greetingcardsadmin 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 greetingcardsadmin-angularjs:

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

Das MVVM Framework Angular JS ermöglicht unter Einsatz des Router Design Patterns und des Front Controller Design Patterns 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. Weitere Erklärungen zu AngularJS finden sich in diesem Blog-Eintrag hier.

b) Die Beispiel-Applikation greetingcardsadmin:

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 und greetingcardsadmin-angularjs mittels JBoss Forge erstellt werden, ist bereits 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 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

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 9.0.0 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 hier bereits einen Eintrag über eine JEE 6- grusskarten-Applikation (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 bestätigten Grußkarten-Motiven in der Applikation grusskarten, etc. Deshalb hier die datasource für die adaptierte grusskarten-Applikation:

<datasource jndi-name=“java:jboss/datasources/GrusskartenDatasource“ pool-name=“GrusskartenDS“
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 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 ebenfalls Eclipse 4.5 (Mars) in Form des “JBoss Developer Studios 9.GA“ mit Java 8, was auch sehr gut funktioniert und hier zum Download vorhanden ist. 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 Open Source-Datenbank verwendet werden.

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

Diese Minimal-Konfiguration betrifft:

– die MySQL Datenbank/den Java MySQL-Datenbank-Treiber und die MySQL-Datasource der greetingcardsadmin Beispiel-Applikation
– die Hibernate Version und ihre interessierenden Features/Dependencies
– das Start-Skript des Application Servers WildFly 9.0.0.Final

Eine fertige Version der Beispiel-Applikation greetingcardsadmin kann hier heruntergeladen und das .war-Archiv aus dem target-Unterverzeichnis ins Verzeichnis /standalone/deployments gespeichert werden. Genauso kann mit der Beispiel-Applikation greetingcardsadmin-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/greetingcardsadmin

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

http://localhost:8080/greetingcardsadmin-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 greetingcardsadmin.zip zum Download und hier ebenfalls das Beispiel-Projekt greetingcardsadmin-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 greetingcardsadmin.sql zum Anlegen der MySQL-Datenbank für alle drei Beispiel-Applikationen zum Download:

Hier der WildFly 9.0.0 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 greetingcardsadmin.sql-Skript anlegen.
– JAVA_HOME, JBOSS_HOME entsprechend setzen und
in der standalone.bat oder standalone.sh verwenden oder den vorkonfigurierten Server hier auspacken.
Im Deployment-Paket grusskarten.war ist dieselbe Datasource wie im greetingcardsadmin.war hier in der /META-INF/persistence.xml eingetragen:

<xml version=“1.0″ encoding=“UTF-8″?>
<persistence version=“2.0″ xmlns=“http://java.sun.com/xml/ns/persistence“
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“
xsi:schemaLocation=“http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd“>
<persistence-unit name=“grusskarten“>
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>
java:jboss/datasources/GreetingcardsadminDatasource
</jta-data-source>
<properties>
<property name=“hibernate.hbm2ddl.auto“ value=“none“/>
<property name=“hibernate.show_sql“ value=“false“/>
</properties>
</persistence-unit>
</persistence>

greetingcardsadmin.war ins Server-Unterverzeichnis /standalone/deployments speichern

– Neben greetingcardsadmin.war eine leere Textdatei namens greetingcardsadmin.war.dodeploy speichen.

greetingcardsadmin-angularjs.war ins Server-Unterverzeichnis /standalone/deployments speichern

– Neben greetingcardsadmin-angularjs.war eine leere Textdatei namens

greetingcardsadmin-angularjs.war.dodeploy speichen.

Oder den vorkonfigurierten WildFly 9.0.0.Final Server hier runterladen und in ein beliebiges Verzeichns auspacken.

– Server starten per standalone.bat oder standalone.sh,

http://localhost:8080/greetingcardsadmin bzw. http://localhost:8080/greetingcardsadmin-angularjs

aufrufen

– Die Selenium Tests per Selenium IDE PlugIn/Recorder erstellen und ausführen.

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 ein schönes Thanksgiving.

Kommentare

2 Kommentare zu “Services – mit REST, JPA 2, EJB 3.2, WebFrameworks, JBoss WildFly 9”

  1. Von WebApps – Migration mit JSF 2.2 Primefaces, REST, JPA 2, JEE7 auf JBoss WildFly 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Sonntag, 1. Mai 2016 12:33

    […] 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 wird zur […]

  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 Samstag, 4. Juni 2016 16:19

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