Persistenz Ralf Gitzel ralf_gitzel@hotmail.de 1
Themenübersicht Ralf Gitzel ralf_gitzel@hotmail.de 2
Übersicht Grundkonzepte Entity Beans Meine erste Entity Entity-Manager Lernziele Übungsaufgabe 3
Grundkonzepte Entities Ralf Gitzel ralf_gitzel@hotmail.de 4
Konzept der Persistenz Persistente Daten sind auch nach Beenden des Programms vorhanden. Sie können bei erneutem Aufruf des Programms wieder rekonstruiert werden. Klassisches Werkzeug für Persistenz ist die relationale Datenbank. 5
EJB Architektur Request Response Web Container View & Controller Servlet EJB Container DB Persistence Provider Model EJB 6
Umsetzung des Datenmodells in Entities EJB 3 Java Persistence API (JPA) Vorraussetzungen: Markierung der Domänenobjekte Eindeutige Identifizierung jedes Objekts (Schlüssel) Definition der Objektbeziehungen Definition von Regeln zum Speichern in/laden aus einer Datenbank 7
Vom Java Objekt zur Entity Java Objekt Annotationen Entity Annotationen Entity mit ORM 8
Meine erste Entity Ralf Gitzel ralf_gitzel@hotmail.de 9
Hinweise Anweisungen zum Konfigurieren der Datenbank (inkl. Anlegen der Tabellen) mit Glassfish finden sich im Anhang In unseren Beispielen gehen wir immer davon aus, dass die Datenbanktabellen bereits existieren 10
Entity Bean Markierung als Entity Eindeutiger Identifikator (d.h. Schlüssel) 11
Eigenschaften einer Entity Muss einen public-konstruktor ohne Parameter haben Kann von anderen Klassen erben Kann abstrakt sein Referenzierte Klassen müssen auch Entities oder serialisierbar sein Anm.: Ist gar kein Konstruktor definiert, so gibt es automatisch einen Public-Konstruktor ohne Parameter. 12
Markierungen für die Variablen @Id: Der Primärschlüssel für dieses Objekt, d.h. der Identifikator @Transient: Wird nicht mit abgespeichert, ist also beim Laden 0, null etc. 13
Datenbanktabelle: Personendaten Tabelle mit Personendaten Nachname Eintrag (Schlüssel) Noch offen: Wie kann ich die Entity auf die Datenbank abbilden? 14
Abbildung auf Datenbank 15
@Table Namen der Tabelle angeben Verwendet man diese Annotation nicht, so wird die Tabelle mit dem gleichen Namen wie die Entity verwendet Optionale Parameter: catalogue, schema, uniqueconstraints 16
@Column name: Name der Spalte in der angegebenen Tabelle Anmerkung: Optionale Annotation - Wenn diese Angabe fehlt wird der Feldname als Spaltenname genommen. 17
Zusammenfassung Entities Entity Id Column Table Klasse Instanzvariable 1 = eindeutiger Identifikator Column Instanzvariable 2 Column Instanzvariable n Entity Annotationen ORM Annotationen 18
EntityManager Nicht klausurrelevant! Ralf Gitzel ralf_gitzel@hotmail.de 19
Rolle des EntityManagers Ein Objekt, das den Zugriff auf die Datenbank erlaubt Hier betrachten wir nur den einfachsten Fall der Anwendung 20
Beispiel Personendaten sollen gespeichert und wieder geladen werden! 21
Datenbank 22
Schritt 1: Entity Manager erzeugen Wird durch Dependency Injection in die SessionBean- Klasse eingefügt 23
Persistence XML <?xml version="1.0" encoding="utf-8"?> <persistence> <persistence-unit name="test"> <jta-data-source>jdbc/sample2</jta-data-source> <properties> </properties> </persistence-unit> </persistence> Name der Datenbank (s. Anhang) unitname Liegt im Verzeichnis META-INF 24
Schritt 2: Daten schreiben Objekt aus Servlet Aufruf des Entity Managers Datei: PersonenQuelle.java (eine Session Bean) 25
Schritt 3a: Daten wieder lesen Daten aus der Tabelle auslesen über Primärschlüssel Datei: PersonenQuelle.java (eine Session Bean) 26
Schritt 3b: Daten wieder lesen Komplexere Abfragen sind möglich Datei: PersonenQuelle.java (eine Session Bean) 27
Gesamtes Beispiel Datei: PersonenQuelle.java (eine Session Bean) 28
Lernziele Ralf Gitzel ralf_gitzel@hotmail.de 29
Lernziele Wie mache ich aus einer Javaklasse eine Entity, wenn ich die Tabelle und die Spaltennamen kenne? Nicht relevant: Enum, Persistence Provider Muss nicht programmiert werden können 30
Übungsaufgabe Ralf Gitzel ralf_gitzel@hotmail.de 31
Aufgabenstellung: Selbstbewertung Wichtiger Hinweis: Diese Aufgabe hat nichts mit Persistenz und EJBs zu tun, sondern nur mit Servlets, dem Hauptthema der Klausur(!) Aufgabe ist nicht ganz einfach, aber eine gute Übung zum Verständnis Hinweis zur Lösung: Man kann bei <c:foreach> auch nur mit begin und end arbeiten (d.h. ohne Liste)! 32
Aufgabenstellung Anwendung erlaubt Eingabe von Kategorien und Punkten in den Kategorien Ergebnis wird als Grafik dargestellt 33
Eingabe 34
Ausgabe 35
Leichtere Variante Geben Sie die Bewertungspunkte als Zahl aus Nach der Zahl soll ein grünes Quadrat erscheinen, wenn Sie 8+ ist, sonst ein weißes 36
Hilfsmittel Grafikelemente: BarElement_green.jpg BarElement_empty.jpg Klasse: Bewertung.java EingabeSeite: StartPage.jsp 37
Musterlösung Grafik setzt sich aus den Blöcken grün und weiß zusammen foreach einsetzen um die Blöcke zu zeichnen (zwei foreach-scheifen) Was soll man hier lernen: Man kann auch den Namen einer geladenen Grafik dynamisch ändern 38