This demo is based completely on AXIS2.
A dummy service called proxy has to be created for every Provider EndPoint. A provider giving similar services at two locations say 2.1 and 2.2 need only create one proxy for both the end-points. The details for the routing can be provided in the broker-configuration.xml.
When a client sends a request to the dummy/proxy service, it is received by the relevant axis2 listener and passed on to the transport and dispatchers. The custom modules which provide the desired broker functionalities, as mentioned in the broker-configuration.xml, are engaged on initialization. The modules pick up the needed details from the xml file via a custom parser. The custom receiver takes care of calling the relevant end-point as selected by say the routing module/handler and makes the actual service call.
The links missing are dynamic disengage and the capability to engage modules at run-time as and when needed instead of at initialization. A small step towards these is provided by using a active=true/false attribute in the xml file. The modules/handlers can be made to perform logic/work only if the active state for them, with respect to a particular service is true. Also if any change is made to the xml file after initialization, we can hit the Adminservice and see to it that the changes are reflected. This can be done using a listener also.