Zend Framework und Liquibase

Wer ein größeres Projekt inklusive verschiedenen Lebenszyklen realisieren will, der muß sich auch um das Datenbankmanagement kümmern. Das Database Change Management Tool Liquibase bietet sich dafür an und ergänzt die fehlende Funktion des Zend-Frameworks. Ich möchte hier beschreiben, wie dies in ein Projekt integriert werden kann. Ich möchte hierbei auf den bereits veröffentlichen Artikel „Das Zend Framework – Ein Startversuch“ aufbauen. Desweiteren habe ich eine grobe Beschreibung der Funktionalität von Liquibase in meinem Artikel „Datenbankmigration mit Liquibase“ vorgenommen.

Da Liquibase in Java programmiert ist, wird auf dem Server eine JVM benötigt. Dies ist Grundvoraussetzung und für den Betrieb dieses Beispiels notwendig. Außerdem wird eine korrekte Ant-Installation voraussgesetzt. Dies ist habe ich für Windows 7 bereits in meinem Artikel „Ant unter Windows 7 installieren“ beschrieben.

Nach dem Download von Liquibase erstellen wir einen Ordner „liquibase“ im library Verzeichnisses der Zend-Applikation. Dorthin entpacken wir den Download. Außerdem erstellen wir im Wurzelverzeichnis der Applikation einen Ordner db, in dem wir die Liquibase XML-Anweisungen speichern werden, die uns als Einstiegspunkt für unser späteres Ant-Script dient. Innerhalb des Ordners erstellen wir noch einen weiteren mit der Bezeichnung „migrations“. Dort wandern die eigentlichen Änderungsanweisungen rein.

Nun benötigen wir einen passenden JDBC-Connector für unsere Datenbank. Da ich eine MySQL-Datenbank betreibe benötige auch einen MySQL-Connector (mit dieser Software kann man über Java eine Verbindung zu einer MySQL-Datenbank aufbauen). Die Dateien kopiere ich ebenfalls in das Verzeichnis library. Damit das ganze etwas klarer ist, gibts dazu natürlich ein Screenshot ;-)

Nun können wir bereits ein kleines Ant-Skript (ebenfalls im Wurzelverzeichnis) erstellen, über das wir später die Änderungen an der Datenbank durchführen können:

<?xml version="1.0" encoding="UTF-8"?>
<project name="liquibase-test">
    <description>
        Zend Framework und Liquibase
  </description>
    
  <!-- prepare -->
    <target name="prepare">
      <path id="library.classpath">
          <fileset dir="library/mysql">
              <include name="*.jar" />
          </fileset>
          <fileset dir="library/liquibase">
        <include name="*.jar" />
      </fileset>
      </path>
        
        <taskdef resource="liquibasetasks.properties">
      <classpath refid="library.classpath"/>
    </taskdef>
      
      <!-- set global properties for this build -->
      <property name="changelog.file" location="db/changelog.xml" />
      <property name="base.path" location="." />
    </target>
    
    <!-- properties -->
    <target name="properties_development" depends="prepare">
        <property name="database.driver" value="com.mysql.jdbc.Driver" />
      <property name="database.url" value="jdbc:mysql://localhost/test" />
      <property name="database.user" value="root" />
      <property name="database.password" value="" />
    </target>
    
    <!-- development -->
    <target name="development" depends="properties_development">
        <updateDatabase 
            changeLogFile="${changelog.file}" 
            driver="${database.driver}" 
            url="${database.url}" 
            username="${database.user}" 
            password="${database.password}" 
            classpathref="library.classpath" />
    </target>
</project>

Schnell noch den Einstiegspunkt (changelog.xml) im db-Verzeichnis erstellen und darin den Pfad zu den allgemeine Änderungsanweisungen definieren:

<?xml version="1.0" encoding="UTF-8"?>
 
<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
 
  <includeAll path="db/migrations" />
 
</databaseChangeLog>

Ab jetzt können wir im Verzeichnis db/migrations die Änderungen an der Datenbank nach und nach implementieren. Wir müssen lediglich eine Liquidbase Anweisung erstellen. Ich bevorzuge eine Benennung mit laufenden Nummern z. B. 001.setup.xml, 002.data.xml, …

Zum Testen habe ich folgendes Script hinterlegt:

<?xml version="1.0" encoding="UTF-8"?>
 
<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
         http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd">
 
  <changeSet id="1" author="tobias.seckinger">
    <createTable tableName="test1">
      <column name="id" type="int">
        <constraints primaryKey="true" nullable="false" />
      </column>
      <column name="name" type="varchar(50)">
        <constraints nullable="false" />
      </column>
    </createTable>
  </changeSet>
 
</databaseChangeLog>

Wenn ich nun in der Konsole (bei mir unter Windows, aber prinzipiell auch unter Linux möglich) in das Wurzelverzeichnis des Projekts wechsle, kann ich mit dem einfachen Befehl „ant development“ die Ausführung der Skripte starten:

Fazit

Die beschriebenen Tools und die skizzierte Struktur ermöglicht ein übersichtliche, professionelle Verwaltung und Entwicklung einer Datenbankstruktur. Das Ant-Skript kann auf mehrere Entwicklungsumgebungen (development, testing, production) erweitert werden und ergänzt somit ideal das fehlende Database-Management des Zend-Frameworks. Diese Lösung ist sicherlich nicht für jedes Hosting-Paket verfügbar, da unter anderem eine Ant-Installation und eine JVM vorhanden sein muß.

 

 

 

Kommentar verfassen