JSF-/JPA-Klausurplaner

Hinweis: Falls Sie in dieser Aufgabenbeschreibung „steckenbleiben“ sollten, beginnen Sie zunächst mit dem alten Tutorial, um in das Vorgehen hineinzufinden. Es enthält viele interessante Hinweise.

1. Modellieren Sie das "Klausurplaner"-Klassendiagramm ohne Getters und Setters in ArgoUML (oder Ihrem Lieblings-CASE-Tool) und generieren Sie daraus Java-Klassen. Ändern Sie ggf. den Typ der Aggregationen in eine typisierte Kollection. Ich empfehle hierzu den Typ ArrayList<Klasse>.

2. Erstellen Sie in NetBeans (JEE Edition herunterladen!) ein neues Web-Projekt mit JSF-Framework und Hibernate-Framework und kopieren Sie die im vorangegangenen Punkt generierten Java-Klassen in ein Paket lg im src-Verzeichnis Ihres Java-Projekts. Erstellen Sie zuvor dieses Paket, falls erforderlich.

3. Bereiten Sie die Klassen für die automatisierte JPA-Persistenz gemäß des Vorlesungsinhalts Datenbanken (Dritter Teil) vor: Annotieren Sie jede Klasse mit @Entity. Ergänzen Sie das Interface java.io.Serializable. Fügen sie jeder Klasse eine Id-Property mit Annotation @Id hinzu, und wenn Sie möchten auch eine Generator-Annotation:

@Id
@GeneratedValue

private Long id; // oder den Getter annotieren, der Unterschied sollte Ihnen bekannt sein

Benutzen sie Refactor–>Encapsulate Fields, um die Getters und Setters zu erzeugen. Annotieren Sie entweder alle betroffenen Attribute oder alle Getters (wir haben in der Vorlesung den Unterschied besprochen) entsprechend der Kardinalitäten im Klassendiagramm. Bei bidirektionalen Assoziationen fügen Sie auf der einen Seite der Annotation eine mappedBy-Angabe hinzu. Spezifiziert wird der Name der Property auf der anderen Seite der Assoziation. In der Klausurplaner-Klasse Lehrveranstaltung gäbe es z.B.

@ManyToMany(mappedBy="lehrveranstaltung") // in Dozent verweist das Attribut hierher
private List<Dozent> dozenten;


4. Wenn sie alle Importe nachgezogen haben, dann werden Sie bei den @Entity-Annotationen zum Anlegen einer Persistence Unit aufgefordert. Legen sie im NetBeans Services-Tab eine neue Datenbank an. Dann folgen Sie dem Wizard für die Persistence Unit und ordnen die neue Datenbank dem Projekt zu. Das müssen Sie nur einmal machen (nicht einmal pro Klasse).

5. Nun beginnt die „Zauberei“: Klicken Sie rechts auf das Projekt und wählen Sie „New JSF-Pages from Entity Classes“. Wählen Sie alle Klassen für die Generierung aus und geben Sie den beiden Zielpaketen die Namen db und ui. Ihr Projekt wächst nun explosionsartig. ;-) Zeichnen Sie exemplarisch für eine Klasse die entstandene Dateistruktur.

6. Betrachten Sie die Datenbank im NetBeans Services-Tab: Diese sollte im Augenblick noch keine Tabellen enthalten.

7. Führen Sie das Projekt danach einmal im Browser aus. Sie sehen das Ergebnis einer CRUD-Generierung: Für jede Entity-Klasse gibt es jetzt XHTML-Seiten zum Erzeugen, Ändern und Löschen von Objekten: Create, Read, Update und Delete. Tragen sie mithilfe der Webseiten einige Spieldaten in die Datenbank ein.

8. Jetzt betrachten Sie noch einmal die Datenbank: Welche Tabellen sind entstanden? Erklären Sie in Form eines Protokolls, warum es zusätzliche Tabellen gibt, die keiner Entity entsprechen.

9. Damit Sie bei Folgeversuchen Ihre eingetippten Daten nicht verlieren, wählen Sie jetzt in der Persistence Unit (persistence.xml ) als Table-Creation-Strategy „None“ oder "Update". Dann werden die Tabellen nicht bei jeder Ausführung gelöscht und neu erzeugt. Wenn Sie allerdings Annotationen ändern, ändert sich das DB-Schema; dann müssen Sie wieder „Drop and Create“ einstellen.

10. Schauen Sie in die generierten Dateien hinein, und ergänzen Sie ihre Dateistruktur aus dem fünften Punkt mit Erläuterungen zum Zweck der Klassen.

11. Schreiben Sie einen Geschäftsablauf, welcher die Liste neuer Lehrveranstaltungen (z. B. aus den letzten 3 Tagen) erstellt, und binden sie die Liste in die Startseite ein (Verfahren frei wählbar). Ins Protokoll gehören neben der Vorgangs- und Fehlerbeschreibung eine annotierte Klasse, die kommentierte Dateistruktur und ein Screenshot der Datenbankstruktur.

12. Falls Sie sich persönlich herausgefordert fühlen, können Sie den 11. Punkt natürlich gern dennoch durchführen, obwohl er für die Abgabe des Meilensteins nicht erforderlich ist. Er zeigt Ihnen, ob Sie die "Magic" des CRUD-Wizards tatsächlich verstanden haben.

Zusammenfassung der abzuliefernden Ergebnisse (zusätzlich zum Live-Demo während der Meilenstein-Abgabe)

Zeichnen Sie exemplarisch für eine Klasse die entstandene Dateistruktur.
Erklären Sie in Form eines Protokolls, warum es zusätzliche Tabellen gibt, die keiner Entity entsprechen.
Ergänzen Sie ihre Dateistruktur mit Erläuterungen zum Zweck der entstandenen Klassen.
Entwickeln Sie einen Geschäftsablauf, welcher die Liste neuer Lehrveranstaltungen der (z.B. letzten drei) vergangenen Tage darstellt.
Binden Sie diese Liste in die Startseite ein.
Ins Protokoll gehört ferner:
- eine Vorgangs- und Fehlerbeschreibung derjenigen Vorgänge, die sich nicht ohnehin direkt aus dem bearbeiteten Tutorial ergeben
- eine annotierte Klasse
- ein Screenshot der Datenbankstruktur

Viel Spaß!

IMPRESSUM | DATENSCHUTZ | RECHTLICHE HINWEISE
Copyright © 2019 ziemer's informatik, Dipl.-Inform. Thomas Ziemer. Alle Rechte vorbehalten.