ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ Τεχνολογία Διοίκησης Επιχειρησιακών Διαδικασιών Οδηγός Εργαστηρίου: Χρήση ασύγχρονων υπηρεσιών σε BPEL Διεργασίες ΓΕΩΡΓΙΟΣ Χ. ΑΘΑΝΑΣΟΠΟΥΛΟΣ
1 Εισαγωγή Στόχος του συγκεκριμένου οδηγού είναι η εξοικείωση με: - Απλές τεχνικές για την ανάπτυξη ασυχρονων υπηρεσιών στηριζόμενων στην χρήση της BPEL, καθώς και - Στην χρήση ασύγχρονων υπηρεσιών από την BPEL 2 Προσφορά Ασύγχρονων υπηρεσιών Για την ανάπτυξη ασύγχρονων υπηρεσιών προσφέρονται διάφορες τεχνικές και τεχνολογίες. Μεταξύ αυτών κάποιες γνωστές τεχνικές είναι: - Με την χρήση του JAX-WS framework - Με την χρήση BPEL ως ενδιάμεσου Στα πλαίσια του σημερινού εργαστήριου και για λόγους βαθύτερης κατανόησης των δυνατοτήτων της BPEL θα ασχοληθούμε με την δεύτερη τεχνική. Ξεκινώντας από μια απλή υπηρεσία που σαν στόχο έχει την κλήση των υπηρεσιών που προσφέρει το σύστημα του ΤΕΙΡΕΣΙΑΣ, θα δούμε πως η προσφερόμενη υπηρεσία μπορεί να μετατραπεί σε ασύγχρονη για να είναι δυνατή η εκτέλεση του κώδικα πελάτη της διαδικασίας χωρίς αυτή να μπλοκάρει. Ο κώδικας που έχει αναπτυχθεί για την αρχική σύγχρονη υπηρεσία του ΤΕΙΡΕΣΙΑ είναι διαθέσιμος από το NetBeans project : LoanAppWebServices. Η υπηρεσία που μας ενδιαφέρει ονομάζεται TeiresiasCheck και γίνεται διαθέσιμη και από το εξής link: http://chloe.di.uoa.gr:8080/loanappwebservices/teiresiascheckservice?wsdl Για την προσφορά της συγκεκριμένης λειτουργικότητας με ασύγχρονο τρόπο θα πρέπει να αναπτυχθεί κατάλληλη διαδικασία σε BPEL η οποία θα: - Καθορίζει το o interface για την κλήση της λειτουργίας και το o interface για την λήψη της απάντησης - Υλοποιεί το προσφερόμενο ασύγχρονο push μοντέλο εκτέλεσης Η διαδικασία ανάπτυξης ξεκινά με το καθορισμό του WSDL για την υπηρεσία του ΤΕΙΡΕΣΙΑ. Το συγκεκριμένο WSDL προσφέρει δύο ξεχωριστά porttypes (δες παρακάτω) τα οποία υποστηρίζουν την κλήση της λειτουργίας και την ασύγχρονη επιστροφή της απάντησης.
<porttype name="asyncteiresiasprocessporttype"> <operation name="getteiresiasscore"> <input name="input1" message="tns:getteiresiasscorerequest"/> </operation> </porttype> <porttype name="asyncteiresiasprocesscallbackporttype"> <operation name="sendteiresiasscore"> <input name="input1" message="tns:asyncteiresiasprocessoperationrequest"/> </operation> </porttype> Δύο αντίστοιχα bindings και υπηρεσίες καθορίζονται για τα συγκεκριμένα porttypes. H διαδικασία που πρέπει να αναπτυχθεί για την διάθεσης της προσφερόμενης λειτουργίας μπορεί να έχει την κάτωθι μορφή:
Η συγκεκριμένη διαδικασία μετά την κλήση της σύγχρονης υπηρεσίας για τον υπολογισμό της πιστοληπτικής ικανότητας ενός πελάτη περιμένει για ένα συγκεκριμένο χρονικό διάστημα. <wait name="wait1"> <for>'p0y0m0dt0h0m5s'</for> </wait> και καλεί την λειτουργία λήψης της απάντησης (sendteiresiasscore) που προσφέρει το porttype AsyncTeiresiasProcessCallbackPortType. Με την διάθεση της συγκεκριμένης λειτουργίας από το ODE ολοκληρώνεται η μετατροπή μιας σύγχρονης λειτουργίας σε ασύγχρονη μέσω της BPEL. 3 Ανάπτυξη σύνθετης διαδικασίας Για τη κλήση κάποιας ασύγχρονης υπηρεσίας από την BPEL θα πρέπει να δημιουργηθούν αντίστοιχα βήματα στην διαδικασία τα οποία θα επιτρέπουν την κλήση αλλά και την αναμονή απαντήσεων. Μια απλοϊκή διαδικασία η οποία κάνει χρήση της ασύγχρονης προσφερόμενης υπηρεσίας είναι η διαδικασία AsyncLoanApp η οποία εφόσον έχει δοθεί το ΑΦΜ ενός πελάτη καλεί την υπηρεσία του ΤΕΙΡΕΣΙΑ και επιστρέφει το υπολογιζόμενο αποτέλεσμα.
Σημαντικό στοιχείο το οποίο πρέπει να προσεχθεί ιδιαίτερα στο παραπάνω παράδειγμα είναι η χρήση correlations για την σωστή συσχέτιση των ανταλλασσόμενων μηνυμάτων με τα εκτελούμενα instances της διαδικασίας.