Mediator and Conditional Service Routing
Most often in service orchestration services are exposed and consumed as separately bundled flow rather than having one single long service , the advantage of such a system is many other applications can access same service, In SOA BPM we use Mediator to invoke services and also invoke the based on some conditions some times called conditional routing of services.
Use case : So far, we had student admission process where student enters his admission data from the Web UI and based on business rules which defines a cut off percentage , student’s admission is granted or rejected, rejected applications are written into file system as xml files, however accepted applications are sent to Admin officer for approval, later on Approved student data is written into Database .
Now, lets have different service for students who belong to “OBC” reservation category, this new service basically writes into a file system in real life it can be pretty complex where parents annual income is considered and their cut off percentage is reduced etc. we would use mediator to route approved student data into this service.
Creating a Service
Lets create a simple BPM process , which accepts input as Student Admission Process XSD as defined earlier, this data is written into a file system into /tmp directory. this BPM process exposed as service so that external applications can invoke it.
Create a separate BPM Process “Selected Student Process”
Ensure that Business Objects and Data Objects are created as before using the same Application Process XSD , check Association drag n drop Student BO
Create a file Adapter Service on the composite and tie this up with the service invocation activity on the BPM Process. Ensure that Association is selected and properly mapped to Business Object
Using Mediator for Service Invocation and Routing
Drag n drop a web service adapter on composite
Save All .. , This is how the composite would look like now
Drag n drop Mediator component, define service later
You can select WSDL option on this Mediator and select the wsdl url of the service we had defined earlier
Connect the Mediator to Web Service Adapter
You would need a transformation to be created on the mediator
We would add routing rules to filter on Reservation category = “OBC”
$in.parameters/tns:operation/tns6:process/tns6:StudentApplicationRequest/tns6:resevationCategory = ‘OBC’
Now open the BPM Process, and add the service invocation for mediator and use data association
Now this is how the composite would look like , the Mediator is connected to BPM Process as well as WSDL Service
This is how the Final BPM process would look like
Since Service can be invoked from the Web Front End or go to Enterprise Manager and test the service
Login to BPM workspace as jstein and Approve the student request ( Note : Since student got above 70% Business rule as sent this application for approval)
You can now login to Enterprise Manager, look into the Process Instance
You can look into flow, follow the green line to see the path executed
Look into Audit Trail , its more interesting also helps to diagnose any faults if there are any
Finally XML file is generated in /tmp folder, as per the Business Process and Mediator Routing rules invoking another service
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<process xmlns:tns6=”http://www.jamessmith.org” xmlns=”http://www.jamessmith.org”>