Follow Us on Twitter

Open Source Persistence Frameworks

Oktober 2005 - Hoewel veel applicaties elke dag de brug slaan tussen object oriëntatie (OO) en een relationale database, blijven het 2 aparte werelden. Voor het bouwen van elke applicatie moet er dan ook moeite worden gedaan om deze werelden op de juiste manier met elkaar te verbinden.

Gezien het feit dat elke applicatie hiermee worstelt, is het mogelijk om een generiekere abstractielaag te bedenken waarmee de communicatie tussen een Java applicatie en een relationele database kan worden gerealiseerd. Deze persistence laag kan worden ingevuld door een persistence framework.

Er zijn op de markt commerciele producten te vinden, die een invulling geven aan de persistence laag, zoals bijvoorbeeld Toplink van Oracle (besproken in eerdere Whitebooks). Er zijn echter ook diverse open source frameworks. Sommige frameworks zijn nieuw en anderen gaan al geruime tijd mee en behoren daarmee tot de 'proven technologies'.

Dit Whitebook geeft een korte beschrijving van wat een persistence framework is en welke aspecten een rol kunnen spelen bij de keuze voor een bepaald framework. Daarbij wordt specifiek gekeken naar de open source frameworks iBatis en Hibernate.

Wat is een persistence framework? Persistence in brede zin omvat onder meer het verzamelen van gegevens binnen een tijdelijke opslag (bijvoorbeeld in het geheugen) en het opslaan van deze gegevens in een meer permanente vorm. Een applicatie zal gegevens niet alleen kwijt willen in een permanente opslag, maar ook weer daaruit terug willen lezen. Vanuit OO perspectief gaat de voorkeur uit naar een opslag, waarin dezelfde structuur kan worden gehanteerd. Doordat het aantal OO-databases eerder af dan toe neemt, wordt in de praktijk eigenlijk altijd met een relationele database gewerkt.

Een persistence framework is dan ook niet alleen verantwoordelijk voor het opslaan van gegevens in en het halen van gegevens uit een database. Het framework moet er ook voor zorgen dat de objecten op de juiste manier en op de juiste plaats binnen het relationele datamodel worden opgeslagen. Met deze definitie lijkt een framework de oplossing voor elke applicatie. Echter elk framework heeft voor- en nadelen. Dit is bepalend voor het toepassingsgebied en de mogelijkheden van het framework.

Een goede implementatie van een generiek persistence framework biedt belangrijke voordelen. De vervelende stappen voor het opslaan van gegevens in een database kunnen aanzienlijk worde vereenvoudigd, waardoor de bouwtijd wordt verkort. Maar een framework kan ook veel flexibiliteit betekenen. Indien onderdelen van een applicatie of een relationeel model veranderen, kan het framework deze veranderingen vereenvoudigen of zelfs transparant maken. Door enkel de mapping in de persistence laag aan te passen kan in veel gevallen deze wijziging al worden opgevangen. Een laatste voordeel van een persistence framework is het vormen van een abstractie-laag tussen de applicatie en de database. Hiermee wordt het mogelijk om de achterliggende database te vervangen, zonder dat er iets aan de applicatie wordt gewijzigd.

Hibernate

Hibernate is een Open source framework, dat al geruime tijd wordt toegepast binnen vele java projecten. Voor een open source project is het belangrijk dat er een community aanwezig is, die de ontwikkeling van het project stimuleert. Hibernate heeft met zijn leeftijd en schare aanhangers inmiddels een belangrijke positie binnen de java wereld.

De basis van Hibernate is object/relational (O/R) mapping: het vertalen van objecten naar database entiteiten. Binnen Hibernate wordt alle SQL gegenereerd op basis van mappings. Deze mappings worden vastgelegd in een centrale mapping file. Indien er specifieke acties moeten worden uitgevoerd richting de database, kan gebruik worden gemaakt van de taal HSQL: een OO query taal, die feitelijk een transparante laag vormt bovenop SQL. Daarmee kan de programmeur zich met objecten bezig houden, terwijl de Hibernate de juiste SQL statements voor de juiste entiteiten in de database uitvoert.

Hibernate is lichtgewicht, eenvoudig in gebruik en heeft een goede performance. Het maakt de database transparant, waardoor het lijkt of er objecten in zijn opgeslagen. Als het relationele model goed ontworpen is en aansluit bij de gebruikte data in de te bouwen applicatie, is Hibernate een goede oplossing.

Een goede vuistregel: als bij de start van een project er volledige controle is over de inrichting van de database, is een O/R tool als Hibernate de juiste keuze.

Echter, als er gebruik wordt gemaakt van een database die door anderen is ontworpen, of als er moet worden gewerkt tegen een legacy database of misschien zelfs als het gaat om een slecht ontworpen database, dan is een O/R mapper vaak niet in staat om goed met de database om te gaan. Op dat moment kan het handiger zijn om een SQL Mapper te gebruiken.

iBatis

Sinds enkele maanden is iBatis een project geworden onder de Apache paraplu. Hierdoor kan het project gebruik maken van de community van Apache, wat een positieve invloed heeft op de toekomst van het project. iBatis valt in de categorie SQL Mappers. Een SQL Mapper heeft geen beperkingen op het mappen van een Object Model en een Data model, zelfs als het slecht ontworpen is.

Een SQL Mapper vertaalt objecten naar SQL statements. De statements worden niet gegenereerd en de mapping is compleet onafhankelijke van de database entiteiten en de relaties hiertussen. Dit heeft als voordeel dat het niet uitmaakt hoe het ontwerp van de database er uit ziet. Elk voordeel heeft natuurlijk ook nadelen. De programmeur zal zelf de juiste SQL-statements moeten schrijven voor het opslaan en ophalen van de juiste data, terwijl in het geval van Hibernate dit voor het grootste gedeelte gegenereerd wordt. Er gaat dus veel meer tijd zitten in het maken van deze mappings.

iBatis biedt dezelfde mate van abstractie en transparantie als Hibernate, maar is op een andere manier flexibel dan Hibernate.

Conclusie

Belangrijke eigenschappen van een persistence framework:

  • eenvoud
  • abstractie
  • transparantie
  • flexibiliteit

Bijna alle persitence frameworks bevatten bovenstaande eigenschappen in meer of mindere mate. Echter elk framework heeft zijn eigen toepassingsgebied. Let daarom bij de keuze voor een framework op de mogelijkheden en toepasbaarheid in de te gebruiken situatie.

Referenties

 

Over de auteur
Herman Suijs is een van de trekkers van de Java groep binnen Whitehorses. Hij combineert de kennis van moderne Oracle oplossingen, zoals de Integration suite en Portal, met ruime ervaring van J2EE.

Waardering:
 

Reacties

Nieuwe reactie inzenden

De inhoud van dit veld is privé en zal niet openbaar worden gemaakt.

Meer informatie over formaatmogelijkheden

CAPTCHA
Deze vraag is om te testen of u een persoon bent en om spam te voorkomen
Image CAPTCHA
Enter the characters shown in the image.