135 Copyright 1994-1997 by Axel T. Schreiner. All Rights Reserved. 21 Zugriff auf eine Datenbank Das Enterprise Objects Framework Das klassische Beispiel für Client/Server-Programmierung bilden Datenbanken: Der Server verwaltet die Daten und schlichtet Konflikte beim Zugriff, die Klienten bieten Oberflächen und manipulieren die Daten durch Verhandeln mit dem Server. Zur einfachen Programmierung der Klienten-Oberflächen benötigt man Klassen zum Zugriff auf Datenbanken, Tabellen, Attribute und Records — dies liefert das Enterprise Objects Framework (EOF). Adaptor Model Entity Attribut Record Zugriff auf eine Datenbank Beschreibung der Tabellen für die Applikation Tabelle im Model Spalte einer Entity, Feld in einem Datensatz Zeile einer Entity, Datensatz Die Adaptoren sind datenbank-spezifisch und austauschbar. Sie isolieren die Applikation von der Datenbank. FlatFile-Adaptor FlatFile verwaltet für Testzwecke eine Datenbank als Katalog im Dateisystem, Tabellen als Dateien im Katalog und Records als Zeilen. Es handelt sich dabei nicht um Zugriff auf einen Server. Als externe Datentypen sind nur Number, String, Data und Date erlaubt. {21/telbook/telnumbers} name number axel 2483 bischof 2534 gremeyer gerda 2480 jutta 2491 picture 2482 {} Die erste Zeile der Datei benennt die Attribute, als Trenner dienen zum Beispiel tab-Zeichen. 136 Zugriff auf eine Datenbank — tel Mit dem ProjectBuilder erzeugt man eine neue EOApplication mit Namen tel. Dabei wird ein ‘‘Wizard’’ ausgelöst, der die Applikation mit einem typischen Fenster vorbereitet: Dazu wird eine Datenbank 137 und zum Beispiel FlatFile als Adaptor gewählt: Für FlatFile ist der gewählte Katalog die Datenbank; mindestens die Titelzeilen der Tabellen sollten existieren und wie beschrieben getrennt sein. Dann wählt man eine Entity, die im Fenster gezeigt werden soll: 138 Die Tabelle muß einen Primärschlüssel besitzen: Da ein Anfragebereich im Fenster angefordert wurde, müssen die Attribute für diesen Bereich ausgesucht werden: 139 Da eine Tabelle im Fenster gezeigt wird, müssen Attribute für die Tabellenspalten festgelegt werden: Das Fenster enthält schließlich noch einen Bereich, in dem Attribute dargestellt und geändert werden: Damit existiert das Projekt. Wenn es übersetzt und ausgeführt wird, kann man schon mit Namen und Nummern umgehen. 140 Das Ziel ist allerdings, zu Namen und Nummern auch Bilder zu verwalten sowie die Nummern als Zahlen und nicht als Strings zu speichern. Im ProjectBuilder wählt man unter Other Resources die Beschreibung der Datenbank tel.eomodeld und öffnet sie durch Doppel-Click. Im EOModeler ändert man die Beschreibung der Attribute ab, indem man durch Doppel-Click auf eine Entity öffnet 141 und mit Ein Attribut muß als Primärschlüssel die Attribute bearbeitet: vereinbart werden. Ist als Internal Data Type nur Custom angegeben, muß man als Factory Method eine Klassenmethode angeben, die aus dem Init Argument, wie etwa NSData, ein Objekt der gewünschten Class erzeugen kann, und als Conversion Method eine Methode, die das Objekt dann wieder als NSData repräsentiert. Die vordefinierten Methoden stützen sich auf die Persistenz der Klassen. 142 Mit vorhandenen Daten sehen: Mit kann man für die gewählten Attribute die wird das Model abgespeichert. 143 Eine Oberfläche mit Bildern Mit kann man im InterfaceBuilder aus dem Katalog /NextDeveloper/Palettes/EOPalette.palette eine neue Palette hinzufügen. Die vorgefertigte Applikation verwendet zwei .nib-Dateien. MainDocument.nib enthält die Darstellung der Tabelle, zu der man noch eine NSImageView hinzufügen sollte: 144 Von der NSImageView richtet man eine EOControlAssoc zur EODisplayGroup ein: Damit kann man schon im InterfaceBuilder Einträge in der Datenbank vornehmen. NB: Der FlatFile-Adaptor scheint instabil zu sein. 145 Sybase Limited Server Aus den Anfangszeiten von NeXTSTEP (2.0) stammt der Sybase Limited Server für m68k. Ein Sybase Adaptor ist auch für EOF 2.x vorhanden. Server installieren Mit Installer installiert man nacheinander das DB-Library- und das Server-Paket. Als root führt man Folgendes aus: # cd /usr/sybase # mkdir database # SYBASE=/usr/sybase; export SYBASE # install/startserver -I Type ’startserver -h’ for help. startserver: master database device /usr/sybase/database/d_master.sdb is not present or not writable. Do you want to create it (y/n)? y Enter size in megabytes(16Mb): startserver: building master device, please wait. startserver: buildmaster completed. startserver: starting server. startserver: server started. startserver: waiting for recovery to complete. startserver: installing system services, please wait. startserver: system services installed. startserver: server SYBASE started. Mit einem einfachen Dialog wird der Server eingerichtet und gestartet. Mit # bin/isql -SSYBASE -Usa -P 1> use master 2> go 1> sp_password null,geheim,sa 2> go Password changed. (return status = 0) 1> sp_addlogin owner,secret 2> go New login created. (return status = 0) 1> sp_addlogin guest,guest 2> go New login created. (return status = 0) 1> shutdown 2> go Server SHUTDOWN by request. The SQL Server is terminating this process. DB-LIBRARY error: Unexpected EOF from SQL Server. Damit erhält der Verwalter sa das Paßwort geheim und es gibt einen Benutzer owner mit Paßwort secret und guest mit Paßwort guest. Der Server wird gestoppt. 146 Damit der Server auch von anderen Systemen aus erreichbar ist, muß man die Datei /usr/sybase/interfaces editieren: # SYBASE query tcp next-ether localhost 1024 master tcp next-ether localhost 1024 console tcp next-ether localhost 1025 sollte der tatsächliche Name des Server-Systems sein. Die Datei muß dann auf den Klienten-Systemen ebenfalls existieren. Anschließend startet man den Server mit startserver erneut. localhost Datenbank telbook und Tabelle telnumbers einrichten Als normaler Benutzer führt man folgendes aus: $ /usr/sybase/bin/isql -SSYBASE -Usa -Pgeheim << ’EOF’ use master go create database telbook on default = 2 go use telbook go create table telnumbers (name varchar(10), number int, picture image NULL) go sp_addalias owner,dbo go sp_adduser guest go grant select,update,insert on telnumbers to guest go insert telnumbers (name, number) values ("axel", 2483) ... go select name, number from telnumbers go quit EOF CREATE DATABASE: allocating 1024 pages on disk ’master’ Alias user added. (return status = 0) New user added. (return status = 0) (1 row affected) name number ---------- ----------axel 2483 (1 rows affected) Damit kann owner die Datenbank telbook manipulieren, guest mit Passwort guest kann in der Tabelle telnumbers Einfügen, Löschen und Auswählen. 147 Wenn der InterfaceBuilder oder eine Applikation auf eine Sybase-Datenbank zugreifen wollen, erscheint folgendes Panel: NB: Löschen funktioniert in tel offenbar nicht. 148 leere Seite