Testtermin: 4.12.2020 Prüfungen:
2. 2020-09-25
-
Was ist ein REST-Service?
-
Präsentation 04_REST_Uebersicht besprochen (bis Folie 20 - EFSP)
3. 2020-09-29
5. 2020-10-06
-
REST wiederholt
-
POST & PUT Methoden erstellt und ausprobiert (CRUD)
-
JsonValue, JsonObject & JsonArray verglichen
-
Typen von Parametern besprochen
Mikroprojekte - Themenvergabe
lfd.Nr. | Name | Thema | - |
---|---|---|---|
1 |
BM |
Friedhofsverwaltung |
|
2 |
DJ |
Produktionsbetrieb (Fließband) |
|
3 |
DF |
Centermanager |
|
4 |
EQ |
Baustellenkoordinator |
|
5 |
EP |
Baumschule |
|
6 |
FS |
Kochrezepte |
|
7 |
FJ |
Farmverwaltung |
|
8 |
HT |
Optiker |
|
9 |
KS |
Facility Management |
|
10 |
KF |
Zooverwaltung |
|
11 |
KS2 |
Event-Manager |
|
12 |
MR |
Reisebüro |
|
13 |
MA |
Plattenlabel |
|
14 |
OJ |
Tanzschule |
|
15 |
PV |
Skischule |
|
16 |
RJ |
Fitnessstudio |
|
17 |
SS |
Fakturierung |
|
18 |
SL |
Kfz-Händler |
|
19 |
SM |
Friseurladen |
|
20 |
TS |
Restaurant |
|
21 |
TK |
Callcenter |
|
22 |
TI |
Busreisen (inkl Schulbusse) |
|
23 |
WN |
Autovermietung |
|
24 |
WJ |
Parkplatzverwaltung |
5.1. Assignment 01: Erstellen von Endpoints für eine Entität mit CRUD-Funktionalität
-
Erstellen Sie ein Quarkus-Projekt mit folgender Bezeichnung:
-
nachname-projektname zB mustermann-restaurant
-
Im Package
at.htl.<projektname>.entity
zB.at.htl.restaurant.entity
erstellen Sie eine Entitätsklasse zB Product (in diesem Restaurant sind die Produkte die Speisen und Getränke) -
Die Daten der Stammdaten sind in einer Collection in einem geeigneten Repository zu speichern (Es ist KEINE Datenbank zu verwenden).
-
Im Package
at.htl.<projektname>.boundary
(zBat.htl.restaurant.boundary
) erstellen Sie ein Klasse <Entity>Service.java zB ProductService.java -
In dieser Klasse erstellen Sie mehrere Endpoints, um die CRUD-Funktionalität für die von Ihnen gewählte Entität zu implementieren.
-
In einem File
request.http
erstellen Sie die geeigneten Request, um ihre Endppoints auzuprobieren -
Die Requests funktionieren mit Daten wahlweise im JSON- oder XML-Format
-
Verwenden Sie Swagger, um Ihre Endpoints zu dokumentieren
-
Im README.md ihres Repos dokumentieren Sie dieser (erste) Aufgabe rudimentär.
-
Vergessen sie nicht, die nicht in das github-repo zu speichernden Dateien zu exkludieren.
-
Für jeden Endpoint ist ein Commit mit einer aussagekräftigen Message zu erstellen.
-
Abgabe bis 12.Oktober 2020, 23:59
-
Den Link zum Classroom-Repository finden Sie im Discord.
-
Verwenden Sie eine Stammdatenklasse. |
____ ____.__ .__ ___________ _____ .__ \ \ / /|__| ____ | | \_ _____/_______/ ____\____ | | ____ \ Y / | |/ __ \| | | __)_\_ __ \ __\/ _ \| | / ___\ \ / | \ ___/| |__ | \| | \/| | ( <_> ) |__/ /_/ > \___/ |__|\___ >____/ /_______ /|__| |__| \____/|____/\___ / \/ \/ /_____/
6. 2020-10-13
7. Benotung Assignment 1 - Entities mit CRUD - Funktionalität
Noten sind (demnächst) im Moodle-Kurs abrufbar.
Bewertung Assignment 1 - Download am 2020-10-14 11:42
lfd.Nr. | Name | Kommentar | Note | ||||
---|---|---|---|---|---|---|---|
1 |
BM |
|
ngd(5) |
||||
2 |
DJ |
Bravo |
sgt(1) |
||||
3 |
DF |
|
sgt(1) |
||||
4 |
EQ |
Implementierung des XmlAdapters
Verwendung des XmlAdapters
POST http://localhost:8080/constructions HTTP/1.1 201 Created Content-Length: 0 Location: http://localhost:8080/constructions (1) <Response body is empty> Response code: 201 (Created); Time: 28ms; Content length: 0 bytes
ConstructionService
|
sgt(1) |
||||
5 |
EP |
|
bef(3) |
||||
6 |
FS |
|
sgt(1) |
||||
7 |
FJ |
Product.java
ProductService.java
ProductRepository.java
|
ngd(5) |
||||
8 |
HT |
|
ngd(5) |
||||
9 |
KS |
|
gen(4) |
||||
10 |
KF |
|
ngd(5) |
||||
11 |
KS2 |
|
ngd(5) |
||||
12 |
MR |
|
sgt(1) |
||||
13 |
MA |
|
ngd(5) |
||||
14 |
OJ |
|
gen(4) |
||||
15 |
PV |
|
sgt(1) |
||||
16 |
RJ |
|
ngd(5) |
||||
17 |
SS |
|
sgt(1) |
||||
18 |
SL |
|
sgt(1) |
||||
19 |
SM |
|
bef(3) |
||||
20 |
TS |
|
sgt(1) |
||||
21 |
TK |
|
gen(4) |
||||
22 |
TI |
|
gut(2) |
||||
23 |
WN |
|
sgt(1) |
||||
24 |
WJ |
|
sgt(1) |
-
Das Projekt muss lauffähig sein (am Besten in ein neues Verzeichnis clonen und ausprobieren)
-
Testdaten sind sehr hilfreich
-
Bezeichner in englisch (ist so üblich)
-
ist eine List wirklich die geeignete Collection für das Repository
-
der erste url einer RESTful-API sollte
/api
sein (ebenfalls sehr oft üblich)
-
Fehlerbehandlung → WebException
-
Wie sind die Responses aufgebaut?
-
Kalenderdatum als Parameter bzw Datenbestandteil
8. 2020-11-06 CDI - Context and Dependency Injection
-
Scope … (Gültigkeits-)Bereich
-
zB Gültigkeitsbereich bei Variablen (i.N. ein Block)
-
zB Lebensdauer von Objekten (ApplicationScoped, SessionScoped, RequestScoped)
-
…
-
-
CDI
-
C … Context … Lebensdauer der Objekte
-
DI … Dependency Injection … Injizieren einer Abhängigkeit
-
-
Was bringt CDI?
-
Inversion of Control / IoC: Das Programm muss sich nicht mehr um die Erstellung von Objekten kümmern, das übernimmt der Container
-
Dies führt zu wenig fehleranfälligen Programmen
-
Um Erstellen/Zuweisen/Löschen der Objekte kümmert sich der Container
-
Man kann einfach die Konfiguration ändern
-
Testcontainer mit Testobjekten
-
Produktiv-Containe mit Real-Life-Objekten
-
-
-
-
-
Eine Dependency oder Abhängigkeit beschreibt in der Softwareentwicklung, dass ein Programm ein bestimmtes Stück Code (z. B. Frameworks, Bibliotheken, Klasse) benötigt, um ordnungsgemäß zu funktionieren.
-
-
Wie kann ein Objekt erstellt werden?
-
Durch Verwendung des Schlüsselwortes
new
-
Durch Verwendung von Design Patterns (Entwurfsmuster)
-
zB einer Factory (Design Pattern)
-
zB eines Builder Pattern (Erbauer)
-
-
Durch Dependency Injection
-
-
Erstellt man ein Objekt mit "new", so ist man selbst für die Lebensdauer verantwortlich
-
Man kann das obige Person-Objekt löschen, indem man die Referenz auf das Objekt löscht
-
Der Garbage Collector gibt den Speicherpaltz des Objekts frei.
-
-
Bei CDI ist der sogenannte DI-Container verantwortlich für
-
das Erstellen von Objekten
-
das Zuweisen zu einem Context (Lebensdauer)
-
das Zuweisen von Objekten zu Variablen
-
das Löschen von Objekten (Freigeben des Speicherplatzes)
-
man spricht von "container-managed" Objekten oder auch Java-Beans
-
Durch Verwendung von Annotation (@ApplicationScoped, @SessionScoped, @RequestScoped) kann man die Lebensdauer beeinflussen.
-
Mit @Inject kann der Developer eine Instanz einer Klasse anfordern.
-
-
The container is the environment where your application runs.
-
Was ist ein Servlet
-
Ein Servlet ist DIE Methode, um Java-Code aus dem Internet (mittels TCP/IP)) aufrufen zu können
-
Viele Bibliotheken zB JAX-RS, JSF usw verwenden im Hintergrund Servlets.
-
8.1. Logging in Jakarta EE (Quarkus)
-
Es wird empfohlen den jboss-Logger zu verwenden.
@ApplicationScoped
public class GreetingService {
private static final Logger logger = Logger
.getLogger(GreetingService.class.getSimpleName()); (1)
int counter;
public String greeting(String name) {
logger.info(String.format("Hello %s (%d x verwendet)", name, ++counter)); (2)
return String.format("Hello %s (%d x verwendet)", name, ++counter);
}
}
1 | Man muss einen Logger deklarieren. Der Klassenname wird übergeben. |
2 | Man kann den Logger verwenden |
2020-11-06 09:40:53,795 INFO [at.htl.con.GreetingService] (executor-thread-198) Hello susi (1 x verwendet!)
-
Es gibt Log-Levels
-
INFO
-
ERROR
-
FATAL
-
DEBUG
-
…
-
-
Es gibt sogenannte Appender zur Ausgabe auf verschiedenen Medien
-
Konsole
-
in Text-Files (auch rotierend)
-
in Datenbanken
-
auf einen REST-Endpoint
-
…
-
8.1.1. Logging mit Dependency Injection
Man kann auch einen Logger mit DI injizieren
public class LoggerProducer {
@Produces
public Logger produceLogger(InjectionPoint injectionPoint) {
return Logger.getLogger(injectionPoint.getBean().getBeanClass());
}
}
@ApplicationScoped
public class GreetingService {
@Inject
private Logger logger; (1)
int counter;
public String greeting(String name) {
logger.info(String.format("Hello %s (%d x verwendet!)", name, ++counter)); (2)
return String.format("Hello %s (%d x verwendet!)", name, ++counter);
}
}
1 | Die Logger Klasse wird injiziert. |
2 | Die Verwendung bleibt gleich |
9. 2020-11-13
9.2. restAssured + assertJ
-
Vocabulary
-
specification … techn. Beschreibung
-
validieren … auf Gültigkeit überprüfen
-
verifizieren … auf Korrektheit überprüfen
-
route … der Pfad in der URI nach dem Host und dem Port
-
9.2.1. GET-Request
-
Es wird automatisch localhost:8080 verwendet
-
Alternative: .when().get("http://localhost:8080/person")
@Test
public void testPersonEndpoint() {
var person =
// arrange
given()
// act
.when().get("/person")
// assert -> Rückgabe überprüfen
.then()
.statusCode(200) // wir validieren
.extract()
.body()
.as(Person.class);
assertThat(person).isNotNull();
assertThat(person.getName())
.isNotNull()
.isNotEmpty()
.isEqualTo("Sepp");
}
9.2.2. POST-Request
@Test
public void testPostPersonEndpoint() {
given()
// arrange
.contentType(ContentType.JSON)
.body( // Text Blocks (1)
"""
{
"vorname":"Markus",
"nachname":"H"
}
""")
// act
.when().post("/person/jsontype")
.then()
.statusCode(200); // wir validieren
}
1 | Verwendung von Text-Blocks ab Java 15 (→ pom.xml) bis Java 14 |
.body("{\"vorname\": \"Markus\", \"nachname\": \"H\"}")
9.3. Startup-Methode in Quarkus
-
wird nach dem Start der Applikation ausgeführt.
@ApplicationScoped
public class InitBean {
// vergleichbar mit main()-MEthode
void onStart(@Observes StartupEvent event) {
LOG.info("The application is starting ...");
}
}
9.4. PostConstruct-Methode
-
Man kann injizierte Resourcen (Objekte) im Konstruktor nicht verwenden, da sie erst nach der Ausführung des Konstruktors injiziert werden.
@ApplicationScoped
public class InitBean {
@Inject
GreetingService greetingService;
public InitBean() {
// hier kann man greetingService noch nicht verwenden
}
@PostConstruct
private void init() { (1)
greetingService.greeting("Jonas 1");
}
}
1 | Diese Methode wird ausgeführt:
|
10. 2020-11-13
10.1. Vorgangsweise beim Einrichten
zB Die Objekte einer Klasse Person sollen in einer DB persisitiert werden
-
Bibliotheken zur pom.xml hinzufügen
-
zB Hibernate / JPA
-
JDBC-Treiber der Datenbank (postgres-jdbc-driver)
-
-
Einrichten der zugangsdaten in
application.properties
-
jdbc-url
-
username
-
password
-
-
Datenbank einrichten und starten
-
zB mit Docker
-
-
Entity-Klasse Person vorbereiten
-
@Entity als Klassen-Annotation
-
Long id
hinzufügen mit Annotation @Id -
Ev. einer Id-Generator annotieren
-
3 Strategien (AUTO ist keine eigene Strategie)
-
TABLE
-
IDENTITY
-
SEQUENCE
-
AUTO
-
-
-
Injizieren Eines EntitiyManagers
-
Bei schreibenden Operationen Annotation
@Transactional
verwenden.
Voíla … jetzt kann man persistieren
11. 2020-11-17 - Forts. JPA mit Quarkus
11.1. DB Setup
Wir verwenden als Beispiel Postgres (weil open source, sehr verbreitet und flexibel).
docker pull postgres
docker run --name postgres --rm -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 -v $HOME/databases/postgres:/var/lib/postgresql/data postgres
Anschließend die db anlegen (create database quarkdb
).
11.2. Project Config
Zwei Dependencies:
-
io.quarkus:quarkus-hibernate-orm
-
JDBC driver (z.B.
quarkus-jdbc-postgresql
)
Hinzufügen via 'add with maven' Command von der https://code.quarkus.io website.
# datasource configuration
quarkus.datasource.db-kind = postgresql
quarkus.datasource.username = postgres
quarkus.datasource.password = postgres
quarkus.datasource.jdbc.url = jdbc:postgresql://localhost:5432/quark-db
# drop and create the database at startup (use `update` to only update the schema)
quarkus.hibernate-orm.database.generation=drop-and-create
11.3. Entity anlegen & verwenden
-
Entities annotieren (
@Entity
,@Id
,…) (s.o.)-
Serialisierungsoptionen für
enum
-
Relationen (1:1, 1:n, m:n) entsprechend abbilden
-
Angabe des Foreign Key
-
Cascade Optionen
-
-
-
Repository in Service injecten
-
EntityManager
in Repository injecten -
Service Methode mit
@Transactional
annotieren-
Im Service und nicht im Repo, weil wir ggf. mehrere Operationen zusammenfassen!
-
LUW!
-
-
11.4. Queries
-
Abfragen werden mit JPQL erstellt
-
Ähnlich SQL aber mit Abwandlungen/Erweiterungen wie:
-
Joins über Referenzen "implizit" möglich
-
Objekte (new) können angelegt werden
-
Abfragen auf Class- und nicht auf Tablename
-
…
-
-
Placeholder (prepared statement) zwecks SQL Injection Vermeidung
-
-
Zwei Optionen:
-
(Typed)Queries direkt über den
EntityManager
erstellen -
NamedQueries in der Entity class definieren
-
-
Laden verbundener Entitäten:
-
Lazy Loading
-
Eager Loading
-
12. Strategien für Primärschlüsselerstellung
-
IDENTITY
-
Autowert, AutoIncrement → in einem Tabellenfeld wird automatisch ein Zähler hochgezählt
-
-
SEQUENCE
-
Die Sequence ist ein eigenständiges Datenbankobjekt, die eine Folge von Zahlen generiert
-
in Reihenfolge, zufällig, rollieren usw.
-
kann man mit der Annotation @SequenceGenerator im Code erstellem
-
-
TABLE
-
die einfachste Variante
-
eine Tabelle (meist mit Namen SEQUENCE) hat ein Feld mit einer Zahl, die mit UPDATEs hochgezählt wird
-
Manchmal hat man für jede Tabellen-Id eine eigene Zeile
-
-
AUTO
-
eine der obigen Staretgien wird automatisch gewählt (meist TABLE)
-
13. 2020-11-17
14. 2020-12-01
14.1. Datenmodell
-
Stammdaten meist über Bewegungsdaten assoziiert
-
Repository-Pattern
-
keine Repositories für schwache Entitäten
-
14.2. Test
-
zuerst Use-Cases / User-Stories definieren und dann
-
Tests für die einzelnen Use-Cases / User-Stories schreiben
-
System-Tests (Endpoints)
-
zB ein Produkt anlegen
-
zB einen Kunden anlegen
-
zB eine Rechnung mit drei Rechnungspositionen erstellen
-
-
Integrations-Tests (zB für Repository-Klassen)
-
vor allem Dingen die Assoziationen
-
unidirektional
-
wenn bidirektional, das Einfügen und löschen von Objekten AUF BEIDEN SEITEN
-
-
-
Unit-Tests (nur eine Klasse wird getestet, zB Entity-Klassen)
-
nicht nur Getter und Setter testen
-
eher eigene Logik (wenn etwas berechnet wird, equals-Methoden usw.)
-
wenn ein Setter/Getter eine beondere zusätzliche Logik hat, dann ist er sehr wohl zu testen
-
-
14.3. Arten von Beziehungen zwischen Objekten
14.3.1. Vererbung

Pkw kaefer = new Pkw();
-
3 Strategien
-
SINGLE_TABLE
-
TABLE_CLASS (table per concrete class)
-
joined
-
14.3.2. Aggregation
-
besteht-aus, consists-of
-
Objekte können zerstörungsfrei getrennt werden
-
Bsp: Auto und Autoreifen

14.4. UML-Klassendiagramm

-
Konvention → Vereinbarung
-
Signatur einer Methode: Scope + Rückgabewert + Methodenname + Parameterleiste
-
Objekt (Object) = Instanz einer Klasse; mit Identität und Zustand
-
Beispiel: PKW
-
Anwendungsfall 1: Transport von Personen
-
Anwendungsfall 2: Transport von Gütern
-
Anwendungsfall 3: Cruisen auf der Landstraße (Statussymbol)
-
-
Eigenschaften von Objekten
-
Objektidentität
-
-
Datenkapselung
-
Polymorphismus (Vielgestaltigkeit)

Duck donald = new Duck();
donald.say(); // quack
Cat mimi = new Cat();
mimi.say(); // miau
List<Animal> animals = new LinkedList<>();
animals.add(donald);
animals.add(mimi);
animal.get(0).say(); // quack
annimal.get(1).say(); // miau
-
Vererbung
14.4.1. Beziehungen zwischen Objekte
15. 2020-12-15
select c.CUST_COUNTRY, count(*)
from SW_CUSTOMER c
inner join SW_ORDERING SO on c.CUST_ID = SO.ORD_CUST_ID
group by c.CUST_COUNTRY;
select o.customer.country, count(o) from Ordering o group by o.customer.country
-
Bei Verwendung von JPA kann man sich den Join sparen, da eine Assoziation existiert.
16. 2021-01-15
16.3. Begriffe
-
Surrogat … Ersatz
-
Ist ein Ersatz für einen natürlichen Schlüssel in einer relationalen DB.
-
Ist ein künstlicher Schlüssel (Primary Key).
-
Meist eine lfd. Nr., die von der DB hochgezählt wird.
-
-
Begriffspaar transient/persistent
-
transient … flüchtig
-
persistent … dauerhaft (die Daten überleben den Prozess ihrer Entstehung)
-
-
custom (im Gegensatz zu vorgegeben/vordefiniert/standardisiert)
-
custom … maßgeschneidert, der Benutzer kann sich etwas eigenes "bauen"
-
-
Referenz
-
Verweis auf etwas
-
Beispiele
-
Referenzvariable verweist auf ein Objekt (refernziert ein Objekt)
-
Kundenreferenz verweist auf (hoffentlich zufriedene) Kunden meines Produkts
-
Referenzen in meinem Lebenslauf: verweisen auf vorhergegangene Arbeitgeber (die hoffentlich auch zufrieden waren)
-
-
17. 2021-01-19
17.1. Panache
Live-Coding-Projekt: panache-person-demo
-
Custom Id
-
detached / attached
-
UnitTest erstellt
-
Unterschied @QuarkusTest und ohne Annotation
-
Panache methods
-
find mit Sort.by()
-
paging
-
-
Übung: Erweiterung des Microprojektes mit sinnvollen panache …
-
Übung 2:
-
Vorbereiten des Codes, um in einem Endpoint, die einzelnen Seiten als JSON auszugeben
-
-
Für Spezialisten: Verwendung von Qute, um Die Seiten als HTML gerendert auszugeben.
18. 2021-01-21 - Angular
19. 2021-01-26
-
Was ist ein:
-
HTML - Element
-
HTML - Attribute
-
HTML - Tag
-
-
format … das aussehen betreffend
-
zB Aussehen eines Word - Dokuments (fette Schrift, Schriftart, …)
-
zB die Datenstruktur: als JSON formatieren
-
-
to render … für die Ausgabe vorbereiten
20. 2021-02-05
-
Chapter 4. Templates and Data Binding
-
4.1. Interpolation
-
4.2. Event-Binding
-
4.3. Template Expressions
-
4.4. Property Binding
-
4.5. Two-Way-Binding
-
4.6. Structural Directive - *ngFor
-
4.7. Event with Parameter
-
4.8. Structural Directive - *ngIf
-
4.9. Exercise: Turmrechnen
-
21. 2021-02-16
After every unit commit into repo: https://classroom.github.com/a/_WHf3y1Q |
each commit has to include your last name - ie Mueller - unit 1 / 1 Introduction to Angular |
For every angular-project use an own branch |
Never ever push node_modules into your git-repo |
use -g when creating a new angular project, to avoid a mess with the git-repos |
28. 2021-03-16
-
Vereinbarung
-
Tour of Heroes bis zum nächsten mal
-
bis inkl. Kapitel 4: Services
-
-

-
TODO: REST-Client in Angular-Technology-Notes überarbeiten
30. 2021-03-26 - Distance Learning
-
Nach den Ferien ist die Gruppe A anwesend
-
Bis nach den Ferien ist das Tutorial "Tour of Heroes" fertigzustellen (Gr. A + Gr. B)
-
Download der Repositories am 9. April 2021 → wird bewertet
-
32. 2021-04-13
-
FIT (Firmeninformationstag)
-
Routing wurde besprochen
-
Warum?
-
jedoch nicht implementiert
-
-
Das microprojekt ist zu erstellen
-
Entities
-
Repositories
-
restful Services
-
35. 2021-04-22 - Distance Learning
35.3. System Architecture
-
siehe auch: Angular 11 HttpClient Service Example: Http GET, POST, PUT & Update Request Tutorial, _blank" window=" == 2021-04-27
37. Konkretisierung der Angabe für das Mikroprojekt
-
Das Microprojekt besteht aus zwei Teilen:
-
Backend (Quarkus / JakartaEE)
-
Frontend (Angular)
-
-
Zuerst ist das Backend sauber zu erstellen (Ordner
backend
im Repository)-
Die Tabellen und deren Assoziationen müssen korrekt sein und mind. der 3.NF entsprechen
-
Es sind Endpoints zu erstellen:
-
Bei den Endpoints dürfen nicht nur die Daten jeweils einer Entität (Tabelle) zurückgegeben werden, sondern es ist mindestens eine Query zu erstellen, die aus mehreren Tabellen Daten zurück gibt.
-
Auch sind die Werte zu filtern:
-
zumindest einmal mit QueryParams
-
zumindest einmal mit PathParams
-
-
Mindestens ein Endpoint muss
-
einen GET-Request
-
einen POST-Request
-
einmal mit nur einem Objekt und
-
einmal mit mehreren Objekten
-
-
einen PUT-Request
-
einen PATCH-Request
-
und einen DELETE-Request beinhalten
-
-
-
Es ist zumindest ein request.http - File im http-requests - Ordner zu erstellen, damit die Abfrage der Endpoints dokumentiert ist
-
In der README.md ist eine sehr rudimentäre Dokumentation enthalten:
-
Datenmodell
-
Use-Case mit UCD: Es sind spezielle Use-Cases für das jeweilige Thema zu implementieren
-
zB für ein Kino die Sitzreservierung bei Filmen
-
es darf nicht für jede Themenstellung eine User-, Kunden- oder sonstige Verwaltung durchgeführt werden, die bei sämtlichen Themenstellungen ident ist.
-
-
Infos über die Endpoints - dies kann und soll durch einen Swagger ersetzt werden → Link auf Swagger angeben
-
Die Default-Swagger-Infos können und sollen durch Annotationen ergänzt werden.
-
Die Angabe soll als Checkliste angegeben sein, damit auf einen Blick ersichtlich ist, was gemacht wurde.
-
Wie startet man das Projekt.
-
-
Es geht grundsätzlich nicht darum, dass alle Endpoints (dh für alle Entitäten) vollständig ausprogrmmiert werden. Allerdings sind die verschiedenen Konzepte (Queries, Params, Request-Arten, POSTs mit einem und mehreren Objekten als csv oder json) einmal zu implementieren. |
-
Das Frontend wird später erstellt.
-
Abgabetermin: 25. Mai 2021, 8:00
-
Als Repo wird 17-microproject verwendet
40. 2021-06-04 - Quarkus Recap
Entity can become detached in one of the following ways (there could be more ways):
-
When the transaction (in transaction-scoped persistence context) commits, entities managed by the persistence context become detached.
-
If an application-managed persistence context is closed, all managed entities become detached.
-
Using clear method
-
Using detach method
-
rollback
-
In extended persistence context when a stateful bean is removed, all managed entities become detached.
Source: stackoverflow
-
Teststoff:
-
JPA / Panache
-
Jax-RS
-
Params: FormParam, PathParam, QueryParam, …
-
-
JSON-B
-
JSON-P
-
Dateizugriff
-
Arbeiten mit Strings, chars, …
-
-
HTML/CSS/JS
-
properties-files