Changes for page Basisprojekt
Last modified by mgrawunder on 2025/09/09 08:42
From 24.2 to 25.1
From 38.3 to 38.4
From version 25.1
edited by Marco Grawunder
on 2025/08/15 11:01
on 2025/08/15 11:01
Change comment:
Uploaded new attachment "1755248508652-523.png", version {1}
To version 38.3
edited by mgrawunder
on 2025/09/03 10:45
on 2025/09/03 10:45
Change comment:
There is no comment for this version
Summary
-
Page properties (2 modified, 0 added, 0 removed)
-
Attachments (0 modified, 19 added, 0 removed)
- 1755248752596-839.png
- 1755249096987-249.png
- 1755249136156-419.png
- 1755249228556-469.png
- 1755249285866-367.png
- 1755250026156-269.png
- 1755250050031-304.png
- 1755250061990-172.png
- 1755250157536-746.png
- 1756886220468-891.png
- 1756887005209-855.png
- 1756887037619-847.png
- 1756887436525-790.png
- 1756887488020-376.png
- 1756888245896-845.png
- 1756888279902-777.png
- 1756888428042-802.png
- 1756888762381-912.png
- 1756888929507-312.png
Details
- Page properties
-
- Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. MarcoGrawunder1 +XWiki.mgrawunder - Content
-
... ... @@ -1,10 +1,10 @@ 1 1 [[image:Main.Organisatorisches.WebHome@softwareprojekt_logo_transparent.png||alt="SoftwareprojektLogo.png" data-xwiki-image-style-alignment="end" height="136" width="309"]] 2 2 3 +Hier folgen Erklärungen des neuen Basisprojekts. Es wird um die folgenden Themen gehen: 4 + 3 3 {{toc/}} 4 4 5 -Hier folgen Erklärungen des neuen Basisprojekts. 6 6 7 - 8 8 = Basisprojekt mit IntelliJ einrichten = 9 9 10 10 [[image:1755245956916-184.png]] ... ... @@ -32,14 +32,18 @@ 32 32 33 33 **Lombok Plugin installiert? Wenn nein jetzt machen** 34 34 35 +[[image:1755248508652-523.png]] 35 35 36 -** TODO:Zeigen**37 +**Hinweis: Wenn man schon hier ist, kann man auch das Spring-(Boot)-Plugin **installieren 37 37 39 +[[image:1756886220468-891.png]] 38 38 41 +== Server laufen lassen == 42 + 39 39 [[image:1755246035428-328.png]] 40 40 41 41 42 -... und aktivieren (Man wird nach dem Start der Anwendung gefragt) 46 +... und ggf. Lombok aktivieren (Man wird nach dem Start der Anwendung gefragt) 43 43 44 44 [[image:1755246072443-191.png]] 45 45 ... ... @@ -47,7 +47,7 @@ 47 47 [[image:1755246118807-452.png]] 48 48 49 49 50 -Logging umstellen :54 +== Logging umstellen == 51 51 52 52 [[image:1755246135109-325.png]] 53 53 ... ... @@ -57,14 +57,22 @@ 57 57 58 58 [[image:1755246162330-595.png]] 59 59 64 +== Development Profil aktivieren == 60 60 66 +damit dann user1 - user9 angelegt werden und man nicht jedesmal neu registrieren muss 67 + 61 61 [[image:1755246173415-934.png]] 62 62 63 63 64 -**Wenn man IntelliJ nicht in der Pro-Version verwendet, muss kann man ein Spring-Profil über eine Umgebungsvariable in der Konfiguration des Servers setzen: ** 71 +**Wenn man IntelliJ nicht in der Pro-Version verwendet bzw. das Spring Boot Plugin nicht installiert hat, muss kann man ein Spring-Profil über eine Umgebungsvariable in der Konfiguration des Servers setzen: ** 65 65 66 66 **SPRING_PROFILES_ACTIVE=dev** 67 67 75 +[[image:1755248752596-839.png]] 76 + 77 + 78 +== Client starten == 79 + 68 68 [[image:1755246257400-525.png]] 69 69 70 70 ... ... @@ -74,9 +74,163 @@ 74 74 [[image:1755246223246-834.png]] 75 75 76 76 89 +=== Mehrere Instanzen des Clients ermöglichen === 90 + 77 77 [[image:1755246233218-893.png]] 78 78 79 79 94 +Wenn folgendes kommt, ist entweder das "dev" Profil nicht aktiviert, der Nutzer wurde nicht angelegt. Wenn der Server nicht läuft, gibt es eine andere Fehlermeldung. 95 + 80 80 [[image:1755246292057-581.png]] 81 81 82 -[[image:1755246318433-327.png]] 98 + 99 += Kurzer Blick ins Basisprojekt = 100 + 101 +[[image:1755249096987-249.png]] 102 + 103 + 104 +[[image:1755249136156-419.png]] 105 + 106 + 107 +== Screenshots == 108 + 109 +[[image:1755249228556-469.png]] 110 + 111 + 112 += Kommunikation Client ~-~-> Server = 113 + 114 +[[image:1755249285866-367.png]] 115 + 116 +Der Server verwendet das REST-Protokoll und als Austauschformat JSON 117 + 118 += OpenAPI = 119 + 120 +(Hinweis: Ich bin nicht sicher, ob IntelliJ diese Darstellung auch hat, wenn man nicht die Ultimate Version verwendet. Ggf. muss man das OpenAPI-Plugin installieren) 121 + 122 +[[image:1755250026156-269.png]] 123 + 124 +[[image:1755250050031-304.png]] 125 + 126 +* **Paths**: Endpunkte der API (z.B. /users, /lobbies). 127 +* **Operations**: Spezifikation von Methoden wie GET, POST. 128 +* **Definitions**: Detaillierte Beschreibung von Eingabe- und Ausgabestrukturen. 129 +* **Security**: Authentifizierungsmechanismen. 130 + 131 +[[image:1755250061990-172.png]] 132 + 133 +Kann JSON oder YAML (Yet Another Markup Language) verwenden YAML ist wie JSON nur mit weniger Klammern 134 + 135 +[[image:1755250157536-746.png]] 136 + 137 +Die aktuelle Version des OpenAPI Dokumentes findet sich im Basisprojekt 2 [[https:~~/~~/gitlab.swl.informatik.uni-oldenburg.de/SPB/SWPBasisprojekt2/-/blob/master/openapi.yaml?ref_type=heads>>https://gitlab.swl.informatik.uni-oldenburg.de/SPB/SWPBasisprojekt2/-/blob/master/openapi.yaml?ref_type=heads]] 138 + 139 +Dort wird die Datei auch grafisch dargestellt. 140 + 141 + 142 += Maven und OpenAPI = 143 + 144 +Die OpenAPI Datei kann verwendet werden, um sich die [[REST-Schnittstellen>>doc:||anchor="HErweiterungderREST-Schnittstelle"]] generieren zu lassen. Diese Erzeugung erfolgt mit dem OpenAPI Generator [[https:~~/~~/github.com/OpenAPITools/openapi-generator>>https://github.com/OpenAPITools/openapi-generator]] 145 + 146 +Man kann dabei jetzt einen Kommandozeilenaufruf verwenden oder man setzt auf das im Basisprojekt vorhandene MVN () 147 + 148 +Dafür ist in den Maven-Dateien bereits das OpenAPI Generator Plugin integriert. Da im Client und im Server unterschiedliche Arten verwendet werden, erfolgt die Konfiguration im Client und im Server unterschiedlich: 149 + 150 +== Client == 151 + 152 +Im Client werden die Apache Http Bibliothek verwendet. 153 + 154 + 155 +[[image:1756887005209-855.png]] 156 + 157 +== Server == 158 + 159 +Im Server wird Spring (Boot) verwendet 160 + 161 +[[image:1756887037619-847.png]] 162 + 163 +TODO: Weitere Informationen zu 164 + 165 +- Lombok 166 + 167 +- Dependency Injection 168 + 169 +- Spring (Boot), siehe auch [[https:~~/~~/www.marcobehler.com/guides/spring-framework>>https://www.marcobehler.com/guides/spring-framework]] 170 + 171 + 172 + 173 += Erweiterung der REST-Schnittstelle = 174 + 175 +In diesem Beispiel wird einmal gezeigt, wie die REST-Schnittstelle des Basisprojektes einfach erweitert werden kann. 176 + 177 +In diesem Beispiel soll die aktuelle Schnittstelle um die Möglichkeit erweitert werden, alle Lobbies vom Server zu bekommen. 178 + 179 +== Schritt 1: Erweitere das OpenAPI-Dokument == 180 + 181 +Um diese neue Funktion sowohl im Client als auch im Server verwenden zu können, ist es notwendig, diese neue Funktion im OpenAPI-Dokument zu definieren. 182 + 183 +Die Funktion soll sehr einfach sein und keine Parameter verlangen. Dafür bietet sich die GET-Funktion an. 184 + 185 +Im folgenden Bild sind alle Anpassungen zu sehen: 186 + 187 +[[image:1756887436525-790.png||height="355" width="974"]] 188 + 189 + 190 +Nach dem Speichern, sollte das OpenAPI-Dokument wie folgt aussehen 191 + 192 +[[image:1756887488020-376.png||height="642" width="904"]] 193 + 194 + 195 +Jetzt kann man entweder in IntelliJ 196 + 197 +[[image:1756888245896-845.png||height="347" width="620"]] 198 + 199 +oder im Terminal (z.B. auch in IntelliJ) 200 + 201 +[[image:1756888279902-777.png||height="637" width="1053"]] 202 + 203 +Wobei hier auch clean compile reichen würde. 204 + 205 +**ACHTUNG! Falls maven Problem macht, kann das auch an einer falschen Java-Version im System liegen (siehe auch [[FAQ>>doc:.Basisprojekt FAQ.WebHome]])** 206 + 207 +Es werden durch den Aufruf neue Inhalte generiert (bzw. die alten überschrieben). 208 + 209 +[[image:1756888428042-802.png||height="538" width="1077"]] 210 + 211 +Hinweis: Niemals Änderungen unterhalb des target-Ordners machen. Das wird von Maven bei clean gelöscht. 212 + 213 +=== Wie bekommt man dann aber nun die Funktionalität rein? === 214 + 215 +Für jeden Endpunkt (also aktuell lobbies und users) werden drei Interfaces/Klassen erzeugt: 216 + 217 +* *Api (z.B, LobbiesApi): Beschreibung der REST-Methoden, vor allem auch das Mapping von z.B. /lobbies/join auf die Methode lobbyJoin(String) 218 +* ((( 219 +*ApiController implements *Api (Für Spring) (z.B. LobbiesApiController) 220 +))) 221 +* ((( 222 +*ApiDelegate (z.B. LobbiesApiDelegate): Macht die eigentliche Arbeit und muss** im eigenen Code-Bereich** erweitert werden! 223 +))) 224 + 225 + 226 + 227 +== Schritt 2: Erweiterung auf Server-Seite == 228 + 229 +Da es schon Funktionen für die Lobbies gibt, gibt es auch bereits eine Implementierung, die LobbiesApiDelegate überschreibt 230 + 231 +[[image:1756888762381-912.png||height="48" width="789"]] 232 + 233 +Wenn man einen neuen Endpunkt definiert, muss man auch einen neuen Service definieren. (Hinweis: Der Service muss eine Spring Komponenten sein, damit sie in den Spring Context aufgenommen wird). 234 + 235 +In der Klasse muss man dann die neue Methode lobbyList aus der API überschreiben. 236 + 237 +[[image:1756888929507-312.png||height="156" width="1161"]] 238 + 239 +Dabei wird folgendes gemacht: 240 + 241 +1. Es wird ein Rückgabeobjekt vom Typ Liste erzeugt 242 +1. Es wird über alles Lobbies auf dem Server gegangen (lobbyManagement.getLobbies()) 243 +1. Da der Client u.U. nicht die vollständigen Informationen über die Lobbies bekommen soll, gibt es zwei unterschiedliche Klassen: ServerLobby und LobbyDTO. 244 +1. Die Foreach-Schleife sorgt dafür, dass in das Rückgabeobjekt nur die LobbyDTOs eingefügt werden. 245 +1. Dafür wird eine Funktion mit dem Namen lobbyMapping verwendet 246 +1. Schließlich wird am Ende gesagt, dass alles ok ist und eine Antwort ResponseEntity.ok mit dem Rückgabeobjekt (lobbies) gesendet. 247 + 248 +
- 1755248752596-839.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +23.4 KB - Content
- 1755249096987-249.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +470.5 KB - Content
- 1755249136156-419.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +214.2 KB - Content
- 1755249228556-469.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +118.7 KB - Content
- 1755249285866-367.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +65.5 KB - Content
- 1755250026156-269.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +181.0 KB - Content
- 1755250050031-304.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +140.4 KB - Content
- 1755250061990-172.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +64.5 KB - Content
- 1755250157536-746.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.MarcoGrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +125.7 KB - Content
- 1756886220468-891.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +161.0 KB - Content
- 1756887005209-855.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +56.9 KB - Content
- 1756887037619-847.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +52.5 KB - Content
- 1756887436525-790.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +62.8 KB - Content
- 1756887488020-376.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +187.5 KB - Content
- 1756888245896-845.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +115.6 KB - Content
- 1756888279902-777.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +518.9 KB - Content
- 1756888428042-802.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +312.3 KB - Content
- 1756888762381-912.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +3.4 KB - Content
- 1756888929507-312.png
-
- Author
-
... ... @@ -1,0 +1,1 @@ 1 +XWiki.mgrawunder - Size
-
... ... @@ -1,0 +1,1 @@ 1 +16.9 KB - Content