Apr 6, 2012

Κάνοντας κλήση σε Java από τα Business Rules του Oracle SOA Suite

Τα στοιχείο (component) Business Rules στο Oracle SOA Suite, επιτρέπει τη δόμηση κανόνων επιχειρηματικής λογικής ή δρομολόγησης εξωτερικά από το service composite μας. Ως αποτέλεσμα, μπορεί να συντηρηθεί αυτόνομα, αποτρέποντας συχνές αλλαγές στα διαγράμματά μας. Πέρα από το ρεπερτόριο των συναρτήσεων που διαθέτει το Business Rules, συχνά θα χρειαστεί να καταφύγουμε στη διασύνδεση με υφιστάμενο κώδικα που θα μας βοηθήσει στον υπολογισμό (evaluation) ενός κανόνα. Το Oracle Business Rules υποστηρίζει διασύνδεση με ADF και Java facts (που πρόκειται να περιγράψουμε εντός ολίγου) ώστε να εντάξουμε και δικούς μας κώδικες στην όλη διαδικασία.

Ας φτιάξουμε λοιπόν ένα νέο SOA project και ας αποθηκεύσουμε μια νέα Java κλάση (έστω στον κατάλογο SCA-INF/src) με έναν απλό κανόνα για την επικύρωση της κάρτας ενός υπαλλήλου. Έστω η μέθοδος validateEmployeeCard() που επιστρέφει ένα boolean αποτέλεσμα.

Κατασκευάζουμε ένα νέο business rule, και ανατρέχουμε στα Java Facts για να ενσωματώσουμε την κλάση μας. Πιο συγκεκριμένα, υποστηρίζεται η ενσωμάτωση είτε ενός JAR αρχείου είτε μιας διαδρομής με *.class αρχεία.

Θα χρειαστεί να φτιάξουμε μια business rule function ως wrapper για τις μεθόδους της Java class που θέλουμε να χρησιμοποιήσουμε. Ορίζουμε το όνομά της (πχ validateCreditCard) καθώς και τις παραμέτρους που δέχεται. Στην ενότητα body της νέας function, θα πρέπει να κάνουμε την σωστή κλήση στον Java κώδικά μας. Αρχικοποιούμε λοιπόν το Java class μας με την εντολή assign new. Επιστρέφουμε το αποτέλεσμα με την εντολή return, αφότου έχουμε καλέσει τη Java function του ενδιαφέροντός μας.

Για να φτιάξουμε την έκφραση που μας ενδιαφέρει, μπορούμε να χρησιμοποιήσουμε τη βοήθεια του Expression Builder.

Αφού ορίσαμε τη function μας, μπορούμε άμεσα να την χρησιμοποιήσουμε στους κανόνες που θα φτιάξουμε, πάλι με την βοήθεια του Expression Builder.

Δεδομένου του ότι η Java κλάση μας βρίσκεται στο SCA-INF/src κατάλογο, το SOA deployment θα την περιλαμβάνει και θα κληθεί κανονικά όταν θα χρειαστεί.

No comments: