Es gibt grundsätzlich 2 Möglichkeiten mit Grails eine Datenbankverbindung (Datasource) zu konfigurieren.
- in den Dateien DevelopmentDataSource.groovy, ProductionDataSource.groovy und TestDataSource.groovy
im Verzeichnisgrails-appconf
- als JNDI Datasource in der Datei
resources.xml
von Spring
Für die Entwicklung nutze ich gern die MySql Datenbank, die wenn man sie über den xampp installiert, in einer perfekt abgestimmten Umgebung daher kommt, leicht zu installieren ist und über phpMyAdmin sehr gut administriert werden kann. Für unser Benutzermanagemenent habe ich dort die Datenbank grails_usermanagement
angelegt. Die Konfiguration in der Datei DevelopmentDataSource.groovy
, sieht dafür so aus:
class DevelopmentDataSource { boolean pooling = true String dbCreate = "update" // one of 'create', 'create-drop','update' String url = "jdbc:mysql://localhost:3306/grails_usermanagement?autoReconnect=true" String driverClassName = "com.mysql.jdbc.Driver" String username = "root" String password = "" }
Der Parameter pooling
besagt, ob ein Connection Pool für die Datenbankverbindungen genutzt werden soll, oder nicht. Standardmäßig wird die Connect Pool Implementierung aus dem Apache Commons Projekt verwendet. Der Parameter dbCreate
besagt, ob die Datenbank-Struktur mit generiert werden soll. Für die mitgelieferte „In Memory – Datenbank“ Hypersonic ist standardmäßig der Wert auf „create-drop“ gesetzt. D.h., dass die Datenbank selbst bei jedem Testlauf entfernt und wieder erstellt wird. Manuell erstellte Datenbanken, wie unsere MySql Datenbank sollten den Wert „update“ haben. Für die „Production Datasource“ sollte dieser Parameter gänzlich auskommentiert werden.
Um die Konfiguration zu testen muss nur noch der JDBC Treiber (in unserem Fall die Datei mysql-connector-java-3.0.15-ga-bin.jar
) in das Verzeichnis lib
kopiert werden und die Applikation selbst mit grails run-app
gestartet werden. Standardmäßig wird mit diesem Kommando die Development Datenbankverbindung genutzt, man kann aber auch als weiteren Parameter eine spezielle Datasource angeben:
grails dev run-app grails prod run-app grails test run-app
Das gleiche gilt für das Kommando grails war
, mit dem die Webapplikation in ein Webarchiv (*.war Datei) verpackt wird.
Andere Parameter innerhalb der Konfiguration sind z.B. logSql
und dialect
, mit denen das Logging von SQL Befehlen ein- und ausgeschaltet bzw. ein spezieller Satz an SQL Befehlen für die Hibernate Konfiguration angegeben werden kann.
def logSql = true def dialect = MySQLDialect.class
Als letztes bleibt noch die Konfiguration einer JNDI Datasource innerhalb von Spring, die in der Datei springresources.xml
vorgenommen wird. Eine JNDI Datasource muss im jeweiligen Servlet Container (z.B. Tomcat) oder Application Server (z.B. Jboss) deklariert werden bevor sie in Spring über den Namen wie folgt angesprochen werden kann.
Eine gute Anleitung für die Definition einer JNDI Datasource innerhalb des Tomcats bietet die Tomcat Dokumentation.
Das nächste mal werde ich mich mit der Konfiguration von 1:n bzw. n:m Beziehungen zw. Objekten befassen, denn unsere Benutzer sollen auch in Gruppen zusammengefasst werden können.
Update: die aktuelle Version des Beitrags habe ich zur besseren Pflegbarkeit als Teil eines kleinen Tutorials zu Grails ausgelagert und direkt in der rechten Seitenleiste verlinkt.