with version 9.0, weblogic introduces the concept of work managers for workload management. there is a good white paper that well explains the concept of work managers, entitled Workload Management in WebLogic.
we also use work managers in our oracle service bus 10.3 implementation for workload management. we also aim to restrict the message flow to our backend systems by employing constraints on our work managers. however, in the implementation, we realized that work managers do not work as expected for services accessing http backend systems.
suppose you have a group of http proxy services each of which routes to a different http business service, using routing action. and all those business services access the same backend system for different functions. your goal is to restrict the flow to the backend system from your services. knowing that you cannot throttle a set of business services, work managers seem to be only option to accomplish this task:
give the same dispatch policy to each and every proxy service, and configure a global work manager in weblogic referring to that dispatch policy, with a maximum threads constraint of count N. this configuration should restrict the concurrent message count to N (at most). but it does not!
since “http transport is non-blocking”, the work manager’s executing requests will hardly reach the maximum count N, where as the backend will be busy dealing with more than N requests.
the suggested solution to overcome this situation is to use a service callout action instead of routing action, which is blocking. just keep in mind to do ‘service callout’s to your http business services instead of routing, if you utilize work managers and message flow should be restricted.