Sunteți pe pagina 1din 6

Lumea Java - PC Report Nr 88 / Ianuarie 2000

Proceduri stocate n Java


Soluii de dezvoltare a aplicaiilor de interaciune cu baze de date
Ce sunt procedurile stocate i cum sunt implementate n Oracle 8i procedurile stocate Java. Avantajele
utilizrii acestei tehnologii, cteva detalii despre implementarea mainii virtuale Java realizat n serverul
Oracle 8i i un exemplu concret de dezvoltare i punere n exploatare a unei proceduri stocate scrise n Java.
Bogdan Costinescu

V mai aducei aminte de primele aplicaii ale limbajului Java? Imagini animate, sunet, interactivitate, i toate prin
intermediul unui simplu program de navigare WWW, pe orice platform i sistem de operare. Istoria Java a nceput
n 1995, iar n cei patru ani care au trecut s-au produs foarte multe schimbri, datorate mai ales implicrii n
universul Java a unor coloi din industria calculatoarelor: SUN, IBM, Oracle. Platforma Java a evoluat dintr-un
mediu interesant pentru mediile academice ntr-un adevrat mediu de ntreprindere, evoluia datorndu-se att
calitilor intrinseci ale platformei, ct i noilor oportuniti de afaceri pe care le ofer.
Acest articol nu-i propune s descrie calitile limbajului i platformei Java. S-au scris destule materiale de calitate
despre aa ceva, drept care acest articol i propune s descrie una din cele mai elegante i performante (da, nu v
mirai, performana a nceput s apar i n lumea aplicaiilor Java!) soluii de dezvoltare a aplicaiilor de
interaciune cu baze de date: procedurile stocate Java (Java Stored Procedures).
Motivaie
Procedurile stocate Java sunt o urmare fireasc a efortului de mbuntire a calitii soluiilor pentru mediile
industriale. Aplicaiile client/server au permis separarea logicii programului i alegerea sistemului de operare cel mai
potrivit pentru fiecare seciune a aplicaiei: mediile Windows pentru preluarea i afiarea informaiilor i mediile
Unix pentru gestiunea i protecia informaiilor. Problemele de portabilitate i costurile ridicate ale ntreinerii
variantelor aplicaiilor folosite de clieni au fost rezolvate o dat cu apariia platformei Java i a applet-urilor. Acelai
cod poate s ruleze pe orice platform hardware, iar aplicaia poate fi descrcat direct de pe server, deci se va folosi
ntotdeauna ultima versiune a aplicaiei client. Aadar, 100% Java.
Introducerea conceptului de server de aplicaii i dezvoltarea arhitecturii pe trei niveluri au reprezentat pentru Java
noi rampe de lansare. La ora actual, nu mai exist server de aplicaii care s nu ofere suport pentru servluri, aceste
mini-aplicaii care ruleaz n cadrul serverului de aplicaii i genereaz pagini HTML pentru clienii universali:
programele de navigare. n curnd vom auzi i de implementri de Java Server Pages, o replic la mai cunoscutele
Active Server Pages, care reprezint o modalitate foarte simpl de a ncapsula cod Java n cadrul unei pagini HTML.
Aceste dou tehnologii trebuie puse n conjuncie cu tehnologiile de obiecte distribuite (CORBA) sau componente
Java (Enterprise Java Beans), care sunt i ele prezente n cele mai noi servere de aplicaii. Pn acum, 200% Java.
Dar productorii de sisteme de baze de date nu s-au oprit aici. Oracle, prin ultima versiune a sistemului de gestiune a
bazelor de date, Oracle 8i, mpinge mai departe platforma Java: direct n baza de date! Sunt implementate nu numai
conceptele legate de proceduri stocate n Java, ci i componente Java pentru ntreprindere (EJB). Toate acestea,
pentru c noul mare val de aplicaii va fi reprezentat de cele bazate pe tehnologiile Internet i Intranet. n total, 300%
Java, aa cum este unul din sloganurile corporaiei Oracle.
Aceast scurt enumerare de soluii i posibiliti trebuie s v fac s v gndii la cel puin dou aspecte. Mai nti,
Java exist i este folosit pentru implementarea de mari proiecte informatice datorit multiplelor avantaje i
standarde adoptate n jurul platformei. Al doilea aspect, poate mai important, este c un singur limbaj de programare
poate fi folosit pentru dezvoltarea tuturor tipurilor de programe de care este nevoie ntr-o ntreprindere: aplicaii
client, comunicaii, securitate, module pentru serverul de aplicaii, accesul la baze de date, multimedia, gestiunea
reelei i lista ar putea continua. Decizia de migrare spre Java poate lua un pic de timp, dar avantajele sunt clare. A
dori s subliniez, n afar de cele deja clasice, crearea unei expertize de programare ntr-un singur limbaj n cadrul
ntreprinderii care va mbunti calitatea tuturor aplicaiilor scrise. Nu mai este nevoie de C/C++, VB, Perl,
PL/SQL, COBOL, ci doar de Java i de API-urile ei.
Revenind la subiectul articolului, n cadrul articolului voi prezenta modalitatea prin care sunt implementate n
Oracle 8i procedurile stocate Java. Prezentarea se va axa pe particularitile aceste soluii, incluznd avantajele,
restriciile, modul de dezvoltare, testare i de apel.
Prima ntrebare la care trebuie dat un rspuns este ...
Ce sunt procedurile stocate Java?
Pot fi date mai multe definiii, fiecare dintre ele surprinznd un anume aspect al procedurilor stocate. Primul aspect
care merit atins este cel algoritmic. Procedura stocat, fie ea n Java sau n tradiionalul PL/SQL, reprezint o

implementare a unui algoritm, o extensie a limbajului SQL. Limbajul SQL este foarte bun pentru definirea,
manipularea i interogarea datelor dintr-o baz de date, dar este lipsit de unele construcii necesare pentru crearea de
programe. Din acest motiv, este necesar utilizarea unui limbaj extern, de preferat de nivel nalt, pentru a putea
descrie uor algoritmii folosii n prelucrarea datelor. Aici intervin procedurile stocate care extind funcionalitatea
motorului bazei de date.
nainte de a trece la alte caracteristici ale procedurilor stocate, trebuie menionat c termenul se refer att la
proceduri (construcii de programare care primesc parametrii, dar nu ntorc o valoare), ct i la funcii, pentru care
este important valoarea ntoars.
Al doilea aspect al procedurilor stocate n Java este legat de modul de execuie. Codul procedurii, deci aplicaia n
final, folosete o implementare de main virtual foarte performant, complet integrat n SGBD. Aceast main
virtual este o implementare scalabil i de nivel ntreprindere a platformei Java. Aadar, procedura stocat Java este
o modalitate de a beneficia de avantajele oferite att de Java, ct i de implementarea performant din serverul bazei
de date Oracle 8i. Mainii virtuale Java oferite de Oracle, numit Aurora, i voi dedica o seciune special datorit
caracteristicilor ei particulare.
O alt caracteristic important a procedurilor stocate este faptul c este reprezint o modalitate de a centraliza
logica aplicaiei, cu toate avantajele de ntreinere i uurin n distribuie a aplicaiei.
Ultima definiie care poate fi dat procedurilor stocate este c ele definesc pori de acces la date. Ca orice poart, ea
poate controla cine i la ce are acces. Controlul accesului se face pe baza utilizatorilor din baza de date, motiv pentru
care este mult mai simplu s se gestioneze o astfel de aplicaie, comparativ cu soluia n care utilizatorul trebuie s se
autentifice cu serverul de aplicaii, apoi cu serverul bazei de date.
Din definiiile de mai sus se pot desprinde deja unele avantaje ale procedurilor stocate Java, dar le vom discuta
separat, n cadrul seciunii ...
Avantajele procedurilor stocate Java
Problema de care se plng muli utilizatori ai limbajului Java este slaba performan. Toi acetia sunt invitai s
citeasc paragrafele urmtoare, pentru c ele relev msurile pe care Oracle le-a luat pentru a crea i oferi avantajul
major al folosirii procedurilor stocate Java: nalta performan.
Mai rapide dect aplicaiile Java cu JDBC. Procedurile stocate Java ruleaz acolo unde sunt stocate datele,
deci este evident faptul c sunt mai rapide. n plus, driverul JDBC al mainii Aurora este special optimizat
i acordat pentru o comunicaie prin memorie partajat cu sistemul de gestiune al bazei de date.
Lipsa ntrzierilor din reea. Soluia clasic de prelucrare a datelor este obinerea lor n cadrul aplicaiei
client, modificarea lor i restocarea lor n baza de date. Toat aceast activitate implic transferuri n reea.
Deoarece datele sunt prelucrate acolo unde sunt stocate ntrzierile de transmisie sunt eliminate. De
exemplu, procedurile de analiz i sintez a datelor ofer doar rezultatul final, mult mai mic dect volumul
de date prelucrat.
Lipsa proceselor suplimentare. Prin construcia serverului Oracle 8i, maina virtual Java este tot timpul
pornit. Aadar, apelul unei proceduri stocate nu va nsemna lansarea n execuie a unor noi procese.
Gestiunea inteligent a codului. Codul procedurilor stocate este optimizat prin intermediul unui compilator
just-in-time. Acest lucru nseamn c, o dat ncrcat, codul procedurii este executat la vitez maxim. Mai
mult, sistemul gestioneaz bytecode-ul n mod partajat, permind mai multor utilizatori care folosesc
aceeai procedur stocat s foloseasc varianta optimizat. Acest mod de gestiune a codului, cu memorii
cache i spaii partajate, este benefic i pentru noile tipuri de optimizoare de cod Java (a se vedea HotSpot),
deoarece codul este rulat continuu, i nu ncrcat la fiecare apel.
Abstractizarea aciunilor. De obicei, n cadrul unei proceduri stocate sunt nglobate mai multe fraze de
selecie i manipulare a datelor. Acest mod de structurare permite abstractizarea aciunilor pe care aplicaia
le efectueaz, precum i reutilizarea procedurilor din mai multe locuri.
Exploatarea performanelor serverului. Acest avantaj se bazeaz pe o observaie de bun sim. n cadrul
unei ntreprinderi, resursele sunt centralizate pe server. Acesta dispune, de obicei, de cel mai rapid procesor,
dac nu chiar de mai multe procesoare, de memorie, de un sistem de stocare performant. Toat aceast
putere de calcul st i la dispoziia mainii virtuale Java i, prin extensie, i procedurilor stocate Java.
Centralizarea regulilor afacerii. Acest avantaj este global pentru toate procedurile stocate i reprezint unul
din marile motive de folosire a procedurilor stocate. Cuvintele cheie ce trebuie subliniate sunt ntreinerea
uoar a clienilor (fiecare client, cnd va apela procedura, va apela ultima variant, deci va beneficia de
mbuntirile aduse ntre timp, fr modificarea aplicaiei client), reutilizarea (de ctre mai multe aplicaii
sau utilizatori, evitnd duplicarea scrierii de cod), asamblarea procedurilor verificate n proceduri mai
complexe.

Productivitate i uurin n folosire. Procedurile stocate extind funcionalitatea SGBD-ului. De exemplu, o


funcie stocat poate fi folosit n cadrul unei fraze SQL. Apelul unei proceduri stocate Java este foarte
simplu, fiind disponibile n Java numeroase modaliti standard de apel la nivelul clientului: JDBC, SQLJ,
CORBA, EJB. n plus, o procedur stocat Java poate fi apelat din PL/SQL, din Forms, din triggere sau
din metodele obiectelor din baza de date, fr a epuiza modurile n care se poate folosi o procedur stocat.
Controlul accesului. Mecanismele SGBD-ului permit gestiunea drepturilor de acces la procedurile stocate.
n acest mod, putem decide cine are acces la proceduri i cine nu. n plus, se poate activa un mecanism de
acces care s permit folosirea unei proceduri de actualizare a unei tabele din baza de date, cu toate c
utilizatorul nu are drept de modificare asupra tabelei respective. Astfel se reimpune logica afacerii,
controlndu-se cine i cum efectueaz modificrile.
Dezvoltare rapid. Prin intermediul mediilor vizuale ce permit asamblarea componentelor Java este
posibil crearea unei proceduri stocate pe baza unor componente deja verificate, totul realizndu-se n mod
vizual. Testarea funcionalitii procedurii se poate face n cadrul unui program client, urmnd ca apoi s se
fac punerea n exploatare n cadrul serverului Oracle.
Scalabilitatea. Datorit grijii n implementarea mainii virtuale Aurora, Oracle a reuit s pstreze foarte
bunele caracteristici de scalabilitate pe care le au SGBD-urile firmei. Astfel, experimentele au demonstrat
faptul c necesarul suplimentar de memorie per conexiune este de numai 28KB, fiind deci posibil
gestiunea multor utilizatori simultan, exact cazul sistemelor pentru Internet.
Portabilitatea. Nu n ultimul rnd, trebuie avut n vedere c procedura stocat scris n Java poate fi
utilizat pe orice platform hardware. Mai mult, o procedur stocat poate rula, cu mici modificri, n
cadrul unei aplicaii client (sau applet) ori ntr-un server de aplicaii.
Dup toate aceste avantaje, mai trebuie clarificat o mic nedumerire: de ce Java i nu PL/SQL? Articolul de fa nu
dorete s minimizeze importana PL/SQL. Merit menionat n acest sens produsul WebDB, tot al firmei Oracle,
care permite gestiunea unei baze de date i crearea unui sit WWW populat cu informaii dintr-o baz de date
folosind ca instrument de dezvoltare un program de navigare obinuit. Desigur, greul este dus de procedurile stocate,
scrise integral n PL/SQL. Ceea ce dorete ns s sublinieze acest articol sunt caracteristicile procedurilor stocate
Java, astfel nct un proiectant sau dezvoltator s cunoasc toate posibilitile ce i se ofer.
Avantajul PL/SQL este o coresponden perfect ntre tipurile de date din baz i cele ale limbajului, zon n care
Java are multe conversii de fcut. Din acest motiv, recomandarea firmei Oracle este de a se scrie proceduri PL/SQL
pentru sarcini de manipulare intensiv a datelor, procedurile Java fiind destinate zonei n care se efectueaz calcule
intense combinate cu accesuri rare la informaii.
Maina virtual Java din Oracle 8i
Maina virtual Java implementat n Oracle 8i, cunoscut sub numele de Aurora, ofer un mediu de execuie
conform cu JDK 1.1.6. Evident, maina virtual nu are implementat partea de grafic, dar n rest ofer un mediu
complet Java. Aurora este proiectat s ruleze n acelai spaiu de adrese cu nucleul bazei de date, motiv pentru care
consumul de memorie este redus, iar performanele ridicate.
Trebuie remarcat c codul poate fi lansat n execuie att prin intermediul unor apeluri din SQL, PL/SQL sau alt cod
Java, ct i prin intermediul unor apeluri IIOP, n cazul obiectelor Java/CORBA care ruleaz n cadrul serverului.
Codul compilat joac o mare importan n Aurora, majoritatea claselor de sistem fiind gata compilate, deci se
execut la vitez maxim. Exist, de asemenea, posibilitatea de a compila nativ i codul procedurilor stocate, deci
timpul de execuie se reduce mult.
Gestionarul de biblioteci este cel care ncarc sursele, clasele sau fiierele resurs Java n baza de date, ca rezultat al
comenzii SQL CREATE JAVA. Nu este posibil accesarea direct a acestor obiecte; doar maina virtual poate s le
foloseasc.
Gestionarul de memorie este cel care se ocup de colectarea memoriei disponibile. Mecanismul de colectare se
bazeaz pe tehnici de alocare a memoriei adaptate la timpul de via a obiectelor. Astfel, obiectele care
supravieuiesc n afara scopului funciei care le-a creat sunt migrate n alte zone de memorie. Pentru reducerea
necesarului de memorie, gestionarul de memorie partajeaz starea constant a obiectelor, cum ar fi definiiile de
clase i variabilele statice finale.
Compilatorul Aurora are rolul de a compila sursele care sunt introduse n baza de date prin intermediul unei fraze
CREATE JAVA SOURCE. Rezultatul este un bytecode compatibil JDK.
Interpretorul este i el compatibil JDK 1.1.6 i se execut pe componenta MultiThreaded Server (MTS) a serverului
Oracle, cea care gestioneaz sesiunile i planific execuia programelor Java. Sistemul de asisten la execuie
(runtime) permite apelul de metode native i comunicaii din interior sau exterior, dar aceste aciuni se pot executa
doar dac utilizatorul are privilegiile corespunztoare.

ncrctorul de clase este cel care localizeaz, ncarc i iniializeaz clasele Java stocate n baza de date. El citete
clasa, i apoi genereaz structurile de date de care este nevoie pentru execuie. Constantele sunt plasate, pentru
eficien, ntr-o zon de memorie partajat cu alte sesiuni. De asemenea, el invoc compilatorul de Java automat,
dac se constat c este nevoie de recompilarea surselor i sursele sunt disponibile. Verificatorul este cel care
verific dac bytecode-ul Java respect regulile i formatul predefinit, mpiedicnd astfel violarea restriciilor de
acces. Verificatorul este parte integrat n sistemul de securitate, asigurat att de securitatea Java ct i de cea a bazei
de date Oracle.
Din punct de vedere al performanelor, scopurile principale ale proiectanilor Aurora a fost scalabilitatea i execuia
rapid pentru cod care ruleaz mult timp. Aadar, orice test aplicat acestei maini virtuale trebuie s aib n vedere i
aceste aspecte particulare. Pentru moment, JVM clasic, de la Sun, este mai rapid pentru activitile foarte scurte
(de exemplu, proceduri stocate care efectueaz calcule de tipul 2+2), dar devine mai slab n performane o dat cu
timpul de rulare. De asemenea, trebuie inut cont i de faptul c scopul acestei implementri este de a susine, n
final, ct mai multe cereri simultan, iar aici testele au artat c Aurora este de cel puin 4 ori mai scalabil dect
orice alt main virtual. Pentru cei pe care timpul de execuie i nemulumete, Oracle pune la dispoziie JServer
Accelerator, care realizeaz translatarea codului Java n cod C ce poate fi compilat pe maina server i executat
ulterior prin intermediul unei biblioteci partajate care este ncrcat de Aurora. O alt cretere de vitez este dat de
furnizarea, alturi de clasele de sistem, a unor packag-uri ORB i JDBC ce au asociate versiuni compilate nativ.
Evident, partea de legtur cu baza de date este de nalt calitate. Driverul JDBC ruleaz chiar n interiorul
serverului, oferind cel mai rapid acces posibil la date. El este conform cu specificaiile JDBC 1.22 de la Sun i
suport tipurile specifice bazelor de date Oracle, seturi de caractere naionale i apelul de proceduri stocate.
Conformitatea cu standardul JDBC face posibil punerea n execuie a aceluiai cod att n baza de date, ct i ntrun applet sau aplicaie la client. n mod similar, la nivelul serverului exist i o implementare de SQLJ, care permite
integrarea mult mai uoar a codului SQL cu cel Java.
Cteva cuvinte i despre restriciile care sunt impuse codului care se execut pe Aurora JVM, deci i procedurilor
stocate. n primul rnd, se permite folosirea tuturor claselor din partea de grafic, cu condiia de a nu se ncerca
materializarea unei ferestre.
Programele cu mai multe fire de execuie se execut pe server fr modificri, dar ele trebuie s in cont de faptul
c implementarea este cu fire de execuie gestionate n spaiul utilizator. Cu alte cuvinte, n mediul serverului firele
de execuie nu sporesc concurena, pentru c acest lucru este guvernat de ctre MTS i metode de optimizare
specifice serverului. Aadar, diferenele importante sunt c firele de execuie pe server:
ruleaz secvenial, nu concurent;
sunt cooperative, i nu preemptive, deci dac un fir intr ntr-o bucl infinit nu mai poate rula nici un alt
fir;
dac sunt create n interiorul unui apel, firele mor la terminarea apelului.
Practic, n terminologia Oracle, mutithreading se refer la sesiuni utilizator concurente, i nu la mai multe fire de
execuie n sensul Java. Planificarea execuiei Java pentru atingerea scopului de tratare a ct mai muli utilizatori
simultan este realizat de sistemul de gestiune, i nu de ctre maina virtual Aurora.
Contextul de rulare al procedurilor stocate
nainte de prezentarea modului n care se face dezvoltarea unei proceduri stocate, este util menionarea locurilor n
care pot fi ntlnite aceste proceduri, sau aa numitele contexte de rulare.
Prima utilizare este cea clasic, dat chiar de nume, i anume proceduri (sau funcii) apelabile explicit din SQL sau
PL/SQL. Ele pot primi parametri, iar funciile pot fi apelate i din fraze SQL de manipulare a datelor (DML), cum ar
fi INSERT, UPDATE, DELETE i SELECT.
A doua utilizare este de component logic n cadrul unui trigger. n acest caz, procedura stocat este asociat cu o
tabel sau o vedere anume. SGBD-ul declaneaz automat triggerul atunci cnd o anumit operaie DML modific
tabela sau vederea. Declanarea triggerului se traduce printr-un apel CALL al procedurii stocate. Rolul principal al
triggerelor este de a completa mecanismele oferite de baza de date, prin impunerea unor reguli de afaceri mai
complexe, cum ar fi prevenirea tranzaciilor invalide, nregistrarea i auditul evenimentelor.
Cea de-a treia utilizare este cea de metod pentru obiectele stocate n baza de date i create cu fraza CREATE
OBJECT. n acest context, procedura stocat devine o metod a unui obiect i ajut, o dat n plus, la extinderea
lucrului cu obiectele din Oracle8.
Dezvoltarea unei proceduri stocate
Primul pas pe drumul crerii i utilizrii unei proceduri stocate este cel de dezvoltare. Pentru dezvoltare, se
recomand folosirea unui mediu vizual, care s tie s automatizeze i unii din paii urmtori. Cel mai potrivit este
Oracle JDeveloper, fiind foarte bine integrat cu restul gamei de produse Oracle, oferind i multe utilitare de control.

Procedura stocat din baza de date se obine dintr-o metod a unei clase Java. Atunci cnd se apeleaz o procedur
stocat nu se creeaz un obiect; clasa din care face parte metoda transformat n procedur stocat nu este
instaniat. Implicaiile acestui fapt sunt c:
nu exist constructor al clasei;
toate variabilele i metodele sunt statice;
fiecare metod care are nevoie de o conexiune la baza de date trebuie s verifice conexiunea i s o
stabileasc, dac nu era deja. O soluie este declararea unui obiect static de tip conexiune, care s fie
iniializat cu null i verificat la nceputul fiecrei metode.
Alte diferene fa de o clas normal sunt la modul de transmitere al parametrilor. O procedur stocat poate avea
parametri din intrare i/sau de ieire. Variabilele de ieire sunt declarate ca vectori. Acest lucru este necesar pentru a
putea pasa parametri de ieire ca referine la obiecte, i nu ca variabile primitive.
Ultima caracteristic este folosirea unei conexiuni JDBC speciale, cea implicit pentru driverul JDBC din baza de
date. Modul de obinere al acestei conexiuni poate fi remarcat n codul surs al exemplului de procedur stocat.
Driverul JDBC din baza de date nu suport modul de lucru autocommit, deci este necesar ca utilizatorul s
gestioneze explicit tranzaciile.
Pentru ilustrarea fazelor prin care trebuie trecut pentru a utiliza o procedur stocat, se va considera cazul unei
proceduri care face inserarea unui obiect ntr-o magazie. Metoda care va fi transformat n procedur stocat se
numete addStockItem, iar clasa din care face parte este StockManager.
ncrcarea unei proceduri stocate
Cel de-al doilea pas spre utilizarea final a unei proceduri stocate este ncrcarea procedurii stocate n baza de date.
n acest scop, Oracle 8i ofer un utilitar numit loadjava, care permite automatizarea procesului de ncrcare.
JDeveloper, de la versiunea 2.0 n sus, permite ca o opiune de distribuie i punere n exploatare a unei clase i
ncrcarea de proceduri stocate. La momentul ncrcrii trebuie definite toate metodele care se doresc a fi
transformate n proceduri stocate, pentru c pentru acestea trebuie generate specificatori de apel (call specs) n
dicionarul de date Oracle. Aceast activitate poart numele de publishing (publicare). Succesiunea de evenimente i
entitile implicate n cele dou activiti sunt ilustrate n figurile: "Modul de lucru al utilitarului loadjava" i
"Utilizarea specificatorilor de apel".
Trebuie fcut o distincie clar ntre un nveli SQL sau PL/SQL i un specificator de apel. n primul caz, se creeaz
o procedur PL/SQL care apeleaz, din interior, procedura stocat Java. n cel de-al doilea caz, se genereaz doar o
declaraie de procedur, pe baza creia procedura poate fi identificat i i poate primi parametri. Rolul
specificatorului de apel este deci de a permite asocierea numelor de metode Java, a tipurilor parametrilor i a
rezultatelor cu echivalentele din SQL.
Un exemplu de rulare a utilitarului loadjava, n care cerem ca s se produc compilarea codului i rezolvarea
referinele externe din clase (opiunea -v) i conectarea la baza de date prin driverului JDBC de tip thin (opiunea -t),
este:
Crearea package-ului n care st procedura stocat i declararea ei se face prin urmtoarele dou comenzi SQL,
generate automat dac se folosete asistentul de distribuie (Deployment Wizard) din JDeveloper.
Verificarea cu SQL*Plus a funcionrii procedurii stocate se poate face prin simpla comand:
CALL stock_manager.add_stock_item(2000, "speakers", 10);
Utilizarea unei proceduri stocate
Dac toi paii au fost parcuri corect, procedura este deja n baza de date i deja putem s o folosim din programe.
De exemplu, o secven de cod Java/SQLJ care s fac apel la o procedur stocat este:
Aspecte de securitate
n mod normal, procedurile stocate Java sunt executate cu privilegiile celui care invoc procedura. Toate obiectele
care nu sunt calificate sunt cutate n schema celui care invoc procedura. Pentru a schimba acest comportament
implicit, se poate utiliza un parametru (definer) al utilitarului loadjava.
Folosirea unei proceduri ce se execut cu drepturile celui care o invoc (invoker rights) este util pentru crearea unui
depozit central de proceduri stocate. De exemplu, o firm cu mai multe sucursale poate s plaseze o procedur de
analiz pe un server central. Fiecare filial, cnd va vrea s fac analiza, o va face pe propria baz de date. Dac se
dorete ca procedura centralizat s fac modificri pe baza central (de exemplu auditul analizelor), atunci
procedura de analiz va trebui s apeleze alt procedur, de nregistrare, care s se execute cu drepturile celui care a
definit-o. Cele dou cazuri sunt ilustrate n figura "Metodele de execuie a codului Java".
Execuia unei proceduri se poate face doar dac utilizatorul are drept de execuie. Un utilizator poate cpta drepturi
de modificare a unei tabele, prin execuia unei proceduri stocate, chiar dac el nu are drepturi de modificare a
tabelei.

n plus, nu trebuie uitate i restriciile impuse de maina virtual. Astfel, o procedur stocat nu are acces la discul
serverului i nu poate comunica n reea dect dac se specific explicit anumite privilegii.
Concluzii
Caracteristicile platformei Java o fac ideal pentru programarea la nivelul serverului bazei de date, iar optimizrile
specifice Oracle 8i creeaz un mediu de producie pentru aplicaiile Java. Java permite asamblarea aplicaiilor
folosind componente software prefabricate (off-the-shelf). Sigurana tipurilor i gestiunea automat a memoriei
permit integrarea strns cu SGBDR-urile moderne. n plus, Java permite distribuirea transparent a componentelor
aplicaiilor n reea.
Astfel, Java i SGBDR permit asamblarea rapid a aplicaiilor bazate pe reea i componente software, aplicaii care
pot evolua lin pe msur ce se schimb cerinele afacerii. Codul aplicaiei i depozitul de date poate fi mutat de pe
calculatorul de pe birou n cadrul unei reele inteligente sau pe servere de sprijin pentru arhitectura NCA (Network
Computing Architecture). Ceea ce este cel mai important este c aceste aplicaii pot fi accesate de la orice program
de navigare.
Performanele implementrii Oracle de main virtual din cadrul serverului Oracle 8i cresc atractivitatea dezvoltrii
de aplicaii Java. Astfel, dup cucerirea sectorului aplicaiilor client, Java trece la atac i n domeniul bazelor de date.
Iar surprizele nu se vor opri aici: urmtoarea versiune de Oracle 8i (8.1.6) va oferi suport pentru alte tipuri de
componente Java, pe aceeai main virtual. JSP (Java Server Pages), i servlet-urile vor fi tehnologiile Java
implementate alturi de EJB, CORBA, proceduri stocate Java.
Tehnologiile care vor modela viitorul apropiat sunt cele legate de portabilitate, standardizare i universalitate. Java
este soluia care ndeplinete aceste condiii pentru coninut executabil, aa cum UML (Unified Modelling
Language) i XML (eXtensible Markup Language) o fac pentru modelarea sistemelor, respectiv reprezentarea
datelor. Combinaia dintre cele trei fore nu poate duce dect la lucruri bune, iar firmele puternice de software,
printre care i Oracle, pregtesc surprize plcute prin produse ce se bazeaz pe toate aceste tehnologii. Integrarea n
produsele de dezvoltare a acestor tehnologii permite dezvoltarea n timp mai scurt a unui software de calitate i
deschis interaciunilor cu alte sisteme.
Bazele de date i mediile de dezvoltare asociate sunt deja pregtite s sprijine aplicaii bazate pe tehnologiile
Internet. Suntei pregtii s le exploatai? Sper ca vocea din reclam a maestrului tefan Iordache s vorbeasc i n
numele dumneavoastr ...
Bogdan Costinescu este doctorand i asistent universitar n cadrul Catedrei de Calculatoare a Universitii
"Politehnica" Bucureti i poate fi contactat pe email la: bogdan@cs.pub.ro.

S-ar putea să vă placă și