RAZPRAVE S Primerjava tehnologij AD0.NET in Hibernate Marku Štrukelj Ixtlan Team, d. a. d., Revbarjuva ulica 13, 1000 Ljubljana ht.tp://www.ixLlan-Lsam.si/ marku.strukelj@ixLlan-Leam. si lmarko.Strukelj@nevtron.si) Marka Bajec Univerza v Ljubljani. Fakultete ?a računalništva in informatiko. Tržaška 25, 1000 L|ubljana marko .bajec@fri .uni-lj, si Povzetek Hibernate in AD0.NET sodita med najbolj popularne programske rešitve za dostop do relacijskih podaLknvnili ba/ Hibernate deluje v okol|u |ava. Omogoča objektno-relacij s ko preslikavo, kar pomeni, da podatke iz relacijske podatkovne baze preslika v objekte. To mu omogoča tudi poizvedovanje z objektnim poizvedovalnim jezikom HQL ter predpomnenje. Hibernate je neodvisen od podaLkovne baze. Tehnologija AOO.NET pa je del ogrodja .NET. V naspruLju z rešitvijo Hibernate ne pnnuja objektno relacijske preslikave. Podatkovni model je še vedno relacijski Kljub temu gre za sodobno rešitev, saj prinaša številne prednosti v primerjavi s starejšimi tehnologijami. V prispevku predstavljamo izbrane rezultate raziskave, v kateri smo primerjali tehnologiji ADO.NET in Hibernate. Abstract Comparison of Technologies ADO.NET and Hibernate Hibernate and ADO NET are the must papular technologies for accessing relational databases. Hibernate works in java environment. It supports object/relational mapping, which transforms data from relational databases to objects. Hibernate includes interesting features like querying with object oriented query language HOL, caching and database independence. AD0.NET. on the other hand, is a part ol .NET framework and does not support object/relational mapping. The data model is still relational. Nevertheless, it brings contemporary solutions with many new futures comparing to older technologies In this paper we present some of the results from the research in which we have compared ADO.NET and Hibernate technology. 1 Uuod Pri razvoju informacijskih sistemov se danes večinoma uporablja objektne programske jezike u kombinaciji z relacijskimi podatkovnimi bazami. Ueliko bolj naravna povezava bi seveda bila objektni jezik z objektno podatkovno bazo, vendar se slednje u praksi žal niso uveljavile. Pri uporabi objektnega programskega jezika programer navadno ne uporablja podatkov neposredno iz podatkovne baze, temveč dela z objekti, ki se predhodno kreirajo in napolnijo s podatki iz podatkovne baze. Podobno se objekti preslikajo v relacije oziroma zapise v tabelah relacijske podatkovne baze, ka jih želimo shraniti. Ga to lahko storimo, potrebujemo za vsak objekt štiri poizvedbe: za branje, spreminjanje, dodajanje in brisanje. Pisanje takšnih enostavnih poizvedb in pretvorba podatkov v objekte ter nazaj je sicer rutinsko delo, vendar zelo potratno in zato zajema sorazmerno velik del časa razvoja informacijskega sistema. Kljub omenjenim razlikam med predstavitvijo podatkov v objektih in relacijskih tabelah je možna avtomatska pretvorba iz ene oblike v drugo. Takšno pretvorbo imenujemo objektno-relacijska preslikava. Ta avtomatsko generira vse potrebne poizvedbe in objekte v času izvajanja. Programerju se [načeloma) ni več treba ukvarjati s tem, na kakšen način se podatki berejo in shranjujejo. Objektno-relacijska preslikava jc postala popularna, ko je Sun skupaj z J2HI£ predstavil tehnologijo poslovnih javanskih zrn (Enterprise JavaBeans- li|B). Tehnologija je bila revolucionarna novost, zato so ji napovedovali svello prihodnost. Zal pa je bila za praktično uporabo veliko prt1 kompleks na in je, namesto da bi pospeševala razvoj, k'-tega zavirala (3). Zaradi kompleksnosti tehnologije entitetnih zrn in njenih slabosti se je pojavilo veliko novih tehnologij, ki pa so obdržale osnovno zamisel - pretvorbo relacijske podatkovne sheme v objektno. Tako je Sun predstavil JDQ, Oracle Top Unk itd. Pojavilo se je tudi veliko število odprtokodnih rešitev. Med njimi glavno vlogo igra Hibernate. Mesečno ga s spleta prenese kar 15.000 uporabnikov (5). Tako je postal najbolj popularna rešitev za dostop do podatkov v okolju java. V okolju ,NET-a se objektno-relacijska preslikava ni prijela tako dobro kol v javi. Najbolj razširjen način 2005 ■ itevilka 1 - letnik XIII u d o fi » fi k » INFORMATIKA 5 Marko štrukelj. Marko Rajec Primerjava tehnatngij AUO.Nfc t in Hibernate dostopa do podatkov jc tehnologija ADO.NET, ki je bila predstavljena v okviru .NET-a. ADO.NF.T ne uporablja objektno-relacijske preslikave, zato je podatkovni model še vedno relacijski, V članku opisujemo rezultate primerjave tehnologij ADO.NIZT in Hibernate. Najprej sta okvirno predstavljeni obe tehnologiji. Sledi teoretična primerjava po posameznih funkcionalnostih, za tem pa še analiza zmogljivosti. Na koncu podajamo nekaj smernic, ki povedo, kdaj uporabljati eno in kdaj drugo tehnologijo. Prispevek predstavlja povzetek Širše raziskovalne naloge. 2 Predstavitev tehnologij 2.1 AOa.NET ADO.NET je del ogrodja .NCT. Ne omogoča preslikave v objekte. Podatkovni model je Se vedno relacijski. Njegova pomembna lastnost je tesna integracija z XML zapisom podatkov. Osnovna arhitektura ADO.NET-a je predstavljena na sliki 1. Razrede ADO.NET lahko v grobem razdelimo v dve skupini. Prva so tako imenovani povezani razredi (Connected), ki skrbijo za dostop do podatkovne baze. Drugo skupino sestavljajo odklopljeni razredi (Disconnected), ki jih uporabljamo za delo s podatki. Vmesnik med njima predstavlja DataAdapter, ki napolni objekte odklopljenih razredov s pomočjo objektov povezanih razredov. DataAdapter v ta namen vsebuje poizvedbe za branje, spominjanje, vstavljanje in brisanje. Logika branja in shranjevanja je tako ločena od podatkov. Poleg tega takšna arhitektura ne zahteva stalno aktivne povezave s podatkovno bazo. Omogočen je odklopljen način dela - povezava z bazo se vzpostavi le v času branja in shranjevanja. ADO.NET v primerjavi s svojim prednikom ADO in ostalimi tehnologijami prejšnjega rodu (JDBC, RDE) omogoča povezave med tabelami. S tem lahko povezani tabeli obravnavamo kot celoto. Če je tabela A povezana s tabelo 13, lahko iz zapisa tabele A d os topa m o do povezanih zapisov v tabeli 13 in obratno, 2.2 Hibernate Hibernate je objektno-relacijski prešli kovalni mehanizem za javo, kar pomeni, da podatke, zapisane v relacijski podatkovni bazi pretvori v javanske objekte. To so popolnoma običajni javanski objekti (POj O -Plain Old j avn Objects oz. Plain Ordinary java Objects) in zato ne vsebujejo mehanizma, ki bi skrbel za shranjevanje. Ne zavedajo se, na kakšen način se preberejo iz baze ali se vanjo shranijo, podobno kot objekti odklopljenih razredov pri ADO.NET-u. Za to skrbi Hibernate, ki v času izvajanja generira vse potrebne poizvedbe. Cilj Hiberhata je, da tako rešimo 95 % dela s podatkovno bazo. Za ostalo še vedno napišemo klasične poizvedbe SQL. Aplikacija Podatkovni objokti Hibernate XML preslikava JDSC&SQL Relacijska podatkovna ba^a Slika E Arhitektura Kibernata Odklopljeni razredi Da ta Sel Da ta Tab le DataColumn DataRow Contra i nt D ata Fiel at ion DataAdapter Connection Command DataReader Slika 1. Arhitektura ADO.NET-a Osnovna arhitektura Hibernata je predstavljena na sliki 2. Objektno-relacijska preslikava ustvarja poseben sloj, ki se programerju predstavlja kot objektna podatkovna baza. Ne dela več s tabelami, stolpci, vrsticami, povezavami - elementi, ki sestavljajo relacijsko bazo. Podatki so predstavljeni kot objekti s svojimi metodami, atributi in povezavami z drugimi objekti. Do atributov objekta lahko dostopamo s pomočjo "set" in "get" motod. Poseben sloj Hibernalu omogoča poizvedovanje s posebnim poizvedovalnim jezikom HQL, ki spominja na SQL, vendar je popolnoma objekten. Da Hibernate 6 uPORinx* INFORMATIKA 2005-šlev.lka 1 -letnik XIII Marko štrukelj. Marko Bajec Primerjava tehnologij AD0.NET in Hibernate lahko prebere podatke, generira klasične stavke SQL. Do podatkovne baze dostopa s pomočjo javanske tehnologije JDBC. Hibernate lahko prebrane objekte shranjuje v predpomnilnik, kar zelo pospeši delovanje pri pogostem dostopu do istih podatkov. Poseben nivo objektov in jezik HQL Hibematu omogočata, da je neodvisen od podatkovne baze. Določimo mu različico SQI, jezika, ki naj jo uporablja, ter poskrbimo za ustrezen gonilnik JDBC. Ob menjavi podatkovne baze samo zamenjamo nastavitve za vrsto podatkovne baze in gonilnik JDBC. Takšen način pa deloma omejuje zmogljivost Hibe rn a ta, saj lahko podpira samo skupno podmnožico zmogljivosti vseh podatkovnih baz. Do baze pa lahko dostopamo tudi s klasičnimi SQL stavki, kar omogoča izkoriščanje večine zmogljivosti podatkovne baze in optimizacijo poizvedb. Programer mora za objektno-relacijsko presliko-vanje izdelali XML datoteko, ki vsebuje podatke za preslikavo. Iz nje se lahko avtomatično ali ročno izdela javanske razrede. Možna ji- tudi izdelava XML datoteke iz javanskih razredov, če vanje dopišemo potrebne parametre v zapisu favaDoe. Primer zapisa objektho-relacijske preslikave v XML zapisu: «class nafne^'Racun* table^ "RAČUN"» «property naroeE"stRacuha" column-"st_racuna" type■'string* length-"-JO"/> «property name-'datum* type-"date" /> ■cinany-Lo-one naroe "partner" class=*Partner* column-*partnerID* not-null "true"/> Hibernate zna iz preslikave sam tvoriti tabele, stolpce in omejitve v podatkovni bazi. To lahko izvede celo sam ob zagonu programa. Poizvedbe, napisane v jeziku HQ L, Hibernate prevede v SQL poizvedbe. Prevajanje ni vedno optimalno. Po trditvah iz uradne dokumentacije (7) naj bi to povzročilo manj kot 10 % dodatnih JDRC klicev. Zaradi pred po m njen j a je število klicev lahko manjše, kot bi jih bilo sicer, pri nepravilnem delu pa tudi bistveno večje. Hibernate je, tako kot tudi ostale tehnologije za objektno-relacijsko preslikavo, nastal po vzoru poslovnih javanskih zrn. Poslovna javanska zrna sestavljajo trije tipi poslovnih objektov (zrn): • sejni (sessioti bcans), kjer se nahaja poslovna logika, • entitetni (čutiti/ bcans), ki predstavljajo podatke, • sporočilni (message driven beans), za procesiranje Messaging Service (IMS) sporočil. Hibernate nadomešča le enlitelna zrna (entity bcnns). Njegova pomembna prednost v primerjavi z entitetnimi zrni je, da ga lahko uporabljamo tudi zunaj programskega strežnika. Ko ga uporabljamo v programskem strežniku, sejna in sporočilna zrna Še vedno uporabljajo svojo funkcijo. 3 Primerjava V nadaljevanju sledi podrobnejša primerjava tehnologij Hibernate in ADO.NET. V primerjavo smo vključili vse kriterije, ki so se nam zdeli pomembni za tovrstno tehnologijo. Ti so: • preslikava v objekte in tipizacija atributov, • pred pomnjenje, • odklopljen način dela s podatki, ■ poizvedovanje po podatkih, • generiranje enostavnih poizvedb, • branje podatkov po potrebi, ■ prenos prek omrežja, ■ poizvedovanje po podatkih v pomnilniku, • vezava na komponente uporabniškega vmesnika, • sočasno spreminjanje podatkov, ■ podpora podatkovnih baz, » čas učenja, - podpora in dokumentacija, • licenčne pravice, • razvoj v prihodnosti. 3.1 Preslikava u objekte in tipizacija atributov Atributi objekta (oz. v relacijskem modelu stolpci tabele) so lahko glede na način, kako se do njih dostopa, tipizirani ali netipizirani. Do tipiziranih atributov dostopamo prek "set" in "get" metod, kar imenujemo močna tipizacija atributov. Primer (v javi): String naKivPartnerja = partner.