|
Tags: Database | Hibernate | Oracle
| ||
| ||
ICT Solutions gebruikt Hibernate in combinatie met Oracle RAC voor bedrijfskritische toepassingenIan Hoogeboom is senior technisch ontwerper bij ICT Solutions en vertelt over zijn ervaring met Hibernate in combinatie met Java EE, Oracle RDBMS en Oracle RAC. Hij staat stil bij de voor- en nadelen van ORM frameworks zoals Hibernate en geeft enkele tips om achteraf problemen te voorkomen.Relationeel versus objectgeoriënteerdIn een objectgeoriënteerde omgeving worden relaties gelegd tussen objecten met behulp van associaties. Dit is anders dan bij relationele modellering die bij databases wordt gehanteerd. Hierbij worden de relaties tussen tabellen gelegd door middel van primary- en foreignkeys.De twee methodieken verschillen zodanig van elkaar dat ze niet één op één op elkaar kunnen worden afgebeeld. Dit komt simpelweg doordat de wijze van objectbenadering anders is. In een objectmodel bewandel je objecten direct via hun relaties, in tegenstelling tot een relationeel model waarbij je tabellen moet joinen voor hetzelfde resultaat. Dit verschil tussen het objectmodel en het relationele model wordt het object relationele paradigma genoemd. Deze probleemstelling was de aanleiding voor de ontwikkeling van ORM tools en in ieder ORM framework staat het oplossen dit paradigma centraal. (zie voorbeeld objectmodel) In het verleden is vaak geprobeerd om dit probleem binnen projecten op te lossen. Ook ICT heeft al in de beginjaren van Java EE een framework gebouwd dat dit probleem tackelt. Dit framework is gebruikt voor tal van projecten, maar heeft behoorlijke concurrentie gekregen van open-source oplossingen zoals Spring en Hibernate. Het nut van ORMHet is mogelijk om los van het objectmodel een apart relationeel model te maken en via ODBC, JDBC of een database API losse objectattributen op te slaan. Maar uiteindelijk is het doel om in onze objectgeoriënteerde omgeving hele objectstructuren transparant te kunnen persisteren en op ieder gewenst moment weer op te vragen. Met behulp van een ORM framework zoals Hibernate kan eenvoudig het objectmodel vertaald worden naar een overeenkomstig relationeel model. De objecten kunnen hierdoor direct worden opslagen en opgevraagd zonder dat hier ook maar iets voor de databasetoegang gecodeerd hoeft te worden.De voor- en nadelenDe bekende gezegde “elk voordeel heeft een nadeel”, gaat ook hier op. Een aantal voor- en nadelen op rij:Voordelen • Snellere integratie van databasetoegang door het uit handen nemen van vaak lastige persistentieimplementatie; • Overdraagbaarheid van de applicatie door de goede databaseonafhankelijkheid van ORM frameworks. Nadelen • Totaal andere werkwijze. Ontwikkelaars krijgen veel meer te maken met ‘object lifecycles’ dan met het ophalen en opslaan van gegevens. Dit vergt vaak een grote aanpassing voor ontwikkelaars die de meer traditionele manieren van persistentie gewend zijn; • Afscherming van de database voor de ontwikkelaar. Er is kennis van het onderliggende ORM framework nodig om inzichtelijk te krijgen wat er zicht afspeelt tussen de applicatie en de database. Bij (performance) problemen kan het dan erg lastig zijn te achterhalen wat er mis gaat. HibernateHibernate is het meest gebruikte ORM framework in de Java omgeving. Het biedt volledig transparante persistentie voor zogenaamde Plain Old Java Objects (POJO’s). Het fungeert vaak als vervanging voor Entity Beans, maar kan ook los gebruikt worden in een standalone Java applicatie. Het wordt vaak gezien als de lichtgewicht variant voor de ‘zware’ en soms lastige EJB Entity Beans. Dit laatste dreef Gavin King, hoofdontwikkelaar van Hibernate, om een vervangende technologie voor EJB Entity Beans te ontwikkelen. Dit werd zo’n succes dat hij later een grote bijdrage heeft mogen leveren aan de ontwikkeling van de EJB 3.0 specifi catie. Veel functionaliteiten van Hibernate zijn terug te vinden in de Java Persistence API.Hibernate is zowel te gebruiken in Java EE als standalone omgevingen. Hierdoor bestrijkt het een zeer groot gebied van de Java ontwikkelwereld en is het terug te vinden in steeds meer en meer ontwikkeltrajecten. Door de grote (open-source) achterban is er bovendien veel informatie beschikbaar en is uitgebreide ondersteuning voorhanden in tools zoals Eclipse. Het is mogelijk om zowel de eigen Hibernate query taal (HQL) als standaard SQL en JDBC door elkaar te gebruiken, waardoor men niet gedwongen wordt om zich alleen maar de Hibernate-regels te hoeven houden. Hierdoor is Hibernate een zeer fl exibele ORM oplossing. OptimalisatieBij optimalisatie van objectpersistentie zal onder andere een compromis gevonden moeten worden tussen het ophalen van zo min mogelijk data en het voorkomen dat hierdoor vaak de database benaderd moet worden. Bij het ophalen van zo min mogelijk data per keer, is de kans groot dat men veel vaker de database moet benaderen dan eigenlijk de bedoeling is (het N+1 probleem). Het ophalen van een complete objectboom is daarentegen soms teveel van het goede. Het probleem hierbij is dat de werking vaak niet of nauwelijks transparant is voor de ontwikkelaar. De code werkt, maar kan bij een hoge belasting van de applicatie en database of bij grote hoeveelheden data uiteindelijk problemen gaan geven.Doordat het gebruik van een ORM framework op het eerste gezicht het leven van de ontwikkelaar makkelijker maakt, is het noodzaak dat de onderliggende techniek niet uit het oog verloren wordt. Zoals bij de meeste frameworks kan met een te geringe kennis van de onderliggende techniek, meer schade worden aangericht dan dat het framework oplevert. Kennis van het ORM framework, SQL en het relationele model blijft essentieel. Een kleine groep specialisten kijkt bij voorkeur mee in de ontwerp- en implementatiefase. Voor optimalisatie of het oplossen van database-specifi eke problemen is het soms onontkoombaar om in te grijpen met database-vendor afhankelijke middelen. Het kan hierbij gaan om bijvoorbeeld tijdelijk andere isolationlevels of select-options. Hibernate staat dit bijvoorbeeld toe, maar dan is met hard-gecodeerde database-opties de overdraagbaarheid van de applicatie naar andere de RDBMS-en verloren gegaan. Tips & TricksKennis van SQL en het bekendheid met codegeneratie van het framework, alsmede hoe dit naar database toe gecommuniceerd wordt, is belangrijk om problemen te voorkomen die later zonder diepgaande kennis lastig zijn op te lossen. Zorg daarom voor een specialist die tijdens het hele ontwikkeltraject betrokken is. Laat de betrokken specialist monitoren of het ORM framework juist wordt toegepast en wat de impact is op DB-niveau. Zo komen eventuele problemen niet als een verrassing achteraf. Het is achteraf namelijk lastiger en duurder om problemen in het object- of relationele model op te lossen. De twee modellen zijn in een ORM oplossing namelijk sterk aan elkaar gekoppeld.ORM i.c.m. Clustering en High AvailabilityORM en de huidige trend van schaalbare, geclusterde en high availability oplossingen, zoals Oracle RAC en IBM HACMP, gaan prima samen. Het vormt in ieder geval geen belemmering tijdens de ontwikkeling. Men moet meer rekening houden met de clusteroplossingen tijdens de ontwerpfase dan in de ontwikkelfase. Vaak zijn het ook de database-drivers of applicatie-servers die zich bezig moeten houden met de confi guratie hiervan. Deze leveren uiteindelijke toegang tot de database, al dan niet met behulp van connection pooling.
PraktijkvoorbeeldenBinnen diverse projecten die ICT Solutions heeft uitgevoerd is Hibernate succesvol geïntegreerd met Java EE, Spring en Oracle RAC. De fl exibiliteit van Hibernate heeft ons hierbij in staat gesteld om specifi eke oplossingen, waaronder tabel-partitionering en synchronisatie door locking, buiten Hibernate om te implementeren. Daarnaast is binnen een onderzoeksproject dat intern is uitgevoerd in zeer korte tijd een bijna volwaardig product gerealiseerd. Wat begon als demo, is mede door gebruik te maken van Hibernate (en Spring) als fundering, doorontwikkeld tot een volwaardige oplossing. | ||
| Lees meer over ICT Solutions | ||
| Ga terug naar We Love IT uitgave #6 - 2007 | ||
|




