ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών Οδηγός Εργαστηρίου: Ανάπτυξη Υπηρεσιών Ιστού ΓΕΩΡΓΙΟΣ Χ. ΑΘΑΝΑΣΟΠΟΥΛΟΣ
1 Εισαγωγή Στόχος του παρόντος οδηγού είναι η εξοικείωση με τις τεχνολογίες ανάπτυξης υπηρεσιών ιστού καθώς και με τις τεχνολογίες ανάπτυξης πελατών αυτών. Βάση για τον συγκεκριμένο οδηγό είναι η χρήση της πλατφόρμας του Netbeans v6.8. Απαραίτητη στα πλαίσια του παρόντος οδηγού είναι η ύπαρξη των κάτωθι plugin στην πλατφόρμα ανάπτυξης: - XML Schema & WSDL - RESTful Web Services - SOAP Web Services Τα εργαλεία αυτά θα αποτελέσουν το περιβάλλον ανάπτυξη υπηρεσιών και των αντίστοιχων πελάτών. 2 Προετοιμασία Περιβάλλοντος Για επιβεβαίωση της υπάρξης των καθορισμένων plugin μπορείτε από το μενού Tools->Plugins να εξετάσετε την λίστα των Installed plugins. Στο εμφανιζόμενο παράθυρο θα πρέπει να υπάρχουν τα καθορισμένα plugins όπως παρουσιάζονται και κάτωθι: Εικόνα 1: Λίστα installed plugins Στην περίπτωση που τα σχετικά plugins δεν είναι εγκατεστημένα θα πρέπει να επιλεγούν από την λίστα των Available Plugins και να εγκατασταθούν. Σημειώνεται ότι για το «XML Schema & WSDL» plugin θα πρέπει να έχει προστεθεί στα Settings το update center: http://dlc.sun.com.edgesuite.net/netbeans/updates/6.7.1/uc/final/beta/
Για την εγκατάσταση των plugins που λείπουν ακολουθούμε τις οδηγίες εγκατάστασης που είχαν παρουσιαστεί στον 1 ο οδηγό. 3 Οδηγός Ανάπτυξης Υπηρεσιών Ιστού Το περιβάλλον NetBeans μπορεί να υποστηρίξει διάφορες μεθοδολογίες ανάπτυξης υπηρεσιών ιστού. Στα πλαίσια του εργαστηρίου θα εξετάσουμε: - Ανάπτυξη απλών υπηρεσιών - Ανάπτυξη υπηρεσιών με βάση WSDL 3.1 Απλές υπηρεσίες ιστού Για την ανάπτυξη απλών υπηρεσιών ιστού (SOAP based) θα ακολουθήσουμε τα βήματα του οδηγού που προσφέρεται από το NetBeans. https://netbeans.org/kb/docs/websvc/jax-ws.html Ο οδηγός υποστηρίζει την ανάπτυξη μιας απλής υπηρεσίας όπως πχ. ενός calculator καθώς και μερικών απλών πελατών (clients) σε διάφορες μορφές. Από τις προσφερόμενες μορφές πελατών θα ασχοληθούμε με την ανάπτυξη μιας απλής Java εφαρμογής. 3.2 Υπηρεσίες Ιστού με βάση WSDL Η συγκεκριμένη μέθοδος ανάπτυξης υπηρεσιών ιστού στηρίζεται στην χρήση διαθέσιμης περιγραφής WSDL. Ως εκ τούτου θα πρέπει να πρώτα να προχωρήσουμε στην ανάπτυξη της WSDL περιγραφής. 3.2.1 Δημιουργία νέων τύπων Η διαδικασία καθορισμού της WSDL περιγραφής ξεκινά με την επιλογή δημιουργία νέου WSDL κειμένου από το NetBeans. Η επιλογή αυτή μας οδηγεί στο παράθυρο του wizard δημιουργία WSDL (Εικόνα 2).
Εικόνα 2: Wizard δημιουργίας WSDL Επιλέγοντας Next οδηγούμαστε στο επόμενο βήμα της διαδικασίας η οποία περιλαμβάνει τον καθορισμό των βασικών παραμέτρων. Στα διαθέσιμα πεδία πέρα από το όνομα του αρχείου και τον φάκελο στον οποίο θα δημιουργηθεί ορίζουμε ότι αυτό θα αντιστοιχεί σε concrete WSDL description και επιλέγουμε το είδος του Binding που θα υποστηρίξουμε (Εικόνα 3).
Εικόνα 3: Wizard καθορισμού WSDL Το επόμενο βήμα του οδηγού μας προσφέρει δυνατότητες για τον καθορισμό των μεθόδων και τον ορισμάτων που θα προσφέρονται από την υπηρεσία που ακολουθεί την συγκεκριμένη περιγραφή (Εικόνα 4). Στην περίπτωση απλών προγραμματιστικών διεπαφών μπορούμε να ορίσουμε τις σχετικές μεθόδους με τα απαραίτητα ορίσματα.
Εικόνα 4: Παράθυρο καθορισμού μεθόδων και ορισμάτων Επιλέγοντας το Next οδηγούμαστε στο τελευταίο παράθυρο του οδηγού στο οποίο μπορεί κανείς να καθορίσει τα ονόματα για το binding, port και service που θα χρησιμοποιηθούν από την αντίστοιχη υπηρεσία (Εικόνα 5).
Εικόνα 5: Καθορισμός concrete πληροφορίας για την υπηρεσία Το αποτέλεσμα του σχετικού οδηγού είναι η δημιουργία του WSDL κειμένου με την αρχικά καθορισμένη μορφή. Για την δημιουργία πιο σύνθετων μεθόδων οι οποίες περιλαμβάνουν την ανταλλαγή πιο περίπλοκων μηνυμάτων είναι απαραίτητος ο καθορισμός της δομής των σχετικών τύπων δεδομένων που θα χρησιμοποιηθούν. Η διαδικασία ορισμού των νέων τύπων δεδομένων μπορεί να πραγματοποιηθεί με δύο εναλλακτικούς τρόπους: Α) με τον καθορισμό εντός του WSDL των νέων τύπων, ή Β) με τον ορισμό των νέων τύπων σ ένα XSD schema document το οποίο θα συνδεθεί με το WSDL κείμενο. Από το NetBeans μπορούμε να εκτελέσουμε οποιαδήποτε από τις δύο αυτές επιλογές. Στα πλαίσια του οδηγού ακολουθούμε την πρώτη επιλογή. Κατά αυτό τον τρόπο επιλέγοντας το node Types στην παρουσιαζόμενη δομή, εμφανίζεται (με δεξί κλικ) το μενού των σχετικών επιλογών. Από αυτές επιλέγουμε την προσθήκη ενός νέου inline schema.
Κατόπιν στην εκτεταμένη δομή που δημιουργείτε επιλέγουμε την δημιουργία ενός νέου σύνθετου XML τύπου.
Στο παράθυρο που εμφανίζεται μπορούμε καθορίσουμε την μορφή του σχετικού τύπου και διάφορα επιπλέον στοιχεία όπως το όνομα του και την δομή του. Στην περίπτωση μας επιλέγουμε τα κατάλληλα στοιχεία έτσι ώστε ο νέος τύπος να αντιστοιχεί σε μια λίστα αντικειμένων.
Στον νέο κόμβο που εμφανίζεται για τον συγκεκριμένο τύπο επιλέγουμε την προσθήκη των συστατικών του, τα οποία στην περίπτωση μας αντιστοιχούν στην δομή που θα χρησιμοποιήσουμε για την αναπαράσταση ενός αντικειμένου. Από τις εμφανιζόμενες επιλογές επιλέγουμε την δημιουργία ενός Element το οποίο θα χρησιμοποιήσουμε για την αναπαράσταση του αντικειμένου.
Για το στοιχείο του Product επιλέγουμε και αυτό να είναι ένα complex στοιχείο το οποίο θα περιλαμβάνει την πληροφορία που θα έχουμε για κάθε αντικείμενο. Στην περίπτωση μας αυτή η πληροφορία θα περιλαμβάνει: - Ένα αναγνωριστικό του προϊόντος, και - Μια περιγραφή.
Ολοκληρώνοντας την διαδικασία δημιουργία του τύπου Product. Επιλέγουμε τον σχετικό κόμβο και προσθέτουμε τα επιμέρους στοιχεία ακολουθώντας την ίδια διαδικασία αλλά αυτή την φορά επιλέγοντας απλούς τύπους δεδομένων για τα Elements του αναγνωριστικού και της περιγραφής.
3.2.2 Ορισμός Μεθόδων Το επόμενο βήμα της διαδικασίας μας είναι η προσθήκη της λειτουργίας που θα χρησιμοποιεί την νέα δομή καθώς και των μηνυμάτων που θα στηρίζονται σε αυτή. Η διαδικασία περιλαμβάνει την επιλογή του κόμβου για την περιγραφή του porttype της υπηρεσίας και την εμφάνιση του μενού προσθήκης Operation.
Από το εμφανιζόμενο παράθυρο επιλέγουμε το όνομα της νέας λειτουργίας και τα στοιχεία που θα αντιστοιχούν στη είσοδο και έξοδο που περιμένει η λειτουργία αυτή.
Στην περίπτωση μας επιλέγουμε να μην δίνεται κανένα όρισμα στην είσοδο, οπότε και πρέπει να επιλέξουμε την διαγραφή του part που έχει προστεθεί ήδη στο input, ενώ για το επιστρεφόμενο αποτέλεσμα αυτό θα περιλαμβάνει ένα Part το οποίο αντιστοιχεί στην λίστα των διαθέσιμων προϊόντων. Για τον λόγο αυτό ο τύπος του part που αντιστοιχεί στο Output θα πρέπει να αλλάξει και από string να οριστεί στην νέα δομή που καθορίσαμε. Επιλέγοντας το κουμπί δίπλα στον τύπο string οδηγούμαστε σε παράθυρο απ όπου μπορούμε να επιλέξουμε τον σχετικό τύπο.
Επιλέγοντας κατόπιν την ολοκλήρωση της διαδικασίας προσθήκης της νέας λειτουργίας οδηγούμαστε στην τελική μορφής της WSDL περιγραφής. Για διευκόλυνση από την τελική μορφή που θα υλοποιήσουμε στα πλαίσια του οδηγού έχουμε αφαιρέσει την λειτουργία που είχε προστεθεί από την εκτέλεση των αρχικών βημάτων του οδηγού. Κατά αυτό τον τρόπο η τελική μορφή της WSDL περιγραφής θα έχει ως εξής:
3.2.3 Ανάπτυξη Υπηρεσίας Έχοντας ολοκληρώσει την περιγραφή της επιθυμητής υπηρεσίας ακολουθούμε τον οδηγό ανάπτυξης υπηρεσίας με την χρήση διαθέσιμης περιγραφής. Στο αναδυόμενο παράθυρο επιλέγουμε τις τιμές για το όνομα της υπηρεσίας (όνομα java class που θα δημιουργηθεί) καθώς και το που θα προστεθεί η κλάση για την υλοποίηση της. Κατόπιν κάνοντας Browse επιλέγουμε το αρχείο wsdl που δημιουργήσαμε στα προηγούμενα βήματα και συμπληρώνεται αυτόματα η πληροφορία για τα υπόλοιπα πεδία.
Ολοκληρώνοντας τα βήματα του οδηγού εμφανίζεται στον editor του NetBeans η κλάση που αντιστοιχεί στην υλοποίηση της υπηρεσίας με mockup υλοποίηση για την καθορισμένη λειτουργία.
Σημαντικό στοιχείο το οποίο πρέπει να προσεχθεί είναι ότι μετά την ολοκλήρωση του οδηγού έχουν δημιουργηθεί και σχετικές κλάσεις για την αναπαράσταση των τύπων δεδομένων που ορίσαμε. Τονίζεται ότι η υλοποίηση της λειτουργικότητας που ορίσαμε θα πρέπει να περιλάβει την χρήση των σχετικών κλάσεων για τους καθορισμένους τύπους δεδομένων. Ένα παράδειγμα ως προς την πιθανή υλοποίηση την οποία θα μπορούσαμε να έχουμε για την λειτουργία επιστροφής της λίστας των προϊόντων παρουσιάζεται στην συνέχεια.
Για την ολοκλήρωση της διαδικασίας προσφοράς της υπηρεσίας σημειώνεται ότι πρέπει να κληθεί η επιλογή Deploy από το μενού των διαθέσιμων ενεργειών του project.
4 Ανάπτυξη Κώδικα Πελάτη Για την χρήση των διαθέσιμων υπηρεσιών θα πρέπει κανείς να αναπτύξει clients οι οποίοι χρησιμοποιούν την προσφερόμενη λειτουργικότητα. Οι πιθανοί clients που μπορεί κανείς να αναπτύξει μπορεί να είναι διαφόρων ειδών, πχ: - Java desktop applications - Web applications - WS-BPEL processes Στα πλαίσια του παρόντος οδηγού θα στηριχθούμε στην ανάπτυξη μιας ξεχωριστής Web εφαρμογής με βάση τον οδηγό του NetBeans: https://netbeans.org/kb/docs/websvc/client.html Από τα υποστηριζόμενα από τον οδηγό μοντέλα κλήσης θα στηριχθούμε στην χρήση σύγχρονων κλήσεων. 5 Ερωτήματα Ασκήσεις 1. Υλοποιήστε την ίδια λειτουργικότητα ως REST και SOAP based υπηρεσίες. Τονίζουμε ότι για την υλοποίηση ως SOAP υπηρεσία θα πρέπει να
υλοποιηθεί κατάλληλος μηχανισμός που να επιτρέπει την διασύνδεση με την ίδια βάση δεδομένων και την επιστροφή ως XML των αντίστοιχων αποτελεσμάτων. Κατόπιν αναπτύξτε Java εφαρμογή η οποία καλεί και τις δύο υπηρεσίες και εμφανίζει τα προσφερόμενα αποτελέσματα. Μετρήστε πειραματικά τους χρόνους απόκρισης των υπηρεσιών και υπολογίστε την μέση τιμή για κάθε υπηρεσία. Υπάρχουν διαφορές; Πως τις δικαιολογείτε;