Acest articol este dedicat unei tehnici din limbajul de programare ColdFusion pe care eu o consider foarte utila, dar am observat ca este mai putin folosita.
Este stiut faptul ca pentru accesarea unei baze de date, ColdFusion foloseste ceea ce se numeste un DataSource
. Practic, un DataSource
este o inregistrare in ColdFusion Administrator prin care ii spunem limbajului cu ce baza de date “stam de vorba” si ce driver folosim pentru a face asta.
Toate bune si frumoase, dar mie nu-mi place sa depind de interfata respectiva. Vreau sa stiu ca pot sa-mi adaug tot ce am nevoie pentru dezvoltarea unei aplicatii doar facand ceea ce stiu eu mai bine: sa scriu cod.
Mai mult, datorita preturilor relativ ridicate nu am avut niciodata de-a face cu un hosting ColdFusion. Sunt convins ca voi avea un utilizator si o parola de administrator, dar oare voi avea acces si la interfata de administrare?
Asa ca am inceput sa caut cum as putea sa adaug un DataSource
direct din cod. Astfel, am aflat ca limbajul ne pune la dispozitie un API
de administrare prin care avem acces cam la toate functionalitatile pe care ni le ofera si interfata grafica. De altfel, presupun ca si interfata foloseste acelasi API
, nu cred ca au dezvoltat ceva separat pentru asta.
Cautand prin documentatie, am aflat ca ceea ce vreau eu este posibil si am gasit si o bucata de cod care sa exemplifice acest lucru. Va prezint in cele ce urmeaza, codul la care am ajuns eu urmand acel exemplu:
<cfset username="admin" /> <cfset password="myPass" /> <cfscript> adminObject = createObject("component","cfide.adminapi.administrator"); adminObject.login(#password#, #username#); dsnObject = createObject("component","cfide.adminapi.datasource"); dsnObject.setMySQL5( name="cdcol", host="localhost", database="cdcol" ); </cfscript>
Sa analizam pas cu pas ce se intampla. In primul rand, incarcam doua variabile cu userul si parola de administrare. Ele nu sunt neaparat necesare, intrucat userul si parola pot fi folosite direct in instantierea obiectelor, dar mie imi place mai mult asa, pentru ca nu trebuie sa caut prin cod daca am nevoie sa le schimb.
Acum ce facem cu ele? Facem o instanta a obiectului Administrator din API
. In urmatoarea linie chemam functia login()
pentru a obtine acces la toate functionalitatile. Aceasta ia ca parametru un username-ul si parola definite mai sus.
Odata ce am obtinut acces, putem sa instantiem obiectul Datasource din API
. Aceasta instanta se stocheaza in variabila dsnObject
. Acum putem sa chemam functia prin care se face adaugarea efectiva a datasource-ului. Aceasta difera in functie de tipul de baza de date pe care dorim sa o adaugam.
Pentru ca eu folosesc MySQL 5
, pentru mine apelul a fost dsnObject.setMySQL5()
. Veti gasi in documentatie functia potrvita bazei de date pe care o folositi. Parametrii sunt descriptivi. Primul reprezinta numele pe care vreti sa-l asignati datasource-ului (si cel cu care il veti apela in query-uri). Al doi-lea este host-ul, iar al trei-lea numele bazei de date pe care doriti sa o selectati.
Tin sa mentionez ca am folosit tag-ul <cfscript>
si sintaxa de ColdFusion Scripting pentru ca asa am gasit exemplul in documentatie. Dar pentru ca stiu ca unii programatori prefera sa foloseasca tag-urile, am vrut sa vad daca pot sa obtin acelasi rezultat folosind markup-ul clasic. Iata ce a iesit:
<cfset username="admin" /> <cfset password="myPass" /> <cfset adminObject = createObject("component","cfide.adminapi.administrator") /> <cfset adminObject.login(#password#, #username#) /> <cfset dsnObject = createObject("component","cfide.adminapi.datasource") /> <cfset dsnObject.setMySQL5("cdcol", "localhost", "cdcol") />
Codul de mai sus functioneaza identic cu cel dinaintea lui, doar ca foloseste tag-uri in loc de script. Este o mica variatie pe care nu o gasiti in documentatia pusa la dispozitie de Adobe.