‏ ‏ ‎ ‏ ‏ ‎

1. 2024-09-12

application server vs web server

2. 2024-09-19

2.1. Persistenz

  • Wenn Daten den Prozess, der sie erzeugt, überleben, dann spricht man von persistenzten Daten.

    Beispiele:

    • Dateien, die serialisiert wurden

    • Datenbanken

    • …​

2.2. Was ist Serialisierung?

  • In einem (Java-)Programm sind die Instanzen die Repräsentationen von Klassen

    • Beispiel: Die Klasse ´Person´ hat die Instanzen: Karl, Susi, Herbert

    • In den Instanzen (Objekten) sind den Feldern der Klasse Werte zugeordnet.

  • Diese Instanzen können nun zur Laufzeit als Files gespeichert werden

  • Voraussetzung: Interface Serializable

  • Mit der statischen Konstante ´serialVersionUID´ wird die Version der Klasse bestimmt. Es können nur gespeicherte Objekte eingelesen werden, deren serialVersionUID mit der der aktuellen Klasse übereinstimmt.

3 layer architecture

2.3. Was ist Quarkus?

  • Eine Quarkus Application entspricht dem mircoprofile Standard.

  • In einer Quarkus Applikation (zB jar-File) befinden sich zusätzlich zum App-Code die JakartaEE- oder microprofile-Libraries sowie ein Web-Server, der gestartet wird, um zB mittels REST auf die Quarkus App zuzugreifen.

2.4. XML

  • extensible Markup Language

  • extensible …​ erweiterbar, dh es können beliebige Tags verwendet werden (zB person)

    • markup language …​ Auszeichnungssprache (selbstbeschreibende Sprache)

    • Beispiel

      <person>
        <name>Susi</name>
        <wohnort>Leonding</wohnort>
      </person>
    • Die Daten beschreiben sich selbst. Eine person hat einen name und einen wohnort.

  • XML ist eine Baumstruktur.

  • Einsatzgebiete

    • zur Datenübertragung (zB im Web)

    • als Konfigurationsdatei (zB pom.xml)

  • Alternativen:

    • JSON

    • YAML

    • TOML

    • …​

2.5. HTML

  • HTML ist eine Untermenge von XML. Früher waren die Tags fix definiert.

  • HTML ist genauso wie XML eine Baumstruktur

    <html>
      <head>zzz</head>
      <body>
        <h1>yyy</h1>
        <p>xxx</p>
      </body>
    </html>
  • Im Browser wird diese Baumstruktur als DOM (document object model) gespeichert.

    Diagram
png

3. 2024-09-26

3.1. REST

3.2. Datenintegrität

erd
microservices vs monolith
  • Im bestehenden Projekt einen POST-Request absetzen

  • Der Inhalt des POST-requests wird in der Konsole ausgegeben.

3.3. Annotationen

4. 2024-10-03

4.1. UML - Klassendiagramm

  • Beziehungen

klassen instanzen uebersicht
cld erd bsp
objektdarstellung

5. 2024-10-10

  • Wiederholung REST-API Präsentation

rest server client

5.2. Microprojekte

Name Thema

Kreuzer Andreas

Büchererei

Mayr Tim

Friedhofsverwaltung

Restaurant (Tische reservieren)

Wizany Linus

Reisebüro

Stützner Michael

Gärtnerei

Klaffenböck Jakob

Tierarztpraxis

Huch Tobias

Eisenbahn (Fahrplan)

Mayer Samuel

Fluggesellschaft

Hayer Florian

Spedition

Michel Jakob

Facility-Manager (Hausmeister)

Brandstätter Elias

Autovermietung

Simsek Atilla

Fussballspiele Informationsportal

Kaltenberger Elisa

Bank

Schönbauer Linnea

Radfahrverleih

Catic Vanesa

Flughafen

Hussein Silin

Nachhilfeverwaltung

Öllinger Zoe

Fahrschule

Anderson Marvin

Immobilienverwaltung

Öller Konstantin

Tennisverein

Zinhobel Luca

Hotel

  • HÜ:

    • Klassendiagramm in plantuml (3-5 Tabellen)

    • Endpoint ohne Entitäten

6. 2024-10-17

6.1. Commits

6.2. Rest-Params

6.3. REST-Responses

7. 2024-11-07

7.1. Package by Layer vs Package by Feature

package by

7.2. Project Vehicle

8. 2024-11-14

8.1. Quarkus Launch Modes

package at.htl.taxes.control;

import io.quarkus.runtime.LaunchMode;
import io.quarkus.runtime.StartupEvent;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;

@ApplicationScoped
public class InitBean {

    void init(@Observes StartupEvent event) {
        if (LaunchMode.current() == LaunchMode.DEVELOPMENT) {
            // ...
        }
    }

}

8.2. Nachtrag: QueryParams bei REST-Service

public Response foo(
            @QueryParam("county") @DefaultValue("Austria") String country,
            @QueryParam("size") @DefaultValue("12") int size
    ) { ... }

8.3. Data-Transfer-Objects (DTO)

stream of Person
 -> filter by country
 -> sorted by dob, zip, name
 -> map to PersonDto
 -> store in list

8.4. File einlesen

src/main/resources/vehicles.csv
BRAND,MODEL,REGISTRATION_DATE,NO_OF_SEATS,OWNER_NAME
Opel,Blitz,2024-11-08,3,Pepi
public void insertVehiclesFromFile(String fileName) {
    try (InputStream is = Thread.currentThread()
                                .getContextClassLoader()
                                .getResourceAsStream(fileName);
         BufferedReader reader = new BufferedReader(
                                    new InputStreamReader(is)
                                 )
    ) {
        reader.lines()
                .skip(1)
                .peek(arr -> Log.infof("Read line: %s", arr))
                .map(line -> line.split(","))
                .map(arr -> new Vehicle(
                        arr[0],
                        arr[1],
                        LocalDate.parse(arr[2], DateTimeFormatter.ISO_DATE),
                        Double.parseDouble(arr[3]),
                        new Person(arr[4])))
                //.forEach(this::persist);
                .forEach(vehicle -> this.persist(vehicle)
                );
    } catch (IOException e) {
        Log.error("Error reading file " + fileName + ": " + e.getMessage());
    }
}

8.5. JPA

betriebsmodi datenbanken
Figure 1. Betriebsmodi von Datenbanken (DerbyDb, H2 u.a. in Java implementierte DBs)
java jvm
Figure 2. How Java works

8.8. ev. Qute mit htmx

9. 2024-12-12

reverse engineering

9.1. JPA - Projekt vorbereiten

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-hibernate-orm</artifactId>
</dependency>
<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-jdbc-h2</artifactId>
</dependency>

9.2. Test-Library assertj-db

assertj db

9.3. 2024-12-19

9.4. JPA - Bsp Vehicle - Rental

cld vehicle rental

Übung:

9.5. Regressions-Tests

  • "Alte" Tests werden immer wieder ausgeführt, um sicherzustellen, dass bei Einführung neuer Funktionalität oder Bugfixen auch die bestehende Funktionalität noch gegeben ist.

9.6. Logging

rollierende logs

10. 2025-01-09

10.1. Repository per Aggregate

repository per aggregate
  • Übung: Im Mikroprojekt Queries erstellen und mittels REST-Service abfragen können

    • mind. eine Query mit Aggregation

    • mind. eine Query auf eine Tabelle mit Detail-Ds

    • mind eine Query mit Join über 3 Tabellen

    • einen REST-Endpoint mit CREATE

    • einen REST-Endpoint mit UPDATE

    • einen REST-Endpoint mit DELETE

11. 2025-01-16

11.1. SQL

  • DML: Data Manipulation Language INSERT, UPDATE, DELETE

  • DDL: Data Definition Language CREATE, ALTER, DROP

  • TCL: Transaction Control Language COMMIT, ROLLBACK, SET SAVEPOINT

  • DQL: Data Query Language SELECT

  • DCL: Data Control Language GRANT REVOKE

11.2. Informationswürfel

  • Nicht nur das Erstellen von Datenbank-Schemata ist wichtig und das Einfügen von Daten, sondern auch das Lesen und Auswerten von Daten

informationswuerfel

11.3. Quarkus Panache

12. 2025-01-30

  • Jedes ts-file ist auch als js-file gültig

12.1. Custom Elements

13. 2025-02-06

13.1. Kommunikation zwischen (heterogenen) Systemen

  • REST

    • Kommunikation für Prozesse und System

    • Es stehen fix definierte Endpoints zur Verfügung (Struktur der json-Objekte ist vordefiniert)

    • Man mus einen Request absetzen um einen Response zu erhalten (Der REST-Server kann von sich aus den Client nicht erreichen)

      • Bsp: Die Ergebnisse eines Fussballspiels werden an einen RPi übertragen, damit dieser die Ergebnisse auf einem Display anzeigen kann.

        Verwendet man dazu REST, muss der RPi regelmäßig den Server abfragen, ob es neue Ergebnisse gibt. Man spricht hierbei von Polling.

  • Websockets

    • https://quarkus.io/guides/websockets

    • Websockets addressieren die Problematik des Pollings. Der Server kann den Client erreichen und ihm Daten senden.

    • Websockets sind bidirektional

  • Server-Sent Events SSE

    • SSE sind vergleichbar mit Websockets, jedoch nur in eine Richtung. Der Server kann Daten an den Client senden, der Client kann jedoch nicht antworten.

  • graphql

  • gRPC

13.2. Zusammengesetzter Schlüssel

Failed to generate image: PlantUML preprocessing failed: [From <input> (line 12) ]

@startuml
class Vehicle{}

class Customer{}

class Rental{
  - RentalId: Long
  - VehicleId: Long
  - CustomerId: Long
}

()
^^^^^
 Syntax Error?

@startuml
class Vehicle{}

class Customer{}

class Rental{
  - RentalId: Long
  - VehicleId: Long
  - CustomerId: Long
}

()

@enduml
Im nächsten Test Aufgabe zu Asciidoctor und plantuml

13.3. Asciidoctor

13.3.1. Admonitions

  • Voraussetzung :icons: font in Präambel

Das ist wichtig
    ifdef::env-github[]
    :tip-caption: :bulb:
    :note-caption: :information_source:
    :important-caption: :heavy_exclamation_mark:
    :caution-caption: :fire:
    :warning-caption: :warning:
    endif::[]
  • Admonition mit Block

Feeding the Werewolves

While werewolves are hardy community members, keep in mind the following dietary concerns:

  1. They are allergic to cinnamon.

  2. More than two glasses of orange juice in 24 hours makes them howl in harmony with alarms and sirens.

  3. Celery makes them sad.

13.3.2. Callouts

public class MyStack {


    boolean isEmpty() { (1)
        return true; (2)
    }

}
1 Kommentar 1
2 Kommentar 2
Unresolved directive in index.adoc - include::../../labs/vehicle/src/main/java/at/htl/vehicle/entity/Vehicle.java[tags=constructor]
1 Auch das ist ein Kommentar
Header 1 Header 2
  • ydbfcsdbfd

  • dsfg sdg

Column 2, row 1

Column 1, row 2

Column 2, row 2

Column 1, row 3

Column 2, row 3

14. 2025-02-13

referenztyp vs primitivdatentyp

14.2. MQTT

  • Telemetrie („Fernmessung“; von altgriechisch τῆλε (tēle, „fern“) und μέτρον (métron, „Maß“ oder „Maßstab“)) ist die Übertragung von Messwerten eines am Messort befindlichen Messfühlers (Sensor) zu einer räumlich getrennten Stelle. [wikipedia]

  • MQTT stands for Message Queuing Telemetry Transport. It is a lightweight messaging protocol for use in cases where clients need a small code footprint and are connected to unreliable networks or networks with limited bandwidth resources. [https://www.paessler.com/it-explained/mqtt^]

rest vs mqtt
  • Server-Produkte:

    • mosquitto

    • rabbitMQ

    • hiveMQ

    • Apache Kafka

  • Client-Produkte

    • MQTT-Explorer

https://youtu.be/2qfZfkJ2ppc?si=XYJglFXhZTGFGJM8 https://youtu.be/MlsAPMwAm4Y?si=pxyZkUDhds4UZUu6

14.2.1. MQTT

  • Arbeiten Sie obige Videos durch

  • Erstellen Sie in Ihren Mikroprojekten einen MQTT-Client in Java um auf den im Moodle angegeben MQTT-Server der Schule zugreifen zu können

    • Das Topic soll lauten: 4bhitm/nachname/xxx

    • Erstellen Sie einen zeitlich gesteuerten Service, der beliebige (Zufalls-)Werte periodisch an den MQTT-Server sendet

    • Überlegen Sie sich einen Use Case um dynamische Topics zu verwenden

      • zB könnte eine eigene Quarkus Applikation einen REST-Service anbieten, bei dem für einen bestimmten Raum die Temperatur abgefragt werden kann.

        uebung mqtt
  • Erläutern Sie im README.adoc die grunddätzliche Vorgehensweise um Daten vom und zum mqtt-server zu senden.

  • Achten Sie darauf eine ordentliche Präambel im README.adoc zu verwenden, um die admonitions im gh context mit icons darzustellen.

  • Verwenden Sie bei Ihren Erklärungen Callouts, die direkt auf den Quellcode zugreifen.

asciidoctor-präambel
= Übung Lego-Programmier-Bausteine
Thomas Stütz
1.0.0, {docdate}
:icons: font
:sectnums:    // Nummerierung der Überschriften / section numbering
// :toc:
// :toclevels: 1
:experimental:
//https://gist.github.com/dcode/0cfbf2699a1fe9b46ff04c41721dda74?permalink_comment_id=3948218

15. 2025-03-06

serverseitig
client seitig
  • Frage:

    • wie ist webpack in Angular integriert?

16. 2025-03-27

  • Angular Vehicle beginnend bei 4.8

  • bis exkl. 4.16

17. 2025-04-03

  • Angular Rest-Service

  • Übung

    • fertigstellen des REST-Service Projektes

    • Angular Tutorial bis inkl. 4.24

  • Quarkus Websocket