Praktikum aus Softwareentwicklung 2 SS 2010, LVA 365.009 Abgabetermin: 27.4.2010 Erreichbare Punkte: 24 Übung 4 – Datenbankzugriff mit JDBC Aufgabe: Jukebox 24 Punkte Eine Mediendatenbank ist mit folgendem Schema gespeichert. Erzeugen Sie die Tabellen in einem RDBMS (siehe Datei jukebox.sql in Beispiele04.zip): create table album ( id integer identity primary key, name varchar not null, interpret varchar, jahr integer ); create table titel ( id integer identity primary key, name varchar not null, minuten integer, gespielt datetime, albumId integer, foreign key (albumId) references album ); create table wiedergabeliste ( id integer identity primary key, name varchar not null, version integer not null ); create table wliste_titel ( wId integer not titelId integer not foreign key (wId) foreign key (titelId) ); null, null, references wiedergabeliste (id), references titel (id) Implementieren Sie eine geeignete Schnittstelle für Datenzugriffe und -Änderungen, verwenden Sie dazu den DAO Pattern in einer vereinfachten Variante (Java Beans + DAO, keine Factory…): http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html Das DAO soll mindestens folgende Operationen unterstützen: public class JukeBoxDAO { // Album anlegen und Titel zu Album hinzufügen public void addAlbum(Album a); public void addTitel(Album a, Collection<Titel> titel); // Wiedergabeliste anlegen und Titel zu Liste hinzufügen public void addWiedergabeliste(Wiedergabeliste wl); public void addTitel(Wiedergabeliste wl, Collection<Titel> titel); public void addTitel(Wiedergabeliste wl, Album a); // Name der Wiedergabeliste ändern public void rename(Wiedergabeliste wl, String newName) throws ConcurrentUpdateException; Seite 1/2 public Playlist getPlaylist(Wiedergabeliste wl); } public class Playlist { private Collection<Titel> titelListe; private Map<Titel, Album> titel2Album; // album kann auch null sein … } Implementieren Sie für die Methode rename der Wiedergabeliste optimistisches Locking. Das heißt, für den Fall einer gleichzeitigen Änderung durch einen zweiten Benutzer, soll eine ConcurrentUpdateException geworfen werden. Verwenden Sie dazu die Spalte version der Tabelle wiedergabeliste. Dazu muss bei jedem UPDATE der entsprechenden Wiedergabeliste der Versionszähler (Spalte version) geprüft werden (in der WHERE-Bedingung) und um 1 erhöht werden. Simulieren Sie diesen Fall mit einem Testprogramm. Seite 2/2