Commit 1cb5cf7d76380dd874c096f818e3fb1bdebac1c2

Authored by Thomas Ziemer
1 parent 6a4fd2b7

bugfix: Erkenntnisse aus der gestrigen SE2-Übung

README.md
1 # Ein Java-Beispielprojekt für die Lehrveranstaltungen "Software Engineering 2" (SE2) und "Softwarequalität und Test" (SwQT). 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 ## Projekt-Voraussetzungen 5 ## Projekt-Voraussetzungen
4 6
5 - Versionsverwaltungswerkzeug "Git" 7 - Versionsverwaltungswerkzeug "Git"
6 -- Installiertes Java 8 JDK (mit Dokumentation) 8 +- Installiertes "Java 8 JDK" (mit Dokumentation)
7 - Eine Java-Entwicklungsumgebung ("Eclipse", "JetBrains IntelliJ IDEA", "NetBeans" o.ä.) 9 - Eine Java-Entwicklungsumgebung ("Eclipse", "JetBrains IntelliJ IDEA", "NetBeans" o.ä.)
8 - JEE-Application Server "JBoss WildFly Version 8.2.1-final" 10 - JEE-Application Server "JBoss WildFly Version 8.2.1-final"
9 -- Build-System "maven" (optional) 11 +- Build-System "maven" (unter Windows optional)
10 - Ein relationales Datenbankverwaltungssystem mit JDBC-Anbindung ("MySQL" empfohlen, oder "MariaDB", "PostgreSQL", "Oracle Express" etc.) 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 ## Java-Projekt herunterladen 27 ## Java-Projekt herunterladen
14 28
@@ -16,35 +30,69 @@ In einem beliebigen Verzeichnis ausführen: @@ -16,35 +30,69 @@ In einem beliebigen Verzeichnis ausführen:
16 30
17 > git clone https://git.ziemers.de/edu/swXercise.git 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 ## MySQL konfigurieren 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 > mysql -u root -p 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 > ALTER USER 'root'@'localhost' IDENTIFIED BY ‘root‘; 71 > ALTER USER 'root'@'localhost' IDENTIFIED BY ‘root‘;
32 72
33 Dann müssen die beiden projektspezifischen Datenbanken (für Test und "Produktion") erstellt und mit den nötigen Rechten versehen werden: 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 ## MySQL-Datenbank im WildFly einbinden 83 ## MySQL-Datenbank im WildFly einbinden
44 84
45 Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist betriebssystemspezifisch. 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 <module xmlns="urn:jboss:module:1.3" name="com.mysql.driver"> 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,15 +106,16 @@ Zunächst muss der JBoss WildFly Application Server installiert werden. Dies ist
58 </module> 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 <drivers> 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 <driver name="mysql" module="com.mysql.driver"> 119 <driver name="mysql" module="com.mysql.driver">
71 <driver-class>com.mysql.jdbc.Driver</driver-class> 120 <driver-class>com.mysql.jdbc.Driver</driver-class>
72 </driver> 121 </driver>
@@ -75,30 +124,34 @@ Aufgepasst bei der Version des MySQL-Konnektors in der module.xml! @@ -75,30 +124,34 @@ Aufgepasst bei der Version des MySQL-Konnektors in der module.xml!
75 124
76 ## MySQL-Datasource im WildFly definieren 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 ## JBoss WildFly in Eclipse einbinden 157 ## JBoss WildFly in Eclipse einbinden
src/test/resources/net/ziemers/swxercise/testdata/UserServiceTestData.xml
1 <?xml version="1.0" encoding="UTF-8"?> 1 <?xml version="1.0" encoding="UTF-8"?>
2 <dataset> 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 </dataset> 6 </dataset>