June 13, 2011 2 Comments
A service I’m designing for a client will retrieve mortgage details to be displayed by the web tier.
It is common for mortgages to consist of a main account which itself is composed of a number of sub-accounts, and it is not inconceivable for the sub-accounts themselves to have further sub-accounts.
To retrieve the entire tree my service has to call the mortgage account back-end multiple times while drilling down into accounts for sub-accounts to retrieve.
All those main and sub accounts are the same data type, so recursion seemed a good fit: I receive a request with a mortgage account Id, call the back end service who responds with account details, including a list of sub-account Ids, and for each sub-account I call myself, appending responses to the list of mortgage details in the final response.
The end result, is a response structure with nested mortgage details.
Let’s start by taking a look at the assembly diagram:
The MortgageAccount untyped component represents the back-end. I will be manually emulating this, so an untyped component will suffice.
RetrieveMortgageDetails is a BPEL microflow which references the back-end mock and also references itself.
I’ve implemented two interfaces, one for the microflow and another one for the mock back-end.
Both interfaces have a message input with a mortgage account Id but the response objects are slightly different.
The microflow returns a MortgageDetails object, which has as an attribute a list of MortgageDetails, as follows:
The mock back-end returns a MortgageAccount object, which has as an attribute a list of sub-account Ids:
The microflow is implemented as follows:
The first invoke calls the back-end, then for each sub-account Id in the response I call myself, appending the response to the subAccount attribute in my response to the calling client. Of course the ‘calling client’ will be myself when traversing the nested sub-accounts, and the real client once all sub-accounts are retrieved.
Here’s the result of a test run:
You can see how the response has a main mortgage account (id 1) which has two sub-accounts (1.1 and 1.2) You can also see that sub-account 1.1 has two nested sub-accounts (1.1.1 and 1.1.2)