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.