vrijdag 25 maart 2011

Apache Derby en ColdFusion / Derby


De laatste versies van ColdFusion komen met een nieuwe database driver, die als naam "Derby" heeft. Het leuke hiervan is dat de software om een Derby server te draaien, reeds in ColdFusion zit. Derby databases zijn file-based, en kunnen dus makkelijk worden verplaatst of gecopieerd. Ik besloot om hier even een kijkje naar te nemen. Vroeger werkte ik altijd met Microsoft SQL Server, maar de versies na 2000 zitten vol bloatware en zijn eigenlijk alleen nog maar te begrijpen door database managers.

Derby is een soort van Access op speed. Je kunt de database gerust in productieomgevingen gebruiken. Multi user is geen probleem.

Alle componenten die je nodig hebt om een Derby server te draaien zitten zoals eerder gezegd al klaar in ColdFusion, maar je moet zelf uitzoeken hoe het werkt.

Om de Derby server op te starten open je een command prompt en ga je naar
C:\ColdFusion9\lib.

Daar voer je het volgende uit: java -jar derbyrun.jar server start

Om de server weer te stoppen, gebruik je: java -jar derbyrun.jar server shutdown

Je kunt de server ook automatisch opstarten via een Scheduled Task. Open daarvoor Start - Control Panel - Scheduled Tasks - Add scheduled task. Kies als programma java.exe met argumenten -jar derbyrun.jar server start. Start het programma in C:\ColdFusion9\lib "When my computer starts". Kies
"Run whether user is logged on or not" en "Do not store password". Vink het vakje bij "Stop if the task runs for 3 days" uit.

Een andere manier is door YAJSW te gebruiken.

Om een database aan te maken, voeg je een datasource toe in de Coldfusion Administrator module. Kies een data source name. Kies Apache Derby Client als driver. Klik op Add. Kies een database name (opgelet, dit moet een directory naam zijn, bijvoorbeeld D:\ColdFusion9\db\mydb). Zet als server localhost op poort 1527. In advanced settings zet je als connection string:

create=true;dataEncryption=true;bootPassword=test1234

Gebruik een bootPassword naar keuze. Dit paswoord wordt gebruikt om je database te versleutelen. Enable CLOB en BLOB indien je deze gebruikt.

Bewaar de datasource. Deze zal nu worden geopend door ColdFusion om te kijken of ze bestaat. Omdat er een create=true in de connection string staat, wordt deze ook meteen aangemaakt.

Om de database te beveiligen met een gebruikersnaam en een paswoord open je een SQL editor (bijvoorbeeld RazorSQL). Als connection profile gebruik je jdbc:derby://localhost:1527/C:\ColdFusion9\db\mydb;bootPassword=test1234

Stuur vervolgens de volgende SQL commando's op naar de lege database:

CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.user.username1', 'password1');
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.connection.requireAuthentication', 'true');

Hiermee activeer je de gebruikersnaam "username1" en het paswoord "password1".

Pas nu de datasource weer aan in ColdFusion. Vul je zojuist gekozen username en password in bij de properties. Zorg ervoor dat alleen "bootPassword=test1234" nog in de connection string staat.

Klaar is kees!

Bij Railo wordt Derby niet standaard geïnstalleerd. Ofwel kopieer je derby.jar, derbyclient.jar, derbynet.jar, derbyrun.jar en derbytools.jar van een al bestaande CF installatie uit
C:\ColdFusion9\lib naar C:\railo\lib. Vervolgens doe je een restart van Railo. Ofwel download je de laatste versie van Derby op het net. ColdFusion 9.0.1 komt met versie 10.5.3.0, maar dit is een al wat oudere versie. Wil je de nieuwe (10.7.1.1 op het moment van schrijven), ga dan naar http://db.apache.org/derby/derby_downloads.html en download de LIB distributie.

Om de datasource toe te voegen in Railo kies je als type "Other - jdbc driver". Vervolgens als Class "org.apache.derby.jdbc.EmbeddedDriver" en als DSN "jdbc:derby:C:\ColdFusion9\db\mydb;create=true;dataEncryption=true;bootPassword=bootPassword" als je de embedded versie van Derby wil gebruiken. Beter nog is de netwerk versie. Hiervoor gebruik je als Class "org.apache.derby.jdbc.ClientDriver" en als DSN "jdbc:derby://localhost:1527/C:\ColdFusion9\db\mydb;create=true;dataEncryption=true;bootPassword=bootPassword"

Geen opmerkingen: