6.6 Erweiterte Möglichkeiten 

Neben den bereits gezeigten Möglichkeiten des Query-Builders unterstützt die Database-Komponente noch weitere Features, die wir Ihnen nicht im Zusammenhang mit dem GP-Blog vorgestellt haben. Dies wollen wir an dieser Stelle nachholen.
6.6.1 Lazy-Initialization 

Auch die Database-Komponente unterstützt Lazy-Initialization, die Initialisierung und Konfiguration beim ersten wirklichen Gebrauch (siehe Abschnitt 2.3.4, »Lazy-Initialization«). Falls mehrere verschiedene Datenbank-Handler verwendet werden, wird darüber lediglich eine Verbindung zu denjenigen Datenbanken aufgebaut, die tatsächlich benötigt werden.
class customLazyDatabaseConfiguration
{
public static function configureObject( $instance )
{
switch ( $instance )
{
case false: // Default instance
return ezcDbFactory::create(
'mysql://user:password@host/database'
);
case 'sqlite':
return ezcDbFactory::create(
'sqlite://:memory:'
);
}
}
}Listing 6.20 Lazy Initialization der Database-Komponente
Die Klasse customLazyDatabaseConfiguration übernimmt die Konfiguration der Datenbankverbindung, sobald diese benötigt wird. Dazu bekommt sie den Namen der angefragten Instanz übergeben, false im Falle der Standardinstanz. Für jede Instanz kann die Methode configureObject() dann einen Handler zurückgeben, der für diese verwendet wird.
ezcBaseInit::setCallback(
'ezcInitDatabaseInstance',
'customLazyDatabaseConfiguration'
);Mit der Methode ezcBaseInit::setCallback() wird für das Schlüsselwort, das die Database-Komponente identifiziert, die Klasse ezcInitDatabaseInstance assoziiert, die für die Konfiguration verwendet werden soll.
// Create and configure default mysql connection $db = ezcDbInstance::get(); // Create and configure additional sqlite connection $sb = ezcDbInstance::get( 'sqlite' );
Listing 6.21 Verwendung von Lazy Initialization
Wenn in der Applikation zum ersten Mal eine Instanz der Datenbankverbindungen verwendet werden soll, um Abfragen an diese Datenbank auszuführen, wird diese Instanz automatisch initialisiert und konfiguriert. Sollte keine Datenbankverbindung gebraucht werden, sparen Sie sich so den sonst notwendigen Aufwand hinsichtlich Speicherverbrauch und Prozessorlast.
6.6.2 Ein anderes RDBMS verwenden 

Um Unterstützung für ein RDBMS in Database zu integrieren, das bislang nicht unterstützt wird, gibt es eine Liste von Schritten, die gegangen werden müssen.
| 1. | SVN checkout Zunächst benötigen Sie für die Entwicklung eines eigenen Handlers einen SVN-Checkout von eZ Components. Wie Sie diesen erhalten, wurde bereits in Abschnitt 2.1.4, »SVN«, beschrieben. |
| 2. | Neuer Handler Jede neue RDBMS-Anbindung wird durch einen eigenen ezcDbHandlerezcDbHandler repräsentiert. Der erste Schritt dahin ist, eine solche Basisklasse für das neue RDBMS zu erzeugen. Die Methoden der SQL-Abstraktion, die für andere RDBMS teilweise überschrieben werden, sollten Sie erst überschreiben, wenn Sie Probleme mit diesem Query-Typ festzustellen. Ansonsten sollte die Basisimplementierung völlig ausreichen. |
| 3. | Testen Wenn der neue Handler einmal implementiert ist, können Sie die eZ Components-Tests dafür laufen lassen. Der in den Tests verwendete DSN kann über einen Kommandozeilenparameter für den Testrunner spezifiziert werden. Falls einige der Test fehlschlagen, funktionieren die Default-Implementierungen mit dem gewünschten RDBMS nicht. Die entsprechenden Methoden in der SQL-Abstraktion müssen dann von Ihnen durch Überschreiben in ihrer Funktion angepasst werden. |
Dieser Abschnitt zeigt, dass die Probleme bei der Anbindung von neuen RDBMS in den Abweichungen der Datenbanksysteme von den Standards liegen, und nur diese Abweichungen durch spezielle Implementierungen ausgeglichen werden müssen. Wollen Sie dagegen ein standardkonformes RDBMS anbinden, haben Sie also weniger Mühe.




Ihre Meinung






