Für das Veranstaltungsmanagement soll erfasst werden, welche Teilnehmer (Vortragender, Zuhörer,
Helfer) zu erwarten sind. Außerdem sollen auch Zeitabschnitte erfasst werden, in denen
Diskussionen, Kurz- oder Langvorträge stattfinden.
Beschreibung Datenmodell
Für jeden Teilnehmer soll erfasst werden:
• Name
• Vorname
• Wohnort
Weitere Details müssen für den Teilnehmer nicht erfasst werden. Vortragende, Zuhörer und Helfer
sollen ebenfalls erfasst werden. Dementsprechend sollen für diese speziellen Teilnehmer zusätzlich
noch spezifische Eigenschaften erfasst werden. Diese sind für Vortragender:
• Unternehmen
• Anzahl der bisher insgesamt gehaltenen Vorträge
• Beschreibung (kurzer Text, um den Vortragenden zu beschreiben)
Für Zuhörer sollen die folgenden zusätzlichen Eigenschaften erfasst werden:
• Anzahl der Jahre Berufserfahrung
• Interessensgebiete (z. B. Java, C, Python, Scrum)
Für Helfer sollen ebenfalls zusätzliche Eigenschaften erfasst werden:
• Maximale Anzahl gleichzeitig getragener Klaviere
Für jeden Teilnehmer soll außerdem eine ID erzeugt werden, die aus einer Zeichenkombination (z. B.
JAVALAND) und einer fortlaufenden, für jeden Teilnehmer einzigartigen Nummer besteht. Das
könnte zum Beispiel zu der ID „JAVALAND-0034“ führen.
Außerdem sollen die Zeitabschnitte für die Veranstaltung erfasst werden können, wobei in jedem
Zeitabschnitt entweder ein Kurzvortrag, ein Langvortrag oder eine Diskussion stattfinden kann. Zu
jedem Zeitabschnitt soll eine Kurzbeschreibung erfasst werden können. Es solle auch vermerkt
werden, welche Art von Vortrag oder Diskussion tatsächlich in dem Zeitabschnitt stattfindet.
Klasse mit verschiedenen Zuständen
Jeder Teilnehmer soll einen bestimmten Status hinsichtlich seiner Anmeldung haben. Es können
dadurch drei verschiedene Zustände erreicht werden: ANGEMELDET, ANGEMELDETBEZAHLT,
ABGEMELDET.
Ereignisse / Zustände
Jeder Wechsel des Zustandes eines Teilnehmers führt zu einem Ereignis. Zu Beginn befindet sich der
Teilnehmer im Zustand ANGEMELDET. Wenn das Ereignis „Zahlung“ auftritt, dann wird der
Teilnehmer in den Zustand ANGEMELDETBEZAHLT gesetzt. Wenn danach das Ereignis „Abmeldung“
auftritt, dann wird der Teilnehmer in den Zustand ABGEMELDET überführt.
Repository
Das Repository soll zusätzlich zu den CRUD-Methoden zurückgeben können, welche Teilnehmer sich
im Zustand ANGEMELDETBEZAHLT befinden.
Aufgaben
1. Datenmodell: Entwickeln Sie für das beschriebene Datenmodell geeignete Java-Klassen.
Wählen Sie dabei ein geeignetes Vorgehen für Wiederverwendung. Erstellen Sie außerdem
ein geeignetes Package, in dem das Datenmodell platziert wird. Eine toString()-Methode
kann bei der späteren Ausgabe der Klasse zum einfachen Testen genutzt werden.
Implementieren Sie eine geeignete toString()-Methode.
2. ID-Erzeugung: Implementieren Sie gegebenenfalls notwendige Methoden in den Klassen, um
beispielsweise spezielle Anforderungen an die ID-Erzeugung zu erfüllen.
3. Ereignisse: Modellieren Sie die Ereignisse, welche im Datenmodell erforderlich sind.
4. REST: Erstellen Sie eine REST-Schnittstellen für mindestens eine der vorhandenen Klassen.
Die über Beziehungen möglicherweise verbundenen Klassen müssen bei der RESTSchnittstelle nicht einbezogen werden. Es sollen die folgenden Möglichkeiten bestehen:
• /klassenname - GET-Anfragen aller Objekte, die zu dieser Klasse gehören
• /klassenname/23 - GET-Anfrage eines Objektes mit einer speziellen ID. Hierbei steht 23
stellvertretend für eine ID und kann auch eine beliebige andere, vorhandene ID sein.
• /klassenname - POST-Anfrage für das Erstellen eines neuen Objektes der Klasse
• /klassenname/42 - DELETE-Anfrage für das Löschen des Objektes mit der übergebenen
ID. Hierbei steht 42 beispielhaft für die ID des zu löschenden Objektes.
5. Repository: Erstellen Sie geeignete Repositories für die implementierten Klassen. Nutzen Sie
das CRUD-Repository als Grundlage. Realisieren Sie außerdem die geforderte Abfrage aus der
vorherigen Beschreibung des Anwendungsfalles (Abschnitt Repository).
6. Testen: Erstellen Sie einen CommandLineRunner, um die Funktionsfähigkeit Ihres
Programmcodes zu zeigen. Im CommandLineRunner sollen die folgenden Funktionalitäten
Ihrer Implementierung demonstriert werden.
• Erzeugen Sie konkrete neue Objekte aller Klassen erzeugen und der damit
möglicherweise verbundenen Klassen.
• Speichern Sie die neu erzeugten Objekte in den jeweiligen Repositories.
• Zeigen Sie die Funktionalität von mindestens zwei verschiedenen Repositories, indem Sie
eine Anfrage an das Repository stellen und die Rückgabewerte über ein einfaches
System.out oder einen Logger ausgeben.
• Zeigen Sie die Funktionalität der geforderten zusätzlichen Methode des Repositories
(Abschnitt Repository).
7. Event-Persistenz: Konzipieren und implementieren Sie eine Möglichkeit, um die Events
dauerhaft zu speichern. Zeigen Sie die Funktionsfähigkeit der Event-Persistenz durch
Implementierung in einem weiteren Teil des CommandLineRunners.