Σημειώσεις:Τεχνολογίες Υλοποίησης:Hibernate
Από DistrSys
Πίνακας περιεχομένων |
Hibernate
Οι περισσότερες εφαρμογές πρέπει να χρησιμοποιήσουν κάποιου είδους δεδομένα. Παρά το γεγονός ότι το πρόβλημα της διατήρησής τους δεν αποτελεί κάποιο καινούριο ή ασυνήθιστο θέμα για τις εφαρμογές που είναι γραμμένες σε Java ο προγραμματιστής δεν έχει την δυνατότητα απλά να αποφασίσει ποιο δρόμο να ακολουθήσει επιλέγοντας από μια γκάμα παρόμοιων και ευρέως χρησιμοποιούμενων λύσεων.
Για πολλά χρόνια η διατήρηση δεδομένων (persistence) υπήρξε θέμα συζήτησης στην κοινότητα των προγραμματιστών της Java. Πολλοί προγραμματιστές δε συμφωνούν ούτε καν με το θέμα του προβλήματος. Είναι η διατήρηση δεδομένων ένα πρόβλημα που έχει ήδη λυθεί από τη σχεσιακή τεχνολογία (relational technology) και επεκτάσεις (extensions) αυτής, όπως οι αποθηκευμένες διαδικασίες (stored procedures), ή αποτελεί ένα πιο σημαντικό πρόβλημα το οποίο χρειάζε- ται διαχείριση μέσω ειδικών μοντέλων όπως τα Enterprise Java Beans (EJB)·Πρέπει να χρησιμοποιείται SQL κώδικας ακόμη και για τις πιο κλασικές ενέργειες όπως create, read, update, delete ή πρέπει αυτές να γίνονται αυτόματα· Πώς επιτυγχάνεται μεταφερσιμότητα, όταν κάθε σύστημα διαχείρισης βάσεων δεδομένων χρησιμοποιεί τη δική του διάλεκτο· Πρέπει η SQL να εγκαταλειφθεί τελείως και να υιοθετηθεί ένα διαφορετικό σύστημα διαχείρισης βάσεων δεδομένων· Η συζήτηση συνεχίζεται. Παρ́ όλα αυτά, για την επίλυση του προβλήματος έχει αναπτυχθεί μία προγραμματιστική τεχνική γνωστή ως ‘Αντιστοίχηση μεταξύ ∆εδομένου - Σχέσης’ — object/relational mapping (ORM) — η οποία έχει αποκτήσει ευρεία αποδοχή.
∆ιατήρηση δεδομένων στην Java
Για την διατήρηση των δεδομένων (persistence) στην Java, στα πλαίσια των Enterprice Java Beans 3, έχει οριστεί μία τεχνολογία που ονομάζεται Java Persistence API. Η τεχνολογία αυτή ορίζει ένα περιβάλλον εργασίας (framework) για την αντιστοίχηση οντοκεντρικών μοντέλων (object - oriented models) σε σχήματα παραδοσιακών σχεσιακών βάσεων δεδομένων. Κεντρικός στόχος για την ανάπτυξή της υπήρξε ο ορισμός ενός ενιαίου τρόπου για την διατήρηση δεδομένων σε όλες τις Java εφαρμογές.
Τι είναι η Hibernate
Η Hibernate αποτελεί μία βιβλιοθήκη ελεύθερου λογισμικού για τη γλώσσα προγραμματισμού Java, η οποία υλοποιεί την διεπαφή που ορίζεται στα πλαίσια του Java Persistence API. Είναι μία ολοκληρωμένη λύση στο πρόβλημα της διαχείρισης δεδομένων εκτελώντας όλες τις ενέργειες μεταξύ των εφαρμογών και των σχεσιακών βάσεων δεδομένων απαλλάσσοντας τον προγραμματιστή από επιπρόσθετο κόπο και τον κίνδυνο αστοχιών στην αποτύπωση σχέσεων μεταξύ κλάσεων και σχήματος βάσης.
Ο κεντρικός στόχος αυτής είναι η δημιουργία μίας διεπαφής (interface) μεταξύ των διαδεδομένων σχεσιακών βάσεων δεδομένων και του αντικειμενοστραφούς προγραμματισμού. Με άλλα λόγια, επιτρέπει τη χρήση μίας σχεσιακής βάσης δεδομένων ως αντικειμενοστραφή. Για την επίτευξη αυτού, δημιουργούνται αντιστοιχίες μεταξύ των εννοιών του αντικειμενοστραφούς προγραμματισμού, όπως οι συσχετίσεις, η κληρονομικότητα και ο πολυμορφισμός (τα οποία δεν υπάρχουν σε μία σχεσιακή βάση δεδομένων), και των πινάκων και σχέσεων μεταξύ αυτών μίας σχεσιακής βάσης. Με αυτόν τον τρόπο ο προγραμματιστής βλέπει τελικά μία αντικειμενοστραφή βάση δεδομένων, παρ́ όλο που στην ουσία χρησιμοποιεί μία σχεσιακή. ́Ετσι ο προγραμματιστής χρησιμοποιεί τα αντικείμενα της συγκεκριμένης εφαρμογής, τα τροποποιεί σχετικά με τη λογική της εφαρμογής που αναπτύσσει και τα αποθηκεύει (τροποποιεί, διαγράφει και αναζητά) στη βάση ως αντικείμενα. Σκέπτεται, δηλαδή, με αντικειμενοστραφείς έννοιες και όχι με βάση το σχήμα της σχεσιακής βάσης δεδομένων. ́Ετσι η Hibernate, γνωρίζοντας την αν-τιστοιχία μεταξύ βάσης και λογικής της εφαρμογής, αναλαμβάνει να κατασκευάσει τον κατάλληλο κώδικα τον οποίο στέλνει τελικά στη βάση δεδομένων. ́Επειτα τα αποτελέσματα που επιστρέφονται από τη βάση στην Hibernate δίνονται στην εφαρμογή ως αντικείμενα. Πρόκειται, δηλαδή, ένα ενδιάμεσο επίπεδο μεταξύ εφαρμογής και βάσης δεδομένων.
Πλεονεκτήματα χρήσης της Hibernate
Υπάρχουν πάρα πολλοί λόγοι για τους οποίους κάποιος θα επέλεγε να χρησιμοποιήσει τη Hibernate για την ανάπτυξη μίας εφαρμογής που χρειάζεται κάποιου είδους πρόσβαση σε βάση δεδομένων. Οι πιο σημαντικοί από αυτούς συνοψίζονται παρακάτω :
- Η Hibernate ενδείκνυται για ανάπτυξη πολύπλοκων εφαρμογών. Παρέχει μια σειρά από εργαλεία που επιτρέπουν την εύκολη αποτύπωση αντικειμενοστραφών εννοιών σε σχήματα βάσης ασχέτως του είδους της βάσης που χρησιμοποιείται. Επιτρέπει τη χρήση κληρονομικότητας, πολυμορφισμού και σύνθεσης (composition) στις αντιστοιχιζόμενες κλάσεις και παρέχει μια πολύ ισχυρή γλώσσα ερωτημάτων, την HQL, η οποία επιτρέπει τη χρήση όλων των παραπάνω.
- Μπορεί να βοηθήσει να βελτιωθεί η απόδοση της εφαρμογής. Αυτή η βελτίωση πολύ δύσκολα θα επιτυγχανόταν δημιουργώντας απ ́ ευθείας κώδικα που να εκτελεί τις επιθυμητές λειτουργίες (hand-coding). Η Hibernate δημιουργεί πολύ αποδοτικά ερωτήματα, πράγμα που διασφαλίζει την απόδοση σε πολλές περιπτώσεις. Εκτός αυτού, όμως, υποστηρίζει μία πολύ έξυπνη και αποδοτική πολιτική πρώτου και δεύτερου επιπέδου caching.Με αυτόν τον τρόπο επιτυγχάνεται μεγάλη δυνατότητα κλιμάκωσης. Επίσης δίνει τη δυνατότητα στον προγραμματιστή να επιλέξει το επίπεδο caching που επιθυμεί, όντας πολύ έξυπνη στην πολιτική των write-backs. Επίσης,μπορεί να συνδυαστεί πολύ καλά με κάποια από τα σημαντικότερα λογισμικά caching τόσο ελεύθερου λογισμικού όσο και εμπορικά πακέτα.
- Επιτρέπει σε μεγάλο βαθμό τη μεταφερσιμότητα των εφαρμογών μεταξύ σχεσιακών βάσεων δεδομένων. Η μόνη διαφοροποίηση στις περισσότερες των περιπτώσεων είναι η αλλαγή μίας μόνο παραμέτρου — της διαλέκτου επικοινωνίας με την βάση. Επιπλέον, οι κλάσεις που αντιστοιχίζονται είναι απλές κλάσεις Java (Plain Old Java Objects — POJOs). ́Ετσι δε χρειάζεται να είναι απόγονοι μιας πολύπλοκης υποχρεωτικής δομής, με αποτέλεσμα να αυξάνεται ακόμη περισσότερο η μεταφερσιμότητα.
- Παρ́ όλο που χρειάζεται κάποιο χρόνος για την εκμάθησή της, η Hibernate τελικά αυξάνει σε μεγάλο βαθμό την παραγωγικότητα. Ο προγραμματιστής ενδιαφέρεται μόνο για τα αντικείμενα. Αυτά αποθηκεύονται στη βάση και ανακτώνται από αυτήν με ελάχιστο κόπο.

