Παρακολουθώντας το ADF εδώ και περίπου μια δεκαετία, είναι πράγματι εντυπωσιακό πως σήμερα υπάρχουν αναρίθμητες πηγές πληροφορίες, είτε πρόκειται για επίσημη τεκμηρίωση, τίτλους βιβλίων ή άρθρα bloggers. Είχαμε αναφερθεί στο παρελθόν σε κάποιους τίτλους όπως για παράδειγμα το Oracle ADF Enterprise Application Development made simple ενώ υπάρχουν και αρκετοί από το Oracle Press. Η θεμελιώδης διαφοροποίηση του JDeveloper Cookbook (που μάλλον ορθότερα θα έπρεπε να είχε ονομαστεί ADF Cookbook) είναι ότι προϋποθέτει μια εις βάθος γνώση του ADF και δεν καταπιάνεται με την ερμηνεία ή την περιγραφή των βασικών εννοιών: αντίθετα προτείνει λύσεις σε συντεταγμένα προβλήματα της ανάπτυξης λογισμικού, που προκύπτουν αναμφίβολα όταν μια καλά δομημένη ομάδα αναλαμβάνει να εκτελέσει ένα μεγάλο έργο και χρειάζεται έναν ενιαίο τρόπο αντιμετώπισης διαφόρων ζητημάτων.
Έχουμε να κάνουμε λοιπόν με πάνω από 120 "συνταγές" σε θέματα ανάπτυξης στο ADF 11g, διατρέχοντας το ADF BC, τον ADF Controller, το επίπεδο του JSF και διάφορα κάθετα θέματα όπως debugging, deployment, tuning, κλπ. Το στυλ της παρουσίασης των θεμάτων είναι εξαιρετικό και ακολουθεί αυτό των blogs του Νίκου: περιγράφεται αρχικά το πρόβλημα, δίνεται μια αναλυτική, βήμα-βήμα προσέγγιση επίλυσης με συνοδευτικά screenshots, ακολουθεί μια εις βάθος ερμηνεία για τον τρόπο λειτουργίας της λύσης και στο τέλος υπάρχουν σχόλια για επεκτάσεις ή αναφορές. Στα πλεονεκτήματα αυτού του βιβλίου θα πρέπει επομένως να συνυπολογίσουμε το στυλ της γραφής που είναι άμεσο, κατανοητό και πλήρες. Στη διάρκεια της περιγραφής των "συνταγών" παραδίδεται άφθονος κώδικας που επίσης περιλαμβάνεται ανά κεφάλαιο στο online παράρτημα του βιβλίου, κάτι που επίσης μου άρεσε πολύ. Οι περισσότερες συνταγές αφορούν συχνά προβλήματα στην ανάπτυξη ADF εφαρμογών, γεγονός που τις κάνει πολύ χρήσιμες. Από την άλλη, υπάρχει κατά περίπτωση μια ανισορροπία στην επιλογή των συνταγών: κάποιες προσφέρονται εδώ και καιρό από την επίσημη τεκμηρίωση της Oracle (δηλαδή το Fusion Middleware Developer's Guide), άλλες είναι εξαιρετικά απλές, άλλες κάπως πιο σύνθετες, ενώ απουσιάζουν κάποια σημαντικά θέματα κατά τη γνώμη μου, σχετικά με transaction management, javascript support, ADF regions, κ.α. Ας δούμε όμως με περισσότερες λεπτομέρειες τα κεφάλαια αυτού του βιβλίου:
Το πρώτο κεφάλαιο (Prerequisites to Success: ADF Project Setup and Foundations) έχει να κάνει με τη ρύθμιση του JDeveloper σε περιβάλλον Linux, τη δημιουργία των βασικών κλάσεων ενός έργου, τον τεμαχισμό σε βιβλιοθήκες, το logging, τη δημιουργία page templates ή τη δημιουργία ενός custom generic actions framework. Τόσο το κεφάλαιο των βιβλιοθηκών, όσο και των page templates ή των βασικών κλάσεων καλύπτονται αρκετά αναλυτικά από την τεκμηρίωση της Oracle και ίσως μια απλή αναφορά θα ήταν αρκετή. Στο δεύτερο κεφάλαιο (Dealing with Basics: Entity Objects) δίνονται συνταγές για την κατασκευή κλειδιών από Oracle Sequences, για τη διαχείριση του κύκλου ζωής ενός entity (doDML, removal, child removal, validation) και αν και υπάρχουν επικαλύψεις στην τεκμηρίωση είναι ένα πολύ καλό κεφάλαιο. To ίδιο ισχύει και με το "A Different Point of View: View Object Techniques" που περιγράφει το iteration στις εγγραφές ενός view object, την αλλαγή των ιδιοτήτων updateable και queriable προγραμματιστικά ενός πεδίου, τον ορισμό του currentRow πριν και μετά από ένα rollback, την ανίχνευση νέων εγγραφών, την αλλαγή του WHERE clause, κλπ. Ίσως θα ήταν προτιμότερο να συγχωνευτεί εννοιολογικά με το επόμενο κεφάλαιο ("Important
Contributors: List of Values, Bind Variables, View Criteria") που επίσης καλύπτει κάποια ήδη γνωστά θέματα (cascade lovs, lov switcher, view criteria) αλλά προστίθενται και άλλα όπως η αλλαγή ή ο καθαρισμός των bind variables ή η case-insensitive αναζήτηση.
Προχωρώντας στο κεφάλαιο 5 ("Putting them all together: Application Modules") θα βρούμε συνταγές για το πώς θα φτιάξουμε ένα Web Service από τα ADF BC μας και πώς αντίστοιχα θα το καταναλώσουμε ως Web Service client, ένα καλό παράδειγμα για την τροποποίηση της συμπεριφοράς activate/passivate του framework, τη δυνατότητα άντλησης στατιστικών για το Application Modules, shared LOV modules και επέκταση του Database Transaction Factory. Αμέσως μετά θα δούμε τεχνικές για τα task flows όπως την αρχικοποίηση τους (με custom μεθόδους από το Application Module ή με initializer), την κλήση ενός task flow URL, τη δημιουργία ενός train flow ή την ανάκτηση πληροφοριών μέσα από το MDS. To κεφάλαιο για τα ADF Faces εισάγει λίγα καινούργια στοιχεία αφού θέματα για την παραμετροποίηση του af:query, το χρήση του af:tree, του af:poll, του af:carousel, του af:selectManyShuttle ή του pop-up για την επεξεργασία εγγραφής περιγράφονται αναλυτικά στην επίσημη τεκμηρίωση. Ξεχωρίζει όμως εδώ η συνταγή για την χρήση page templates στα popups ενώ καλή είναι η ενδεικτική λύση για το export file αλλά ατυχής η υλοποίηση (όπου τα περιεχόμενα του αρχείου περιλαμβάνονται σε μια java.lang.String μεταβλητή)
Στο Backing not Baking:Bean Recipes έχουμε χρήσιμες συνταγές για ένα af:popup που θα ειδοποιεί για εκκρεμείς αλλαγές (pending changes), για custom selection listener, μια εξαιρετική αναφορά για custom query listeners και για popup που ενημερώνουν για μεγάλης διάρκειας συναλλαγές (transactions), την χρήση του af:iterator σε σχέση με ένα custom collection και μια αχρείαστη αναφορά στην εκμετάλλευση session μεταβλητών (που ούτως ή άλλως αποθαρρύνεται από το framework) To κεφάλαιο 9 (Handling Security, Session Timeouts, Exceptions, and Errors) δεν προσθέτει κάτι καινούργιο ως προς την διάσταση της ασφάλειας (για παράδειγμα αναφέρει τη λειτουργία του ADF Security Wizard, την προγραμματιστική πρόσβαση στο security context, μια custom login page) Αντίθετα, πιο ενδιαφέρουσες συνταγές είναι αυτές που περιγράφουν την διαχείριση του session timeout και την διαχείριση λαθών από έναν custom exception handler που μετασχηματίζει μηνύματα λαθών από τα ADF BC.
To κεφάλαιο του deployment (Deploying ADF Applications) περιγράφει ανάμεσα στα άλλα την χρήση του εργαλείου ojdeploy για την αυτοματοποίηση εργασιών (build και deploy) μέσω του Hudson. To επόμενο κεφάλαιο (Refactoring, Debugging, Profiling, and Testing) θα έλεγα πως περιγράφει περισσότερο θεωρητικά τις δυνατότητες της πλατφόρμας παρά δίνει πρακτικές συνταγές για την αξιοποίησή της. Θέματα που καλύπτονται εδώ είναι το database synchronization των ADF BC, το refactoring στα ADF BC, η δυνατότητα του remote debugging και του CPU profiling (που παρεμπιπτόντως δεν υποστηρίζεται στο Linux) η διαχείριση log μηνυμάτων και η χρήση του JUnit για unit testing. Σε έναν βαθμό, υπάρχει αποζημίωση στο τελευταίο κεφάλαιο (Optimizing,
Fine-tuning, and Monitoring) όπου δίνονται μερικές καλές συμβουλές για τη βελτιστοποίηση του ADF BC (απουσιάζουν όμως αντίστοιχες τεχνικές για τα ADF Faces), υπάρχει μια εξαιρετική συνταγή για τους Weblogic Work Managers και τέλος υπάρχει μια φτωχή αναφορά από την σκοπιά του ADF στο JRockit Mission Control για την παρακολούθηση ενός συστήματος.
Ως συμπέρασμα θα έλεγα πως το βιβλίο αυτό είναι ένα εξαιρετικό υπόδειγμα γραφής ώστε ομάδες ανάπτυξης να γράψουν τα δικά τους συνταγολόγια (cookbooks) προσαρμοσμένα στις ιδιαιτερότητες των έργων που έχουν να αντιμετωπίσουν, δανειζόμενες αρκετές από τις συνταγές του βιβλίου. Είναι επίσης ένα χρήσιμο βοήθημα γιατί συγκεντρώνει καλές πρακτικές σε έναν μόνο τίτλο. Από την άλλη, περιλαμβάνει και μερικά θέματα που έτσι και αλλιώς είναι καταγεγραμμένα σε μεγάλο βαθμό στην επίσημη τεκμηρίωση της Oracle, ενώ θα ήθελα να δω πολύ και συνταγές με άλλα εξελιγμένα ζητήματα όπως ADF regions, bindings, JSF 2.0, javascript integration, ui design και transaction management που απασχολούν ολοένα και περισσότερο πιο εξελιγμένα έργα βασισμένα στο ADF.
Ένα ενδεικτικό κεφάλαιο του βιβλίου βρίσκεται εδώ.
No comments:
Post a Comment