Dec 11, 2010

Αξιοποιώντας τα XML metadata του ADF

Έχει περάσει αρκετός καιρός σε σχέση με το τελευταίο άρθρο που είχε να κάνει με την άντληση γνώσης από τα XML αρχεία στα οποία στηρίζεται το ADF (http://serafeimk.blogspot.com/2010/07/xml-artifacts-adf.html) Αυτή τη φορά βρίσκομαι στην πολύ ευχάριστη θέση να περιγράψω την πρόοδο αυτού του έργου, να δώσω παραδείγματα λειτουργίας και να παρουσιάσω τους στόχους για το αμέσως επόμενο χρονικό διάστημα.


Η κεντρική ιδέα έχει να κάνει με την κατανόηση της δομής ενός έργου, του κώδικα που περιλαμβάνει και την εξαγωγή ευφυϊας από ένα ADF project. Σε αντίθεση με άλλες τεχνολογίες ή frameworks, το ADF ακολουθώντας μια «περιγραφική» (declarative) προσέγγιση για την επιτάχυνση της ανάπτυξης διαδικτυακών εφαρμογών κάνει μια εκτενή χρήση metadata σε μορφή XML. Η επεξεργασία αυτών των αρχείων μπορεί να μας οδηγήσει σε:

  • γρήγορη κατανόηση της δομής μιας εφαρμογής

  • επιβεβαίωση της εφαρμογής κανόνων επιχειρηματικής λογικής (business logic)

  • έλεγχο ποιότητας (quality assurance) και αντιπαραβολή με ισχύοντες κανόνες προγραμματισμού

  • καλύτερο προγραμματισμό έργου (project management) γνωρίζοντας σε ρεαλιστικό βαθμό το ποσοστό υλοποίησης

  • ακριβή ανάλυση επιπτώσεων (impact analysis) σε περίπτωση αλλαγών στον κώδικα καθώς και εξακρίβωση των συσχετίσεων μεταξύ διαφόρων στοιχείων


Σε συνεργασία με τον Δημήτρη Στασινόπουλο (http://dstas.blogspot.com) έχουμε αναπτύξει ένα κορμό που αναλαμβάνει να διαβάσει διαφόρους τύπους XML αρχείων που διαχειρίζεται το ADF (πχ. Entity/view objects, task flows, κλπ) και να αποθηκεύσει τα περιεχόμενα τους, σε μορφή οργανωμένη και αναλυτική σε μια σχεσιακή βάση δεδομένων, ώστε να μπορεί να γίνει αντικείμενο αναφορών (SQL reporting) Είναι σημαντικό να αναγνωρίσουμε εδώ πως σε ορισμένες περιπτώση (πχ για τα βασικά ADF objects, όπως entities, view objects, κλπ) η οργάνωση των XML αρχείων ακολουθεί ένα συγκεκριμένο σχήμα (XSD) γεγονός που κάνει πιο εύκολη την ανάγνωσή τους και την κατανόηση της δομής τους.


Ξεκινώντας λοιπόν την κατηγοριοποίηση των στοιχείων που εμπλέκονται στο ADF έχουμε να κάνουμε:

  1. Με περιγραφικά δεδομένα σχετικά με entities, view objects, application modules και εν γένει με αυτό που ονομάζεται ADF Business Components (BC) και αποτυπώνεται σε XML αρχεία

  2. Με Java κλάσεις που επεκτείνουν τις δυνατότητες των ADF components

  3. Αυτόνομες Java κλάσεις που χρησιμοποιούνται για διάφορους λόγους

  4. Property files και bundles

  5. Με task flows που υλοποιούν την λογική του ADF Controller

  6. Με σελίδες JSF που περιγράφουν το user interface

  7. Με αρχεία page definition που είναι υπεύθυνα για το data-binding

  8. JSF backing beans

  9. Με διάφορα βοηθητικά αρχεία σε μορφή XML που αφορούν κάθετους τομείς όπως διαμόρφωση ασφάλειας (πχ. αρχείο jazn-data.xml), οργάνωση δομής του JDeveloper (.jpr και .jws αρχεία), κλπ


Σε πρώτο στάδιο το έργο που έχουμε αναπτύξει εστιάζει στις XML απεικονίσεις των στοιχείων (και όχι σε πηγαίο κώδικα), τις οποίες και τελικά αποθηκεύει σε μια βάση δεδομένων. Για το πώς θα γίνει αυτή η μετατροπή, έχουμε δοκιμάσει δυο τρόπους:

  1. μετατροπή που στηρίζεται στην χρήση ενός λεξικού (dictionary) που αντιστοιχίζει XPath διαδρομές του αρχείου προς ανάγνωση με κολόνες και πίνακες σε μια βάση δεδομένων. Τα πλεονέκτηματα αυτής της μεθόδου έχουν να κάνουν με το μικρό μέγεθος του κώδικα προς συντήρηση, την επεξεργασία απλά του dictionary table για την προσθήκη νέων στοιχείων (δηλαδή διαδρομών), την πιο παραμετροποιημένη αντιστοίχηση στοιχείων XML με database tables, κ.α.

  2. μετατροπή που στηρίζεται σε μια Java-XML binding διαδικασία, σύμφωνα με την οποία, τα σχήματα των αρχείων που θα διαβαστούν έχουν ήδη απεικονιστεί σε Java κλάσεις, οπότε η ανάγνωση ενός αρχείου δημιουργεί μια σειρά από Java objects που τελικά αποθηκεύονται (persist) σε μια βάση. Πλεονεκτήματα αυτής της μεθόδου περιλαμβάνουν την άμεση προσαρμογή σε αλλαγές στα XSDs του ADF, την αναπαράσταση απείρων επιπέδων ιεραρχίας, την μεταφερσιμότητα σε διάφορες βάσεις δεδομένων, την δυνατότητα ανάστροφης διαδρομής και παραγωγής ADF XML από ένα code generator, κ.α.


Λόγω ότι ήδη έχει υλοποιηθεί ένα παλαιότερο έργο στην πρώτη επιλογή, προς το παρόν αυτή η λύση έχει προβάδισμα και μας προσφέρει τα πρώτα αποτελέσματα προς επίδειξη. Αξίζει να σημειωθεί πως και οι δύο λύσεις «πατάνε» καλύτερα όταν υπάρχει ένα XSD σχήμα. Έπειτα από έρευνα σε αυτόν τον τομέα, καταλήξαμε στα εξής συμπεράσματα σχετικά με τις κατηγορίες αρχείων του ADF:


  1. Για την πρώτη κατηγορία (entities, view objects, application modules) υπάρχουν τα συνοδευτικά XSDs στην διαδρομή $MIDDLEWARE_HOME/ racle_common\modules\oracle.adf.model_11.1.1/adfm.jar

  1. Για τη δε κατηγορία των page definitions, βρίσκονται και αυτά στην παραπάνω διαδρομή

  2. Για τα task flows definitions, θα μπορούμε να τα βρούμε στην διαδρομή $MIDDLEWARE_HOME/ racle_common\modules\oracle.adf.model_11.1.1/adf-controller-schema.jar


  1. Για την περίπτωση των JSPX αρχείων δεν υπάρχει αντίστοιχο XSD (αφού η περιγραφή των component tags βρίσκεται σε tld αρχείο) άρα η αποθήκευση ολόκληρου του αρχείου είναι επιβεβλημένη (η ιδέα της αποθήκευσης σε πολλαπλούς πίνακες φαντάζει δύσκολη) καθώς και η χρήση XPath expressions για την άντληση γνώσης.

  2. Η αποτελεσματική επεργασία των Java source αρχείων είναι κάτι που προγραμματίζουμε να δούμε στο επόμενο διάστημα, διαθέτοντας ήδη πολλές ιδέες.


Πέρα από την αποθήκευση σε σχεσιακή μορφή, σώζουμε ταυτόχρονα και την πρωτογενή μορφή των αρχείων του ADF, καθώς έχουμε διαπιστώσει πως πολλά ερωτήματα reporting απαντώνται πιο γρήγορα και αποδοτικά με XPath queries.


Η τελική διαδικασία μπορεί να εκκινηθεί δηλώνοντας μια διαδρομή πάνω στο δίσκο που περιλαμβάνει ένα ADF project και αφότου έχουμε δηλώσει τις πληροφορίες σύνδεσης με την βάση δεδομένων που τελικά θα αποθηκεύσει τα αποτελέσματα. Έπειτα, ένα προς ένα όλα τα αρχεία που έχουν σημασία για το ADF θα διαβαστούν και θα σωθούν στη βάση (σε πρωτογενή και αναλυμένη μορφή). Πρόκειται για μια επεξεργασία που σε ένα μεγάλο έργο (πχ 100 application modules) αναμένεται να κρατήσει κάποιο σοβαρό χρόνο, οπότε κατευθυνόμαστε:

    • αφενός στην προσέγγιση ενός ANT build script που θα την ξεκινά (ενδεχομένως σε καθημερινή βάση ως τμήμα μιας continuous integration υποδομής)

    • στην καλύτερη παραμετροποίησή της ώστε να επεξεργάζεται συγκεκριμένες κατηγορίες (πχ entities) ή εν γένει να ενσωματώνει φίλτρα ή να ανανεώνει και να συγκρίνει παλαιότερα τρεξίματα


Στο τέλος αυτής της διαδικασίας, το ADF project μας βρίσκεται αποθηκευμένο ως «φύλλο και φτερό» σε μια βάση, οπότε μπορούμε να κάνουμε ελεύθερα τα SQL ερωτήματά μας σε ένα απλό και κατανοητό σχήμα. ή να χρησιμοποιήσουμε ερωτήματα βασισμένα στο XPath και στο XQuery ώστε να ρωτήσουμε τη βάση δεδομένων στην αρχική μορφή αποθήκευσης των αρχείων. Σε αυτό το σημείο υπάρχουν δύο ακόμα δυνατότητες:

  • Άμεσης χρήσης μέσω ενός SQL εργαλείου (πχ SQL Developer) βασικών reports (top-20) που έχουμε κατασκευάσει και αφορούν συχνά σφάλματα βασισμένα σε best practices. Φυσικά μας είναι εύκολο να προσθέσουμε νέα reports κατόπιν απαίτησης.

  • Χρησιμοποίησης μιας custom Flex-based εφαρμογής που έχουμε φτιάξει ώστε να γίνεται η παραγωγή των παραγωγή των παραπάνω αναφορών και η δημιουργία νέων.


Δουλεύουμε ώστε να έχουμε έτοιμη την πρώτη δοκιμαστική έκδοση στις αρχές Ιανουαρίου 2011, που ενδεχομένως να φιλοξενηθεί σε μια cloud computing υποδομή ώστε να μπορέσει να την ελέγξει κάποιος άμεσα μέσα από το web. Είδωμεν !

No comments: