Commit 1cb5cf7d76380dd874c096f818e3fb1bdebac1c2

Authored by Thomas Ziemer
1 parent 6a4fd2b7

bugfix: Erkenntnisse aus der gestrigen SE2-Übung

README.md
1 1 # Ein Java-Beispielprojekt für die Lehrveranstaltungen "Software Engineering 2" (SE2) und "Softwarequalität und Test" (SwQT).
2 2  
  3 +Anmerkung: Dieses Tutorial lebt! Es wird ständig verbessert, um Problemlösungen noch genauer zu beschreiben. Bitte melden Sie auftretende Probleme deshalb.
  4 +
3 5 ## Projekt-Voraussetzungen
4 6  
5 7 - Versionsverwaltungswerkzeug "Git"
6   -- Installiertes Java 8 JDK (mit Dokumentation)
  8 +- Installiertes "Java 8 JDK" (mit Dokumentation)
7 9 - Eine Java-Entwicklungsumgebung ("Eclipse", "JetBrains IntelliJ IDEA", "NetBeans" o.ä.)
8 10 - JEE-Application Server "JBoss WildFly Version 8.2.1-final"
9   -- Build-System "maven" (optional)
  11 +- Build-System "maven" (unter Windows optional)
10 12 - Ein relationales Datenbankverwaltungssystem mit JDBC-Anbindung ("MySQL" empfohlen, oder "MariaDB", "PostgreSQL", "Oracle Express" etc.)
11   -- Ein REST-Client (empfohlen "Advanced Rest Client Application" für Chrome)
  13 +- Ein REST-Client (empfohlen "Advanced Rest Client Application" für den Chrome Browser)
  14 +
  15 +## Git installieren
  16 +
  17 +Auf dem Mac ist Git bereits vorhanden, sofern Xcode installiert ist.
  18 +
  19 +Unter Linux installiert man Git folgendermaßen:
  20 +
  21 +> sudo apt-get update
  22 +
  23 +> sudo apt-get install git
  24 +
  25 +Unter Windows muss der Git-Installer aus dem Internet heruntergeladen und installiert werden.
12 26  
13 27 ## Java-Projekt herunterladen
14 28  
... ... @@ -16,35 +30,69 @@ In einem beliebigen Verzeichnis ausführen:
16 30  
17 31 > git clone https://git.ziemers.de/edu/swXercise.git
18 32  
19   -Danach das entstandene Projektverzeichnis swXercise in der Entwicklungsumgebung als existierendes Maven-Projekt importieren.
  33 +Es wird hierbei ein neues Verzeichnis namens "swXercise" erstellt, in dem sich nun das Projekt befindet.
  34 +
  35 +## Projekt in die Entwicklungsumgebung integrieren
  36 +
  37 +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:
  38 +
  39 +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!).
  40 +
  41 +Bei "Eclipse" das Menü "File -> Import... -> Maven -> Existing Maven Projects" aufrufen und den Dialogen folgen (Datei "pom.xml" auswählen!).
  42 +
  43 +## MySQL-Datenbanksystem installieren
  44 +
  45 +### Windows und Mac OS
  46 +
  47 +Unter Windows und auf dem Mac einfach den entsprechenden MySQL-Installer von den Oracle-Webseiten herunterladen und installieren.
  48 +
  49 +### Unter Linux
  50 +
  51 +> sudo apt-get update
  52 +
  53 +> sudo apt-get install mysql-server
  54 +
  55 +Danach (ohne Aktivierung des "Validating password plugin"s!):
  56 +
  57 +> sudo mysql_secure_installation
  58 +
  59 +Während der Installation wird ein temporäres Root-Kennwort generiert. Das muss man sich gut merken.
20 60  
21 61 ## MySQL konfigurieren
22 62  
23   -Zunächst muss das MySQL-Datenbanksystem installiert werden. Dies ist betriebssystemspezifisch. Während der Installation wird ein temporäres Root-Kennwort generiert.
  63 +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.
24 64  
25   -Dann kann das MySQL-Frontend gestartet werden (es wird zunächst nach dem temporären Kennwort gefragt):
  65 +Unter Linux und auf dem Mac kann stattdessen das MySQL-Frontend gestartet werden:
26 66  
27 67 > mysql -u root -p
28 68  
29   -Dann kann/muss das Kennwort geändert werden, beispielsweise in 'root':
  69 +Es wird zunächst nach dem temporären Kennwort gefragt. Dieses kann/muss geändert werden, beispielsweise in 'root':
30 70  
31 71 > ALTER USER 'root'@'localhost' IDENTIFIED BY ‘root‘;
32 72  
33 73 Dann müssen die beiden projektspezifischen Datenbanken (für Test und "Produktion") erstellt und mit den nötigen Rechten versehen werden:
34 74  
35   -> create database swxercise;
  75 +> CREATE DATABASE swxercise;
36 76  
37   -> create database swxercise_test;
  77 +> CREATE DATABASE swxercise_test;
38 78  
39   -> grant all privileges on swxercise.* to 'root'@'localhost' identified by 'root';
  79 +> GRANT ALL PRIVILEGES ON swxercise.* TO 'root'@'localhost' IDENTIFIED BY 'root';
40 80  
41   -> grant all privileges on swxercise_test.* to 'root'@'localhost' identified by 'root';
  81 +> GRANT ALL PRIVILEGES ON on swxercise_test.* TO 'root'@'localhost' IDENTIFIED BY 'root';
42 82  
43 83 ## MySQL-Datenbank im WildFly einbinden
44 84  
45 85 Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist betriebssystemspezifisch.
46 86  
47   -### Datei module.xml im Verzeichnis $JBOSS_HOME/modules/system/layers/base/com/mysql/driver/main erstellen mit folgendem Inhalt:
  87 +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.
  88 +
  89 +Unter Windows dem WildFly-Installer von den JBoss-Webseiten herunterladen und installieren.
  90 +
  91 +### Datei "module.xml" im Verzeichnis "$JBOSS_HOME/modules/system/layers/base/com/mysql/driver/main" erstellen
  92 +
  93 +Vermutlich existiert im Verzeichnis "com" schon das Unterverzeichnis "mysql" nicht. Also muss dieses Verzeichnis (und die entsprechenden Unterverzeichnisse ebenfalls) erstellt werden.
  94 +
  95 +Dann **module.xml** erstellen mit folgendem Inhalt:
48 96  
49 97 ```
50 98 <module xmlns="urn:jboss:module:1.3" name="com.mysql.driver">
... ... @@ -58,15 +106,16 @@ Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist
58 106 </module>
59 107 ```
60 108  
61   -Und natürlich die jar-datei mit dem angegebenen MySQL-Treiber in dieses Verzeichnis hineinkopieren. Er muss von den Oracle-Internetseiten heruntergeladen werden.
  109 +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.
62 110  
63   -Aufgepasst bei der Version des MySQL-Konnektors in der module.xml!
  111 +### In der Datei "standalone.xml" im Verzeichnis "$JBOSS_HOME/standalone/configuration" folgenden Inhalt unterhalb der WildFly-Beispieldatenbank "com.h2database.h2" ergänzen:
64 112  
65   -### In der standalone.xml im Verzeichnis $JBOSS_HOME/standalone/configuration folgenden Inhalt unterhalb der WildFly-Beispieldatenbank com.h2database.h2 ergänzen:
  113 +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!!!
66 114  
67 115 ```
68 116 <drivers>
69   - ... (hier befindet sich der H2-Treiber; unserer kommt darunter)
  117 + <!-- (hier befindet sich der bereits vorhandene Eintrag für den "H2"-Treiber; unserer kommt direkt darunter) -->
  118 +
70 119 <driver name="mysql" module="com.mysql.driver">
71 120 <driver-class>com.mysql.jdbc.Driver</driver-class>
72 121 </driver>
... ... @@ -75,30 +124,34 @@ Aufgepasst bei der Version des MySQL-Konnektors in der module.xml!
75 124  
76 125 ## MySQL-Datasource im WildFly definieren
77 126  
78   -### In der standalone.xml im Verzeichnis $JBOSS_HOME/standalone/configuration folgenden Inhalt innerhalb der Datasources ergänzen:
  127 +### In der Datei "standalone.xml" im "Verzeichnis $JBOSS_HOME/standalone/configuration" folgenden Inhalt innerhalb der Datasources ergänzen:
  128 +
  129 +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!!!
79 130  
80 131 ```
81   -... (hier befindet sich die H2-Datasource; unsere kommt darunter)
82   -</datasource>
83   -<datasource jndi-name="java:jboss/datasources/swXerciseDS" pool-name="swXerciseDS" enabled="true" use-java-context="true" jta="true">
84   - <connection-url>jdbc:mysql://localhost:3306/swxercise?useSSL=false</connection-url>
85   - <driver>mysql</driver>
86   - <!-- der Default-Eintrag "TRANSACTION_REPEATABLE_READ" kann zu Camunda-Deadlocks kommen (ThZ, 24.04.2017) -->
87   - <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
88   - <pool>
89   - <min-pool-size>10</min-pool-size>
90   - <max-pool-size>100</max-pool-size>
91   - <prefill>true</prefill>
92   - </pool>
93   - <security>
94   - <user-name>root</user-name>
95   - <password>root</password>
96   - </security>
97   - <statement>
98   - <prepared-statement-cache-size>32</prepared-statement-cache-size>
99   - <share-prepared-statements>true</share-prepared-statements>
100   - </statement>
101   -</datasource>
  132 +<datasources>
  133 + <!-- (hier befindet sich die bereits vorhandene "H2"-Datasource; unsere kommt direkt darunter) -->
  134 +
  135 + <datasource jndi-name="java:jboss/datasources/swXerciseDS" pool-name="swXerciseDS" enabled="true" use-java-context="true" jta="true">
  136 + <connection-url>jdbc:mysql://localhost:3306/swxercise?useSSL=false</connection-url>
  137 + <driver>mysql</driver>
  138 + <!-- der Default-Eintrag "TRANSACTION_REPEATABLE_READ" kann zu Camunda-Deadlocks kommen (ThZ, 24.04.2017) -->
  139 + <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation>
  140 + <pool>
  141 + <min-pool-size>10</min-pool-size>
  142 + <max-pool-size>100</max-pool-size>
  143 + <prefill>true</prefill>
  144 + </pool>
  145 + <security>
  146 + <user-name>root</user-name>
  147 + <password>root</password>
  148 + </security>
  149 + <statement>
  150 + <prepared-statement-cache-size>32</prepared-statement-cache-size>
  151 + <share-prepared-statements>true</share-prepared-statements>
  152 + </statement>
  153 + </datasource>
  154 +</datasources>
102 155 ```
103 156  
104 157 ## JBoss WildFly in Eclipse einbinden
... ...
src/test/resources/net/ziemers/swxercise/testdata/UserServiceTestData.xml
1 1 <?xml version="1.0" encoding="UTF-8"?>
2 2 <dataset>
3   - <profile id="1" username="username_profile" passwordHash="passwordHash_profile" hashAlgorithm="hashAlgorithm_profile" salt="salt_profile"/>
4   - <user id="2" firstname="firstname_user" lastname="lastname_user" profile_id="1"/>
  3 + <!-- die Grosz-/Kleinschreibung scheint unter bestimmten Bedingungen von Bedeutung zu sein! -->
  4 + <Profile id="1" username="username_profile" passwordHash="passwordHash_profile" hashAlgorithm="hashAlgorithm_profile" salt="salt_profile"/>
  5 + <User id="2" firstname="firstname_user" lastname="lastname_user" profile_id="1"/>
5 6 </dataset>
... ...