Προγραμματισμός

BPEL: Σύνθεση υπηρεσίας για SOA

Το BPEL (Business Process Execution Language) έχει γίνει μια από τις πιο σημαντικές τεχνολογίες του SOA (αρχιτεκτονική προσανατολισμένη στις υπηρεσίες) και επιτρέπει την εύκολη και ευέλικτη σύνθεση των υπηρεσιών σε επιχειρηματικές διαδικασίες. Το BPEL είναι ιδιαίτερα σημαντικό επειδή εισάγει μια νέα ιδέα στην ανάπτυξη εφαρμογών - προγραμματισμός-σε-το-μεγάλο. Αυτή η ιδέα μας δίνει τη δυνατότητα να αναπτύξουμε διαδικασίες γρήγορα καθορίζοντας τη σειρά με την οποία θα ζητηθούν οι υπηρεσίες. Με αυτόν τον τρόπο, οι εφαρμογές (και τα συστήματα πληροφοριών) γίνονται πιο ευέλικτες και μπορούν να προσαρμοστούν καλύτερα στις αλλαγές στις επιχειρηματικές διαδικασίες.

Οι επιχειρηματικές διαδικασίες είναι συνήθως δυναμικής φύσης. Οι εταιρείες πρέπει να βελτιώσουν και να τροποποιήσουν, να ενεργήσουν με ευέλικτο τρόπο, να βελτιστοποιήσουν και να προσαρμόσουν τις διαδικασίες για να βελτιώσουν την ανταπόκριση ολόκληρης της εταιρείας. Κάθε αλλαγή και βελτίωση μιας επιχειρηματικής διαδικασίας πρέπει να αντικατοπτρίζεται σε εφαρμογές που παρέχουν υποστήριξη για αυτές. Αν και αυτή η απαίτηση μπορεί να μην φαίνεται πολύ δύσκολο να εκπληρωθεί, η πραγματική κατάσταση μας δείχνει μια διαφορετική εικόνα. Η αλλαγή και η τροποποίηση εφαρμογών είναι συχνά μια δύσκολη δουλειά, η οποία απαιτεί χρόνο. Επομένως, οι εφαρμογές δεν μπορούν να αντιδράσουν άμεσα σε αλλαγές στις επιχειρηματικές διαδικασίες - μάλλον, απαιτούν λίγο χρόνο για την εφαρμογή, τον έλεγχο και την ανάπτυξη των τροποποιήσεων.

Το να κάνουμε τα πληροφοριακά συστήματα πιο ευέλικτα και προσαρμόσιμα στις αλλαγές και η καλύτερη ευθυγράμμιση με τις επιχειρηματικές διαδικασίες είναι η κύρια υπόσχεση του SOA. Σε αυτό το άρθρο, δείχνω γιατί το BPEL είναι τόσο σημαντικό και καταδεικνύει πώς να αναπτύξει μια διαδικασία BPEL.

Προσανατολισμένη στις υπηρεσίες προσέγγιση

Η προσέγγιση SOA για αποτελεσματική αυτοματοποίηση επιχειρηματικών διαδικασιών απαιτεί:

  • Τυποποιημένος τρόπος έκθεσης και πρόσβασης στη λειτουργικότητα των εφαρμογών ως υπηρεσιών
  • Υποδομή εταιρικών λεωφορείων για επικοινωνία και διαχείριση υπηρεσιών, όπως παρακολούθηση μηνυμάτων, δρομολόγηση, μετασχηματισμός κ.λπ.
  • Εξειδικευμένη γλώσσα για σύνθεση εκτεθειμένων λειτουργιών εφαρμογών σε επιχειρηματικές διαδικασίες

Η πρώτη απαίτηση πληρούται από την πιο πρόσφατη κατανεμημένη αρχιτεκτονική - υπηρεσίες Web. Η δεύτερη απαίτηση πληρούται από το ESB (business service bus), το οποίο παρέχει υποστήριξη για κεντρική, δηλωτική και καλά συντονισμένη διαχείριση των υπηρεσιών και των επικοινωνιών τους. Η τρίτη απαίτηση, η σύνθεση υπηρεσιών σε διαδικασίες, πληρούται από την BPEL, την κοινώς αποδεκτή εξειδικευμένη γλώσσα για τον ορισμό και την εκτέλεση επιχειρηματικών διαδικασιών.

Μια επιχειρηματική διαδικασία, όπως φαίνεται από την BPEL, είναι μια συλλογή συντονισμένων προσκλήσεων για υπηρεσίες και συναφών δραστηριοτήτων που παράγουν ένα αποτέλεσμα, είτε μέσα σε έναν οργανισμό είτε σε πολλές. Για παράδειγμα, μια επιχειρηματική διαδικασία για τον προγραμματισμό επαγγελματικών ταξιδιών θα επικαλεστεί πολλές υπηρεσίες. Σε ένα υπερβολικά απλοποιημένο σενάριο, η επιχειρηματική διαδικασία θα απαιτήσει από εμάς να καθορίσουμε το όνομα του υπαλλήλου, τον προορισμό, τις ημερομηνίες και άλλα στοιχεία ταξιδιού. Στη συνέχεια, η διαδικασία θα καλέσει μια υπηρεσία Web για να ελέγξει την κατάσταση του υπαλλήλου. Με βάση την κατάσταση του υπαλλήλου, θα επιλέξει την κατάλληλη τάξη ταξιδιού. Στη συνέχεια, θα καλέσει υπηρεσίες Web πολλών αεροπορικών εταιρειών (όπως η American Airlines, η Delta Airlines κ.λπ.) για να ελέγξει την τιμή των αεροπορικών ναύλων και να αγοράσει αυτήν με τη χαμηλότερη τιμή.

Για τους πελάτες, η διαδικασία BPEL θα εκθέσει τη λειτουργικότητά της με τον ίδιο τρόπο όπως οποιαδήποτε άλλη υπηρεσία Web. Από την πλευρά του πελάτη, θα μοιάζει ακριβώς με οποιαδήποτε άλλη υπηρεσία Ιστού. Αυτό είναι σημαντικό και χρήσιμο, καθώς μας επιτρέπει να συνθέσουμε υπηρεσίες σε απλές διαδικασίες, απλές διαδικασίες σε πιο περίπλοκες διαδικασίες και ούτω καθεξής. Αυτό σημαίνει επίσης ότι κάθε διαδικασία BPEL θα περιγραφεί με μια περιγραφή WSDL (Web Services Desk Language).

Βασικές έννοιες

Το BPEL είναι μια γλώσσα που βασίζεται σε XML. Μια διαδικασία BPEL αποτελείται από βήματα. Κάθε βήμα ονομάζεται δραστηριότητα. Το BPEL υποστηρίζει πρωτόγονες και δομικές δραστηριότητες. Οι πρωτόγονες δραστηριότητες αντιπροσωπεύουν βασικές κατασκευές και χρησιμοποιούνται για κοινές εργασίες, όπως αυτές που αναφέρονται παρακάτω:

  • Επίκληση υπηρεσιών Web, χρήση
  • Αναμονή για το αίτημα, χρησιμοποιώντας
  • Χειρισμός μεταβλητών δεδομένων, χρησιμοποιώντας
  • Υποδεικνύοντας σφάλματα και εξαιρέσεις, χρησιμοποιώντας , και τα λοιπά.

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

  • Αλληλουχία () για τον ορισμό ενός συνόλου δραστηριοτήτων που θα επικαλούνται με μια σειρά
  • Ροή () για τον καθορισμό ενός συνόλου δραστηριοτήτων που θα επικαλούνται παράλληλα
  • Κατασκευή διακόπτη θήκης () για την εφαρμογή κλάδων
  • Ενώ () για τον ορισμό βρόχων, κ.λπ.

Όπως θα δούμε, το BPEL δεν διαφέρει από τις γλώσσες προγραμματισμού, όπως η Java. Αλλά θα δούμε ότι η BPEL διαφέρει από την Java και υποστηρίζει τα χαρακτηριστικά των επιχειρηματικών διαδικασιών. Η BPEL παρέχει επίσης χειριστές σφαλμάτων και αποζημιώσεων, χειριστές συμβάντων και σύνολα συσχέτισης. Παρέχει μέσα για την έκφραση πολύπλοκων παράλληλων ροών. Καθιστά επίσης σχετικά εύκολο να καλείτε ασύγχρονες λειτουργίες και να περιμένετε για επιστροφές.

Οι διεργασίες BPEL απαιτούν περιβάλλον χρόνου εκτέλεσης - έναν διακομιστή BPEL, ο οποίος μας δίνει καλό έλεγχο στην εκτέλεση τους. Συνήθως, οι διακομιστές BPEL παρέχουν έλεγχο σε περιπτώσεις διεργασίας που εκτελούνται και σε αυτές που έχουν ολοκληρωθεί. Υποστηρίζουν μακροχρόνιες διαδικασίες και μπορούν να αφυδατώσουν την κατάσταση της διαδικασίας για να εξοικονομήσουν πόρους. Ορισμένοι διακομιστές παρέχουν έλεγχο των δραστηριοτήτων της διαδικασίας και επιτρέπουν την παρακολούθησή τους. Τέλος, χρησιμοποιώντας έναν διακομιστή BPEL, όλες οι διαδικασίες μας αναπτύσσονται κεντρικά, γεγονός που απλοποιεί τη συντήρηση. Όλα αυτά καθιστούν το διακομιστή BPEL το προτιμώμενο περιβάλλον για την εκτέλεση και τη διαχείριση διαδικασιών.

Η επιλογή του σωστού διακομιστή BPEL μπορεί να είναι αρκετά δύσκολη, ωστόσο, καθώς υπάρχουν πολλές επιλογές. Μερικοί από τους πιο δημοφιλείς διακομιστές BPEL που βασίζονται σε Java EE (το νέο όνομα της Sun για το J2EE) περιλαμβάνουν το Oracle BPEL Process Manager, το IBM WebSphere Business Integration Server Foundation, το BEA WebLogic Integration και το AquaLogic. Υπάρχουν επίσης τουλάχιστον τέσσερις διακομιστές ανοιχτού κώδικα BPEL: ActiveBPEL Engine, FiveSight PXE, bexee και Apache Agila.

Παράδειγμα διαδικασίας

Ας δούμε τώρα ένα παράδειγμα διαδικασίας BPEL για επαγγελματικά ταξίδια που έχουμε περιγράψει παραπάνω. Θα αναπτύξουμε μια ασύγχρονη διαδικασία που θα χρησιμοποιεί μια σύγχρονη κλήση για να ελέγξει την κατάσταση ταξιδιού των εργαζομένων και δύο ασύγχρονες κλήσεις για να αποκτήσει τις τιμές των εισιτηρίων αεροπλάνου. Το παρακάτω σχήμα δείχνει τη συνολική δομή της διαδικασίας μας. Στα αριστερά, βλέπουμε τον πελάτη που καλεί τη διαδικασία. Η διαδικασία καλεί πρώτα την υπηρεσία Web κατάστασης ταξιδιού υπαλλήλου. Στη συνέχεια, επικαλείται ταυτόχρονα και ασύγχρονα τις υπηρεσίες Web των δύο αεροπορικών εταιρειών. Αυτό σημαίνει ότι η διαδικασία θα πρέπει να εφαρμόσει τη λειτουργία επιστροφής κλήσης (και έναν τύπο λιμένα), μέσω της οποίας οι αεροπορικές εταιρείες θα επιστρέψουν την επιβεβαίωση του εισιτηρίου πτήσης. Τέλος, η διαδικασία επιστρέφει την καλύτερη προσφορά αεροπορικών εισιτηρίων στον πελάτη. Σε αυτό το παράδειγμα, για να διατηρήσουμε την απλότητα, δεν θα εφαρμόσουμε κανένα χειρισμό σφαλμάτων, το οποίο είναι ζωτικής σημασίας σε πραγματικά σενάρια.

Ας γράψουμε τώρα τον κωδικό BPEL. Ξεκινάμε με τη δήλωση διαδικασίας - το ριζικό στοιχείο, όπου ορίζουμε το όνομα της διαδικασίας και τους χώρους ονομάτων:

Στη συνέχεια, πρέπει να καθορίσουμε τους συνδέσμους συνεργάτη. Οι σύνδεσμοι συνεργατών ορίζουν διαφορετικά μέρη που αλληλεπιδρούν με τη διαδικασία BPEL. Αυτό περιλαμβάνει όλες τις υπηρεσίες Web που θα κληθούν και τον πελάτη της διαδικασίας. Κάθε σύνδεσμος συνεργάτη καθορίζει έως και δύο χαρακτηριστικά: ο ρόλος μου που δείχνει τον ρόλο της ίδιας της επιχειρηματικής διαδικασίας και partnerRole που δείχνει τον ρόλο του συνεργάτη. Στο παράδειγμά μας, ορίζουμε τέσσερις συνδέσμους συνεργατών:

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

Τώρα είμαστε έτοιμοι να γράψουμε το κύριο σώμα της διαδικασίας. Περιέχει μόνο μία δραστηριότητα ανώτατου επιπέδου. Συνήθως, αυτό είναι που μας επιτρέπει να ορίσουμε διάφορες δραστηριότητες που θα εκτελούνται διαδοχικά. Εντός της ακολουθίας, καθορίζουμε πρώτα το μήνυμα εισαγωγής που ξεκινά την επιχειρηματική διαδικασία. Το κάνουμε αυτό με το build, το οποίο περιμένει το αντίστοιχο μήνυμα. Στην περίπτωσή μας, αυτό είναι το TravelRequest μήνυμα. Μέσα στο κατασκευή, δεν καθορίζουμε άμεσα το μήνυμα. Αντίθετα, καθορίζουμε τον σύνδεσμο συνεργάτη, τον τύπο θύρας, το όνομα λειτουργίας και, προαιρετικά, τη μεταβλητή που κρατά το ληφθέν μήνυμα για επακόλουθες λειτουργίες. Συνδέουμε τη λήψη μηνυμάτων με τον συνεργάτη πελάτη και περιμένουμε το Έγκριση ταξιδιού λειτουργία που θα καλείται στον τύπο θύρας TravelApprovalPT. Αποθηκεύουμε το ληφθέν μήνυμα στο TravelRequest μεταβλητός:

Στη συνέχεια, πρέπει να επικαλεστούμε την υπηρεσία Web Κατάσταση ταξιδιού υπαλλήλου. Πριν από αυτό, πρέπει να προετοιμάσουμε τα στοιχεία για αυτήν την υπηρεσία Web Μπορούμε να δημιουργήσουμε ένα τέτοιο μήνυμα αντιγράφοντας το τμήμα του μηνύματος στον υπάλληλο που έστειλε ο πελάτης. Τώρα μπορούμε να επικαλεστούμε την υπηρεσία Web Status Employee Travel. Κάνουμε μια σύγχρονη επίκληση, για την οποία χρησιμοποιούμε το δραστηριότητα. Χρησιμοποιούμε το υπάλληλοςTravelStatus σύνδεσμος συνεργάτη και επικαλέστε το ΥπάλληλοςTravelStatus λειτουργία στο ΥπάλληλοςTravelStatusPT τύπος θύρας. Έχουμε ετοιμάσει το μήνυμα εισαγωγής στο ΥπάλληλοςTravelStatusRequest μεταβλητός. Επειδή είναι μια σύγχρονη επίκληση, η κλήση περιμένει την απάντηση και την αποθηκεύει στο ΥπάλληλοςTravelStatusResponse μεταβλητός:

Το επόμενο βήμα είναι να επικαλεστεί και τις δύο υπηρεσίες Web αεροπορικών εταιρειών. Και πάλι, προετοιμάζουμε πρώτα το απαιτούμενο μήνυμα εισόδου (το οποίο είναι και για τις δύο υπηρεσίες Web) Θα κάνουμε ταυτόχρονες ασύγχρονες επικλήσεις. Για να εκφράσει την ταυτόχρονη, η BPEL παρέχει το δραστηριότητα. Η επίκληση σε κάθε υπηρεσία Web θα αποτελείται από δύο βήματα:

  1. ο Η δραστηριότητα χρησιμοποιείται για την ασύγχρονη επίκληση
  2. ο Η δραστηριότητα χρησιμοποιείται για να περιμένει την επιστροφή κλήσης

Χρησιμοποιούμε για την ομαδοποίηση και των δύο δραστηριοτήτων. Οι δύο προσκλήσεις διαφέρουν μόνο στο όνομα συνδέσμου συνεργάτη. Χρησιμοποιούμε Αμερικάνικες αερογραμμές για ένα και DeltaAirlines για τον άλλο:

...