• Termin der Leistungsfeststellung 23.11.2020

  • Termin der Prüfungen 22.1.2021

1. 2020-09-25

1.1. Übung WebSocket, SSE und gRPC

Erstellen Sie gemäß Ihrem Thema ein Projekt und implementieren Sie untenstehende Technologien:

Weitere Aufgaben:
  • Testen Sie die einzelnen Technologien automatisiert

  • Dokumentieren Sie die einzelnen Technologien in Form von gh-pages mit Asciidoctor

    • Einsatzgebiet von gRPC (Welches Problem wird gelöst)

    • Alternativen zu gRPC

    • Grundlegende Funktionsweise von gRPC

    • Dokumentieren Sie die automatisierten Tests

  • Pushen Sie das Endergebnis sowie die Zwischenergebnisse hierhin: https://classroom.github.com/a/WHJoF_6T

2. 2020-10-02

  • Was ist gRPC

    • Alternative zu REST

    • binär

    • sehr effizient und performant

    • …​

  • Feedback zu Übungen

  • Ansehen der Definition von gRPC lt. Rainer Stropek - gRPC mit C#

3. 2020-11-06

  • Asynchronous persistence with Mutiny

4. 2020-11-09

4.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
Output des Loggers in Console
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)

      • zB 3 Files mit einer bestimmten Größe (zB 10k).

      • Sind alle 3 Files beschrieben, wird das erste File gelöscht und neu beschrieben

      • Vorteile:

        • Der Speicher (Festplatte) wird nicht vollgeschrieben

        • Es stehen immer Log-Meldungen aus der Vergangenheit zur Verfügung

    • in Datenbanken

    • auf einen REST-Endpoint

    • Log-Collector zB GrayLog

    • …​

4.1.1. Logging mit Dependency Injection

Man kann auch einen Logger mit DI injizieren

Erstellen des Producers
public class LoggerProducer {

    @Produces
    public Logger produceLogger(InjectionPoint injectionPoint) {
        return Logger.getLogger(injectionPoint.getBean().getBeanClass());
    }
}
Verwendung des injizierten Loggers
@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

4.4. Semantic Versioning

5. 2020-11-13

5.1. Quarkus mit Kotlin

6. 2020-11-20

Project "JIB" java-image-builder

7. 2021-03-19

  • Termin der Leistungsfeststellung 9.4.2021

  • Termin der Prüfungen 16.4.2021

7.1. Übung: Vorbereitung zur Matura

7.1.1. Ausführung der Übung

  • Jeder Schüler erstellt mit dem Thema des Mikroprojekts, des vorigen Jahres ein kleines Projekt mit folgender aufgabenstellung

  • Die Anzahl der Tabellen des Datenmodells soll 4-5 Tabellen nicht überschreiten

  • Die Commits-Messages müssen mit dem Nachnamen beginnen

  • Die SchülerInnen können dazu befragt werden.

  • Falls diese Übung von allen SchülerInnen sauber durchgeführt wird und die SchülerInnen Ihre Lösung erklären / erläutern können kann dies den Test ersetzen

  • Dazu ist noch eine Vereinbarung mit den Lehrkräften notwendig.

  • Erstellen Sie in diesem Repo sowohl für das Frontend als auch für das Backend einen eigenständigen Ordner (frontend und backend)

  • Termine

    • 26. März 2021: Abgabe des Backends (Datenmodelle + Repositories).

      • An diesem Tag wird kontrolliert, ob die (bereits implementierten) Klassen ok sind.

      • Das generierte Klassendiagramm und das ERD sind im README.md darzustellen.

    • 3. April 2021: Abgabe des restlichen Projekts

      • dieses Projekt wird dann von den Lehrkräften durchgesehen

      • Kriterien um den Test abzusagen:

        • Alle SchülerInnen geben ein Projekt ab

        • Die abgegebenen Projekte erfüllen ein Mindestmaß an Funktionalität (nicht leer)

7.1.2. Allgemeines

xxx

7.1.3. Aufgabenstellung

  • Backend (Quarkus)

  • Frontend (Angular)

Projekt erstellen
DerbyDb als DB (Konfiguration vorgegeben)
Klassen erstellen und persistieren
  • Datenmodell wird als ERD vorgegeben

    • → Klassen erstellen

    • → mit vorgegebenen INSERT.sql befüllen

REST-Endpoints erstellen
Für die Endpoints sind NamedQueries in den Repositories zu erstellen.
  • vorgegeben ist zB

    • GET /api/vehicle/get-broken

    • POST

    • UPDATE

    • DELETE

  • Mit POSTs können auch

    • Images

    • Files (csv, json usw) hochgeladen werden → Verwenden der Streaming API

Implementierung des Clients
Master-Detail-Seite
  • mit Routing und Parameterübergabe

  • Referesh-Button

  • Sortierung der Liste

  • Suchfunktion

  • Auf Detail Seite können Daten eingegeben werden

WebSockets
  • Mit anderen Angular-Clients kann über WebSockets Kontakta aufgenommen und Daten ausgetauscht werden.

SSE

Information anderer Angular Clients über SSE