connectionManager

Zweck des connectionManagers ist es, eine Konvention zu definieren, wie die Konfiguration und Implementierung einer Datenbank-Zugriffsschnittstelle gestaltet sein soll. Idealerweise ermöglicht diese Vorgehensweise einen einfachen Austausch einer Treiberschicht gegen eine andere um von einer Datenbank zur anderen zu wechseln.

Trotz, dass dieser Ansatz hinsichtlich der Unterschiede zwischen Datenbanken sehr ambitioniert ist, vereinheitlicht er dennoch die API und schafft ein gemeinsames Verständnis für den Zugriff der Datenschicht einer Applikation auf die Datenbank-Treiberschicht.


1. Konfiguration

Der connectionManager fungiert als Factory für konkrete Implementierungen eines Datenbanktreibers. Um den gewünschte Treiber laden zu können, muss dieser zunächst konfiguriert werden. Die geschieht in der Konfigurationsdatei
Code
/config/core/database/{CONTEXT}/{ENVIRONMENT}_connections.ini
Details zu Konfigurationsdateien können dem Kapitel Konfiguration entnommen werden. Die Konfigurationsdatei enthält je eine Sektion für einen Treiber:
APF-Konfiguration
[Sektionsname] DB.Host = "" DB.User = "" DB.Pass = "" DB.Name = "" [DB.DebugMode = "true|false"]
Der Sektionsname dient als Referenz für die Erstellung der Treiber-Instanz, DB.Host beinhaltet den Hostnamen des Datenbank-Server, DB.User und DB.Pass die Authentifizierungsdaten und DB.Name benennt die zu verwendende Datenbank. DB.Type dient zur Definition des zur verwendenen Treibers und DB.DebugMode entscheidet, ob der Debug-Modus des Treibers aktiviert werden soll oder nicht.
Der Debug-Modus kann dazu genutzt werden, das aktuell ausgeführte Statement auszugeben. Alternativ dazu kann der optionale Parameter $logStatement der Methoden executeStatement() und executeTextStatement() genutzt werden um das aktuell ausgeführte Statement in eine Log-Datei zu schreiben. Details zur Funktion können der API-Dokumentation entnommen werden.

2. Anwendung

Um den connectionManager einsetzen zu können muss dieser zunächst per
PHP-Code
import('core::database','connectionManager');
eingebunden werden. Anschließend kann per
PHP-Code
$cM = &$this->__getServiceObject('core::database','connectionManager'); $DBTreiber = &$cM->getConnection('Sektionsname');
eins Instanz eines Datenbank-Treibers erzeugt werden.


3. Erweiterung

Gemäß der Definition der abstrakten Klasse AbstractDatabaseHandler können weitere Datenbank-Abstraktions-Klassen hinzugefügt werden. Um diese mit dem connectionManager verwenden zu können, müssen diese im Namespace core::database abgelegt werden und von der Klasse AbstractDatabaseHandler ableiten.


4. Vorhandene Treiberschichten

Das Framework liefert zwei Treiberschichten mit:
  • MySQLx: MySQL-Treiberschicht. Setzt auf die mysql_*-Funktionen auf
  • SQLite: SQLite-Treiberschicht. Setzt auf die sqlite_*-Funktionen. Hier ist PHP > 5.0.0 notwendig!

4.1. MySQL-Treiberschicht

Um eine Instanz des MySQL-Treibers erstellen zu können, ist folgende Konfiguration notwendig:
APF-Konfiguration
[MySQL] DB.Host = "host" DB.User = "user" DB.Pass = "pass" DB.Name = "name" DB.Type = "MySQLx" [DB.DebugMode = "true|false"] [DB.Charset = ""] [DB.Collation = ""]
Die Parameter DB.Charset und DB.Collation dienen dazu, den Zeichensatz und die Zeichenbehandlung der MySQL-Verbindung zu definieren. Mit dem Parameter DB.Charset werden die MySQL-Variablen
  • character_set_client
  • character_set_connection
  • character_set_results
gesetzt, DB.Collation beeinflusst
  • collation_connection
  • collation_database
Die beiden Parameter sind optional und können bei Bedarf auch wechselseitig gesetzt werden, das Vorhandensein beider ist nicht erforderlich.
Details zu den verfügbaren Werten für die Konfiguration findet sich in der MySQL-Dokumentation im Kapitel Connection Character Sets and Collations (MySQL 5.0).
Anschließend kann die Treiber-Instanz mit den Code-Zeilen
PHP-Code
$cM = &$this->__getServiceObject('core::database','connectionManager'); $MySQL = &$cM->getConnection('MySQL');
erzeugt werden. Die Treiberschicht wird aus Performance-Gründen dabei immer als Singleton-Objekt erstellt.


4.2. SQLite-Treiberschicht

Eine SQLite Treiberschicht kann mit dem Konfigurationseintrag
APF-Konfiguration
[SQLite] DB.Name = "/path/to/my/database.sqlite" DB.Type = "SQLite" DB.DebugMode = "true|false"
und den Code-Zeilen
PHP-Code
$cM = &$this->__getServiceObject('core::database','connectionManager'); $SQLite = &$cM->getConnection('SQLite');
instanziiert werden. Bitte beachten Sie, dass im Fall von SQLite Host, User und Passwort nicht konfiguriert werden müssen, da SQLite eine integrierte Datenbank-Engine ist.


Kommentare

Bitte geben Sie Ihren Kommentar hier ein. Füllen Sie alle mit * gekennzeichneten Felder vollständig und korrekt aus. Um zum Artikel zurückzukehren klicken sie bitte hier. Zur Formatierung des Textes können folgende BBCode-ähnliche die Zeichen verwendet werden:
  • [b]..[/b]: fett
  • [i]..[/i]: kursiv
  • [u]..[/u]: unterstrichen
Hinweis: Formatierungszeichen in Name und E-Mail-Adresse werden nicht akzeptiert.
Name:*
E-Mail:*

Kommentar:


Bestätigungscode:*

CAPTCHA