Name Last Update
src Loading commit data...
.gitignore Loading commit data...
README.md Loading commit data...
pom.xml Loading commit data...

Ein Java-Beispielprojekt für die Lehrveranstaltungen "Software Engineering 2" (SE2) und "Softwarequalität und Test" (SwQT).

Anmerkung: Dieses Tutorial lebt! Es wird ständig verbessert, um Problemlösungen noch genauer zu beschreiben. Bitte melden Sie auftretende Probleme deshalb.

Projekt-Voraussetzungen

  • Versionsverwaltungswerkzeug "Git"
  • Installiertes "Java 8 JDK" (mit Dokumentation)
  • Build-System "maven" (unter Windows optional)
  • Ein relationales Datenbankverwaltungssystem mit JDBC-Anbindung ("MySQL" empfohlen, oder "MariaDB", "PostgreSQL", "Oracle Express" etc.)

Für die Weiterentwicklung am Projekt in der Veranstaltung SE2 (jedoch nicht für die Implementierung von JUnit-Tests in der Veranstaltung SwQT) sind ferner erforderlich:

  • Eine Java-Entwicklungsumgebung ("Eclipse", "JetBrains IntelliJ IDEA", "NetBeans" o.ä.)
  • JEE-Application Server "JBoss WildFly Version 8.2.1-final"
  • Ein REST-Client (empfohlen "Advanced Rest Client Application" für den Chrome Browser)

Git installieren

Auf dem Mac ist Git bereits vorhanden, sofern "Xcode" installiert ist.

Unter Linux installiert man Git folgendermaßen:

sudo apt-get update

sudo apt-get install git

Unter Windows muss der Git-Installer aus dem Internet heruntergeladen und installiert werden.

Maven installieren

Unter Linux wird Maven einfach folgendermaßen installiert:

sudo apt-get update

sudo apt-get install maven

Für den Mac wird Maven von der Herstellerseite "https://maven.apache.org/download.cgi" heruntergeladen und die Archivdatei in einem beliebigen Verzeichnis ausgepackt (konventionsgemäß in "/Library/Maven").

Dann wird die Datei ".profile" im Home-Verzeichnis des Benutzer erweitert (oder diese erstellt, falls noch nicht vorhanden):

export M2_HOME="/Library/Maven/apache-maven-3.5.0"
export MYSQL_HOME="/usr/local/mysql"
export PATH="$PATH:$M2_HOME/bin:$MYSQL_HOME/bin"

Hinweis: es wird bei dieser Gelegenheit auch gleich der MySQL-Pfad angepasst.

Natürlich müssen die Verzeichnispfade von Maven und MySQL angepasst werden, wie es den tatsächlichen Installationsorten entspricht.

Unter Windows muss der Maven-Installer aus dem Internet heruntergeladen und installiert werden.

Java-Projekt herunterladen

In einem beliebigen Verzeichnis ausführen:

git -c http.sslVerify=false clone https://git.ziemers.de/edu/swXercise.git

Es wird hierbei ein neues Verzeichnis namens "swXercise" erstellt, in dem sich nun das Projekt befindet. Beim Klonen werden etwaige Zertifikatsfehler ignoriert (dies tritt trotz korrekten Zertifikats gelegentlich unter Windows auf).

Projekt in die Entwicklungsumgebung integrieren

(Hinweis: Nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

Danach das entstandene Projektverzeichnis "swXercise" in der Entwicklungsumgebung als "existierendes Maven-Projekt" importieren, indem man die im Wurzelverzeichnis des Projekts vorhandene Datei "pom.xml" auswählt:

Unter "IntelliJ IDEA" das Menü "File -> New... -> Project from Existing Sources..." aufrufen und den Dialogen folgen (wie geschrieben: die "pom.xml" muss ausgewählt werden!).

Bei "Eclipse" das Menü "File -> Import... -> Maven -> Existing Maven Projects" aufrufen und den Dialogen folgen (Datei "pom.xml" auswählen!).

MySQL-Datenbanksystem installieren

Windows und Mac OS

Unter Windows und auf dem Mac einfach den entsprechenden MySQL-Installer von den Oracle-Webseiten herunterladen und installieren.

Unter Linux

sudo apt-get update

sudo apt-get install mysql-server

Danach (ohne Aktivierung des "Validating password plugin"s!):

sudo mysql_secure_installation

Während der Installation wird ein temporäres Root-Kennwort generiert. Das muss man sich gut merken.

MySQL konfigurieren

Unter Windows muss man ein beliebiges MySQL-Frontend installieren, beispielsweise "phpMyAdmin" o.ä. Damit müssen die beiden erforderlichen Datenbanken "swxercise" und "swxercise_test" erstellt werden.

Unter Linux und auf dem Mac kann stattdessen das MySQL-Frontend gestartet werden:

mysql -u root -p

Es wird zunächst nach dem temporären Kennwort gefragt. Dieses kann/muss geändert werden, beispielsweise in 'root':

ALTER USER 'root'@'localhost' IDENTIFIED BY ‘root‘;

Dann müssen die beiden projektspezifischen Datenbanken (für "Test" und "Produktion") erstellt und mit den nötigen Rechten versehen werden:

CREATE DATABASE swxercise_test;

GRANT ALL PRIVILEGES ON swxercise_test.* TO 'root'@'localhost' IDENTIFIED BY 'root';

(Hinweis: Das Folgende ist nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

CREATE DATABASE swxercise;

GRANT ALL PRIVILEGES ON swxercise.* TO 'root'@'localhost' IDENTIFIED BY 'root';

MySQL-Datenbank im Projekt konfigurieren

Heißt die Testdatenbank bei Ihnen anders als "swxercise_test", haben Sie andere Zugangsdaten gewählt als "root"/"root", befindet sich die Datenbank nicht auf Ihrem lokalen Rechner oder lauscht sie auf einem anderen Port als 3306, dann müssen in der Datei "pom.xml" (im Projekt-Hauptverzeichnis) die Properties entsprechend angepasst werden.

MySQL-Datenbank im WildFly einbinden

(Hinweis: Nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist betriebssystemspezifisch.

Unter Linux und auf dem Mac einfach das Tar- oder Zip-Archiv mit dem WildFly-Server von den JBoss-Webseiten herunterladen und in ein beliebiges Verzeichnis kopieren. Auf dem Mac wird hierzu standardmäßig "/Library/JBoss" verwendet. Darin die Archivdatei entpacken. Fertig.

Unter Windows dem WildFly-Installer von den JBoss-Webseiten herunterladen und installieren.

Datei "module.xml" im Verzeichnis "$JBOSS_HOME/modules/system/layers/base/com/mysql/driver/main" erstellen

(Hinweis: Nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

Vermutlich existiert im Verzeichnis "com" schon das Unterverzeichnis "mysql" nicht. Also muss dieses Verzeichnis (und die entsprechenden Unterverzeichnisse ebenfalls) erstellt werden.

Dann module.xml erstellen mit folgendem Inhalt:

<module xmlns="urn:jboss:module:1.3" name="com.mysql.driver">
  <resources>
    <resource-root path="mysql-connector-java-5.1.41-bin.jar" />
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

Und die jar-datei mit dem angegebenen MySQL-Treiber in dieses Verzeichnis hineinkopieren (im Beispiel in der Version "5.1.41-bin"). Er muss von den Oracle-Internetseiten heruntergeladen werden.

In der Datei "standalone.xml" im Verzeichnis "$JBOSS_HOME/standalone/configuration" folgenden Inhalt unterhalb der WildFly-Beispieldatenbank "com.h2database.h2" ergänzen:

(Hinweis: Nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

Aufgepasst: Der WildFly-Server darf während der Bearbeitung der XML-Datei nicht laufen, da er Ihre Änderungen ansonsten beim späteren Beenden wieder überschreiben würde!!!

<drivers>
  <!-- (hier befindet sich der bereits vorhandene Eintrag für den "H2"-Treiber; unserer kommt direkt darunter) -->

  <driver name="mysql" module="com.mysql.driver">
    <driver-class>com.mysql.jdbc.Driver</driver-class>
  </driver>
</drivers>

MySQL-Datasource im WildFly definieren

In der Datei "standalone.xml" im "Verzeichnis $JBOSS_HOME/standalone/configuration" folgenden Inhalt innerhalb der Datasources ergänzen:

(Hinweis: Nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

Aufgepasst: Der WildFly-Server darf während der Bearbeitung der XML-Datei nicht laufen, da er Ihre Änderungen ansonsten beim späteren Beenden wieder überschreiben würde!!!

<datasources>
  <!-- (hier befindet sich die bereits vorhandene "H2"-Datasource; unsere kommt direkt darunter) -->

  <datasource jndi-name="java:jboss/datasources/swXerciseDS" pool-name="swXerciseDS" enabled="true" use-java-context="true" jta="true">
    <connection-url>jdbc:mysql://localhost:3306/swxercise?useSSL=false</connection-url>
    <driver>mysql</driver>
    <!-- der Default-Eintrag "TRANSACTION_REPEATABLE_READ" kann zu Camunda-Deadlocks kommen (ThZ, 24.04.2017) -->
    <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>root</password>
    </security>
    <statement>
      <prepared-statement-cache-size>32</prepared-statement-cache-size>
      <share-prepared-statements>true</share-prepared-statements>
    </statement>
  </datasource>
</datasources>

Passen Sie die Angaben "connection-url" (Host, Port und Datenbankname), "user-name" und "password" entsprechend der Konfiguration Ihrer MySQL-Datenbank an.

JBoss WildFly in Eclipse einbinden

(Hinweis: Nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

JBoss Tools-Plugin installieren (nur für Eclipse)

  • Auswählen "Help -> Eclipse Marketplace..."
  • Find: "JBoss Tools"
  • die gefundenen "JBoss Tools" installieren (zum Zeitpunkt des Schreibens dieser Zeilen ist "JBoss Tools 4.4.3 Final" aktuell)
  • Auswählen "JBoss AS, Wildfly & EAP Server Tools" mit allen Unter-Plugins, die dranhängen

Quelle: https://tools.jboss.org/downloads/jbosstools/neon/4.4.3.Final.html

JBoss WildFly Server in Eclipse einbinden (nur für Eclipse)

  • Auswählen "File -> New -> Other..."
  • Auswählen "Server -> Server" (Next >)
  • WildFly 8.x
    • Server's host name: localhost
    • Server name: WildFly 8.x beliebig wählen (Next >)
  • "Create a new Server Adapter"
    • The server is: Local
    • Controlled by: Filesystem and shell Operations
    • Create new runtime (next page) (Next >)
  • "New Server"
    • Name WildFly 8.x Runtime
    • Home Directory /home//wildfly-8.2.1.Final/ (oder das Verzeichnis, das Sie gewählt haben)
    • Execution Environment: JavaSE-1.8
    • Server base directory: standalone
    • Configuration file: standalone.xml (Next >)
    • "Add and Remove", das gewünschte Maven-Artefakt "swXercise" auswählen (Finish)

JBoss WildFly in IntelliJ IDEA einbinden

(Hinweis: Nicht unbedingt für die Implementierung von JUnit-Tests in der Veranstaltung SwQT erforderlich)

JBoss WildFly-Server initial bekanntmachen (nur für IntelliJ IDEA)

  • IDE-Menü "Run -> Edit Configurations..."
    • "Defaults -> JBoss Server -> Local" und Reiter "Server"
    • "Configure..." und einen neuen JBoss Server mittels seines JBoss Home-Verzeichnisses angeben

Run Configuration erstellen (nur für IntelliJ IDEA)

  • Wiederum IDE-Menü "Run -> Edit Configurations..."
    • Plus-Symbol, um eine neue WildFly-Run Configuration zu definieren
    • "JBoss Server -> Local" auswählen
    • Reiter "Server" und den zuvor bekanntgemachten JBoss-Server wählen
    • Reiter "Deployment"
      • Selected artifacts will be deployed at server startup -> das gewünschte Maven-Artefakt "swXercise" auswählen, und zwar das mit "exploded" markierte; deployt als ausgepackte Ordnerstruktur und nicht als "WAR-Datei" (vorteilhaft beim Hot-Deployment)

Projekt verwenden

In der Entwicklungsumgebung:

Beim Deployen des Projekts auf den Application Server wird durch einen Data Bootstrapping-Mechanismus automatisch der Benutzer "admin" mit dem Kennwort "admin" erstellt und diesem die Rolle "Adminrolle" zugewiesen. Mit ihm kann man sich anmelden und erste Übungen vornehmen. Hierzu verwendet man den REST-Client "Advanced Rest Client Application" für den Chrome Browser.

Nach der Implementierung von JUnit-Tests auf der Kommandozeile, und zwar in demjenigen Verzeichnis des Projekts, in dem sich die Datei "pom.xml" befindet (das ist wichtig!):

mvn clean install

Das Projekt wird gebaut und die Tests werden ausgeführt. Möchte man die Tests gelegentlich mal nicht ausführen, macht man:

mvn clean install -DskipTests