WebApps – Responsiv mit Angular JS, REST, JEE7, Java 8 auf JBoss WildFly 9 und 10

Donnerstag, 30. Juni 2016 von  
unter Fachartikel Architektur

Die Motivation

Im Blog-Eintrag über WebApps – vom Modell zur App, mit JSF 2.2, Angular JS, REST, JPA 2 hier wurde beschrieben, wie leicht es ist, von einem Klassen-Diagramm (UML), genauer: Entity-Relationship-Diagramm hier, auch E-R Diagramm genannt, zu einer JEE7-Applikation zu kommen. Diese JEE6- und JEE7-Beispielapplikationen hier liefern mit Hilfe eines EJB 3-getriebenen Backends (Session Beans als DAOs, „DAO“-Pattern) unter Anbindung der JPA 2 Entities („Table-Per-Class“-Pattern) mit Hilfe von DTOs über fachliche RESTful ServiceInterfaces oder per Microservices mit Docker, Spring Boot, siehe auch „ServiceBroker“-Pattern hier, die benötigten Daten zur Präsentation und Bearbeitung (Änderung, Löschen, Neuanlage) in den Web-Frontends, welche die WebServices konsumieren („ServiceConsumer“-Pattern).

Die Beispiel-Applikation logisticsadmin-angularjs wird dann auf dem neusten JBoss WildFly 10 Final Server (entspricht dem neuen JBoss EAP 7-Server) deployt. Dabei ist die Verwendung der beiden neuen JBoss WildFly JEE7-Application Server in diesem Blog-Eintrag hier bereits beschrieben worden. Das Durchsuchen, und die Nutzung einer Pagination der Ergebnisliste ist ebenfalls in der Beispiel-App enthalten, wie auch mit Hilfe des Angular JS Frameworks und des Bootstrap-Frameworks eine dynamische Benutzeroberfläche, die sich, gemäß dem „Mobile-First“-Ansatz, an beliebige Auflösungen und Display-Größen responsiv anpasst.

jQuery oder Angular JS

Die oft hierüber geführte Diskussion ist inzwischen eigentlich obsolet geworden, da es meiner Erfahrung nach eher unproblematisch ist, beide JavaScript-Frameworks in derselben Browser-Applikation zu verwenden und solange man nicht versucht, beide Frameworks auf ein und demselben HTML-Element anzuwenden, kommen sich diese auch weder bei der Event-Triggerung noch beim Event-Handling in die Quere. Hier ist ein funktionierendes Beispiel dazu mit einem jQuery-Accordion und jQuery-Carousel auf der Startseite und zusätzlich einer verlinkten Angular JS Applikation zum Suchen von Events im Events Header-Menü.

Erstellung der Beispiel Applikation aus dem Datenmodell

Mittels Eclipse-PlugIn Umlet wird das Klassendiagramm der Entities und Datenbank-Objekte erstellt und aus diesem, nach dem Anlegen der Datenbank logisticsadmin per Hibernate Envers während dem WildFly 10 Undertow Deployment mittels JBoss Forge PlugIn im JBoss Developer Studio erst der REST-WebService mit den Endpoints generiert und danach die Angular JS WebApp auf diesem RESTful WebService.

Maven JEE 7 JBoss-Artefakte und Maven Dependencies

Dabei werden in der pom.xml die folgenden Maven Dependencies verwendet und es soll nicht vergessen werden, dass die heute in Java 8 enthaltenen javax.ws.rs REST-Packages ohne die bereits vor vielen Jahren erfolgte sehr gute Vorarbeit der Entwickler des jboss-resteasy REST-Frameworks wohl in der heutigen Form noch nicht im JDK vorhanden wären. Danke, JBoss Rockstars!

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

Und ebenfalls die CDI 1.1 Dependency:

– cdi-api_1.1

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

Auch über die Architektur und verwendeten Design Patterns der Beispiel-Applikationen gibt es bereits Informationen in einem Blog-Eintrag hier und bereits vorausgegangenen Blog-Einträgen.

Die Konfiguration des JBoss WildFly Application Servers 10 Final erfolgt analog der Konfigurationen der JBoss Application Server WildFly 8.1, 8.2 und 9 Final und betrifft die Datasource, die MySQL-Datenbank InnoDB 5.x, Hibernate 5, das Logging und den Connection Pool und ist, genau wie die Test-Frameworks und die Aktivierung der RESTful WebService-Schnittstelle in diesem Blog-Eintrag hier und vorigen Blog-Einträgen bereits beschrieben.

Bei dieser Gelegenheit darf auch das sehr effektive, interessante und erfolgreiche Seminar

“TDD mit Java”

hier und hier von Binaris Informatik erwähnt werden.

Hier auch die /META-INF/persistence.xml der Beispiel-Applikation:

    <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=“LogisticsadminPU“>
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>
    java:jboss/datasources/LogisticsadminDatasource
    </jta-data-source>
    <properties>
    <property name=“hibernate.hbm2ddl.auto“ value=“none“/>
    <property name=“hibernate.show_sql“ value=“false“/>
    </properties>
    </persistence-unit>
    </persistence>

Dafür wird die folgende Datasource benötigt und ist in der standalone/configuration/standalone.xml des JBoss WildFly Servers unter den <datasources> einzutragen:

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

Hier auch das mit HeidiSQL erstellte Datenbank-Skript (SQL Export) zum Anlegen der Datenbank logisticsadmin und dem initialen Befüllen mt Testdaten.

Die fertige Beispiel-Applikation logisticsadmin-angularjs kann zusammen mit den anderen Beispiel-Applikationen hier betrachtet werden.

Hier das Beispiel-Projekte für die Eclipse-Entwicklungsumgebung JBoss Developer Studio:

logisticsadmin-angularjs

Hier das Beispiel-Projekte für die Entwicklungsumgebung intelliJ 15:

logisticsadmin-angularjs

Hier der WildFly 10 Final als Zip-Archiv zum Download und Entpacken: Für Linux hier und für Windows hier. Voraussetzung ist jeweils 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, damit dieser auf das tatsächliche JDK 8-Verzeichnis des Server-Systems zeigt.

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 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 relationale Open Source-Datenbank verwendet werden.

Der WildFly 10 verwendet als Java Runtime Java 8 oder höher, weshalb jeder WildFly Application Server auf dem Linux-Server für die Beispiel-Applikationen seine eigene JVM bekommt, (WildFly 9 läuft auf Java 7, WildFly 10 auf Java 8). Hierfür wird im Startskript standalone.sh einfach das benötigte JAVA_HOME gesetzt. Auch bekommt jede WildFly Application Server-Instanz einen eigenen Port, auf dem die Beispiel-Applikationen entweder auf WildFly 9 oder WildFly 10 erreichbar sind.

Die Angular JS Beispiel-Applikation dieses Blog-Eintrags kann selbst erneut deployt werden, ohne den bereits gestarteten WildFly 10 Application Server überhaupt stoppen oder erneut starten zu müssen. Bei laufendem Server einfach ins Server-Unterverzeichnis /standalone/deployments

– eine leere Textdatei namens logisticsadmin-angularjs.war.dodeploy speichen und
– das Archiv logisticsadmin-angularjs.war aus dem logisticsadmin-angularjs/target-Verzeichnis speichern

Sofort wird die Beispiel-Applikation deployt und in wenigen Sekunden gestartet und kann aufgerufen werden:

http://localhost:8080/logisticsadmin-angularjs

Wie man sieht, macht es einfach Spaß, die responsiven Angular JS-Beispielapplikationen mittels JBoss Forge auf dem Datenmodell zu erzeugen und weiterzuentwickeln.

Es besteht also durchaus die Möglichkeit, dass noch weitere Blog-Einträge zu Webframeworks wie Angular JS und Bootstrap auf den die JEE7-Spezifikation implementierenden WebServices und Backends folgen.

Allen interessierten Leserinnen und Lesern weiterhin viel Freude bei der agilen Softwareentwicklung mittels Scrum und dem Test Driven Development mit Java, sowie schöne Sommerferien.

Kommentare

Ein Kommentar zu “WebApps – Responsiv mit Angular JS, REST, JEE7, Java 8 auf JBoss WildFly 9 und 10”

  1. Von WebApps – Primefaces 6, REST, JEE7, Angular JS auf JBoss WildFly 9 und 10 : Softwareentwicklung, Projektmanagement & Schulung | binaris informatik GmbH am Samstag, 23. Juli 2016 20:59

    […] über WebApps – Responsiv mit Angular JS, REST, JEE7, Java 8 auf JBoss WildFly 9 und 10 hier wurde beschrieben, wie aus einem mittels Eclipse-PlugIn Umlet erstellten […]