Linux Inside
79
JSF (Java Server Faces)
Ωραία όλα αυτά. Πού... κολλάει, όμως, σε όλα τα παραπά-
νω το JSF (Java Server Faces); Δεν αρκούν όλα τα παραπάνω
για να φτιάξουμε μία Java EE εφαρμογή; Η απάντηση είναι...
και ναι και όχι; Εξηγούμαι: Προφανώς μπορεί να «ζήσει» κά-
ποιος χωρίς το JSF. Μία Java EE εφαρμογή μπορεί να γίνει
και χωρίς τη χρήση JSF. Το JSF είναι ένα framework μέσω
του οποίου μπορούμε να δημιουργήσουμε το user interface
(UI) της εφαρμογής μας. Όπως καταλαβαίνετε, το UI μπορεί
να δημιουργηθεί και μόνο με χρήση HTML (δεν θα σας το συ-
νιστούσα!). Γιατί, λοιπόν, να καταφύγουμε στο JSF; Υπάρχουν
πολλοί λόγοι. Ο πιο σημαντικός, όμως, κατά τη γνώμη μου εί-
ναι ότι με το JSF η δημιουργία (αλλά και η συντήρηση–επέ-
κταση) του UI της εφαρμογής μας είναι πολύ πιο εύκολη. Να
μην αναφέρουμε, βέβαια, την εγγενή δυνατότητα AJAX επι-
κοινωνίας με τον server που παρέχει το JSF, την ταχύτητά του
και την ελκυστική εμφάνιση των components που υπάρχουν
στην default βιβλιοθήκη του, καθώς και τη χρήση των γνω-
στών html tags που χρησιμοποιούνται για την εισαγωγή των
UI components σε μία σελίδα. Και τέλος, ας μην ξεχνάμε ότι
το JSF υποστηρίζεται από τη Sun, τη «μαμά» εταιρεία της
Java! Γενικά, αυτό που πρέπει να θυμόμαστε σχετικά με το
JSF είναι ότι μέσω αυτού «φτιάχνουμε» τις σελίδες της εφαρ-
μογής μας. Το μόνο που χρειάζεται για να τοποθετήσουμε
ένα UI component του JSF σε μία σελίδα της εφαρμογής
μας, είναι να γράψουμε το κατάλληλο tag (π.χ., <h:form
...</h:form>) του component στο σημείο όπου θέλουμε να
εμφανίζεται. Κοιτάξτε, για παράδειγμα, τον κώδικα του πλαι-
σίου 1 (welcome.xhtml), ο οποίος δεν διαφέρει από τη μορφή
html μίας ιστοσελίδας που ξέρουμε μέχρι τώρα και παράγει
την ιστοσελίδα που φαίνεται στην
εικόνα 1.
Βλέπετε αρχικά ότι για να χρησιμοποιήσουμε τα JSF UI
components, πρέπει να ορίσουμε τα κατάλληλα namespace
(xmlns:f=”http://java.sun.com/jsf/core” για τα βασικά
components του JSF και xmlns:h=”http://java.sun.com/jsf
/html” για τα components του JSF που αντιστοιχούν σε HTML
components). Αφού δηλώσαμε τα namespaces, μπορούμε
πλέον να τα χρησιμοποιήσουμε στις ιστοσελίδες της εφαρμο-
γής μας (<h:inputText value=”#{helloBean.name}”>
</h:inputText>) με τον ίδιο τρόπο που θα κάναμε αν γράφα-
με απλή html! Να μην ξεχάσουμε να πούμε σε αυτό το σημείο
ότι το NetBeans (αλλά και το Eclipse) παρέχει εγγενή υποστή-
ριξη για το JSF, οπότε δεν θα παιδευτείτε με τη ρύθμισή του!
Hibernate
Είπαμε προηγουμένως ότι προκειμένου να επιτευχθεί η
σωστή διασύνδεση της εφαρμογής μας με τη βάση δεδομέ-
νων στην οποία θα είναι αποθηκευμένη η πληροφορία που
θέλουμε να χρησιμοποιήσουμε, χρειαζόμαστε και μία
object–relational mapping (ORM) βιβλιοθήκη. Ας πούμε πε-
ρισσότερα πράγματα γι’ αυτό λοιπόν. Ως γνωστόν, το προ-
γραμματιστικό μοντέλο που κυριαρχεί στην εποχή μας είναι
το object–oriented, σύμφωνα με το οποίο δημιουργούμε κλά-
σεις αντικειμένων οι οποίες παράγουν αντικείμενα που χρησι-
μοποιούμε στο πρόγραμμά μας. Η Java είναι και αυτή μία
object–oriented γλώσσα προγραμματισμού. Από την άλλη,
όπως προείπα, η αποθηκευμένη πληροφορία σε μία σχεσιακή
βάση δεδομένων είναι οργανωμένη σε πίνακες οι οποίοι σχε-
τίζονται μεταξύ τους με κάποιον τρόπο. Βλέπουμε, λοιπόν, ότι
όταν θέλουμε να χρησιμοποιήσουμε αυτές τις δύο προσεγγί-
σεις (αντικειμενοστραφής προγραμματισμός και σχεσιακές
βάσεις δεδομένων) ταυτόχρονα υπάρχουν ασυμβατότητες
που πρέπει να επιλυθούν. Ε, αυτό ακριβώς κάνει μία
object–relational mapping (ORM) βιβλιοθήκη, όπως η
Hibernate! Αναλαμβάνει, δηλαδή, να επιλύσει τα προβλήματα
επικοινωνίας μεταξύ κλάσεων και σχεσιακών πινάκων. Για να
το επιτύχει αυτό, ουσιαστικά συνδυάζει κλάσεις με πίνακες.
Για παράδειγμα, ένας πίνακας μίας βάσης δεδομένων μέσω
του Hibernate μετατρέπεται σε μία κλάση, όπου, όμως, οι
ιδιότητες του πίνακα (πρωτεύον κλειδί, μοναδικές τιμές κ.λπ.)
προστίθενται στην κλάση μέσω annotations. Ας υποθέσουμε,
για παράδειγμα, ότι σε μία βάση δεδομένων υπάρχει ο πίνα-
κας ΝΟΜΟΣ, ο οποίος περιέχει ως στήλες το ID του Νομού,
το οποίο είναι μοναδικό, και το λεκτικό του Νομού, το οποίο
είναι ένα String. O πίνακας αυτός δημιουργείτο με την παρα-
κάτω εντολή SQL:
CREATE TABLE IF NOT EXISTS `nomos` (
`id` INT(11) NOT NULL ,
`onoma` VARCHAR(50) NULL ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `idnomos_UNIQUE` (`id` ASC) ) ;
Το Hibernate παίρνει, λοιπόν, αυτόν τον πίνακα και δημι-
ουργεί την παρακάτω κλάση:
@Entity
@Table(name = “nomos”)
public class Nomos implements java.io.Serializable {
private int id;
private String onoma;
public Nomos() {
}
public Nomos(int id) {
this.id = id;
}
public Nomos(int id, String onoma) {
this.id = id;
this.onoma = onoma;
}
@Id
Linux Labs - Java EE
Το αποτέλεσμα του welcome.xhtml.
1
Το JSF είναι ένα framework μέσω του οποίου
μπορούμε να δημιουργήσουμε το user interface
(UI) της εφαρμογής μας.