SKLTP TAK - Grails och databaser

Denna sida gäller inte för senaste versionen av TAK

Databasinställningar hänger tätt ihop med Grailsmiljöer, se även SKLTP TAK - Utveckling i Grails (TAK < 3.0)

Normalt används en H2 in-memory databas med testdata i Grails dev- och test-miljöer och en MySql-databas i prod, men det går att ändra vid behov.

H2-databas

När man startar TAK med H2-databas så finns möjlighet att visa / ändra testdata genom ett webinterface som kan nås via http://localhost:8080/tak-web/dbconsole.

(Tänk på att data cachas i TAK och att ändringar i databasen kanske inte slår igenom direkt på det sätt man tänkt sig.)

Sätta upp lokal MySQL

  • Installera en "gammal" version eller se till att välja bakåtkompatibla inställningar, fungerar troligen inte med senaste version och defaultinställningar.

  • Skapa en ny TAK-databas enlig anvisningar på SKLTP TAK - Installationsmanual | SKLTPTAK Installationsmanual SkapaMySQL databasochanpassakonfiguration

  • För att fylla på testdata kan man använda init.sql och testdata.sql som normalt används för att fylla på H2-databasen med testdata. I testdata.sql behövs en tillfällig ändring p.g.a. annan syntax för att läsa in blob-data från fil, se kommentar i filen.

  • Jag kör TAK under WSL (Ubuntu) och MySql på Windowshosten. Gör man på det sättet behöver man tänka på att inte ansluta mot "localhost" utan rätt IP-adress. (Hittas t.ex. genom att köra "ipconfig" och leta rätt på "Ethernet adapter vEthernet (WSL)".) Man måste även tänka på att inte begränsa databasanvändaren till localhost. (T.ex. genom CREATE USER 'db_user'@'%' IDENTIFIED BY 'db_password'; istället för db_user@localhost)

Konfigurationsinställningar görs motsvarande som för prod-miljön i TAK.

Dependencies

Om man försöker köra lokalt mot en MySql-databas så kommer det att saknas klasser i runtime som normalt hittas av Tomcat på servern. För att komma runt det kan man tillfälligt lägga till i pom.xml:
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>

Sätta upp lokal SQL Server

  • Installera Sql Server Express med SQL Server Management Studio

  • Skapa en databas

  • Sätt Options => Compatibility Level = SQL Server 2012 (oklart vilka versioner som är ok)

  • Skapa användare + tilldela rättigheter (db_datareader + db_datawriter)

  • Öppna Sql Server Configuration Manager, sätt SQL Server Network Configuration => Protocols for SQLExpress => TCP/IP = Enabled

  • Starta om service (SQL Server Management Studio => Object Explorer => högerklick på server => Restart)

  • Öppna serverlog (SQL Server Management Studio => Object Explorer => Management => SQL Server Logs => Current). Kontrollera vilken port som används. (T.ex. "Server is listening on [ 'any' <ipv4> 60133]".)

  • Öppna ev. port i brandvägg.

TAK med SQL Server

Om man kör lokalt så behöver man tillfälligt lägga till en dependency:
<!-- Maven Repository: com.microsoft.sqlserver » mssql-jdbc -->
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>8.4.1.jre8</version>
</dependency>
(Filerna laddades inte ner för mig, troligen p.g.a. tillfälligt problem med Nexus. Som workaraound kan man manuellt ladda ner mssql-jdbc-8.4.1.jre8.jar, .jar.sha1, .pom, .pom.sha1 till ~/.m2/repository/com/microsoft/sqlserver/mssql-jdbc/8.4.1.jre8)


Om det inte redan är gjort, ta bort denna rad i tak-core-PROD.xml:
<property name="database" value="MYSQL" />

Uppdatera context.xml i stil med detta:
<Resource
name="jdbc/TP"
auth="Container"
type="javax.sql.DataSource"
maxActive="8"
maxTotal="8"
maxIdle="10"
maxWaitMillis="10000"
username="tp_adminuser"
password="pwd123"
driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://172.20.64.1:60133;databaseName=sql_server_test"
/>

Skapa TAK-tabeller + testdata i databas
(Använd nvarchar för textkolumner, inte varchar.)
Se sql-fil nedan. (Motsvarar inte helt den vanliga testdatan!)

Felsökningstips

Kontrollera formatet på url-parametern noggrant. Vid minsta lilla fel så kan man få “konstiga” felmeddelanden om problem med drivern trots att parametern driverClassName är korrekt satt.