Master SOA Design Pattern Catalog
|
|


"Introducing SOA Design Patterns", SOA World Magazine (PDF)


"The Case for Single-Purpose Services: Understanding the Non-Agnostic Context and a Strategy for Implementation", SOA Magazine (HTML)


"REST-Inspired SOA Design Patterns", SOA Magazine (HTML)


"Service-Orientation and Object-Orientation Part I: A Comparison of Goals and Concepts", SOA Magazine (HTML)


"Service-Orientation and Object-Orientation Part II: A Comparison of Design Principles", SOA Magazine (HTML)


"Service Facade", InformIT (HTML)


"Non-Agnostic Context", InformIT (HTML)


"Domain Inventory", InformIT (HTML)


"Service Normalization", InformIT (HTML)


"Service Decomposition", InformIT (HTML)


"Canonical Schema", InformIT (HTML)


"Policy Centralization", InformIT (HTML)


|
|
|

Code-on-Demand (candidate)

|

Home > Candidate Patterns List > Code-on-Demand
|
|
How can service consumers be extended or customized at run-time without being upgraded?
|
|
|
|
|

Problem

Existing deployed clients may not be capable of taking advantage of new contract features when service contracts change. Similarly for a uniform contract, service consumers may be implemented too generally to sufficiently reflect the individual service's requirements and capabilities. Services may be prevented from effectively evolving by the installed base of consumers that cannot be easily upgraded.
|
|

Solution

Include implementation logic within capability response messages, and execute this logic within the service consumer.
|
|

Application

Service consumers are equipped with a virtual machine for running the logic supplied by the service at run-time. The consumer downloads this logic by invoking service capabilities, and executes it locally.

The virtual machine must itself provide capabilities sufficient to implement useful logic against. This includes support for client-side processing, the ability to invoke new or specialized service capabilities, and may include features such as supporting local storage of data and/or supporting user interaction.
|
 |
 |
 |

Impacts

Processing effort is decentralized. Execution occurs in service consumers rather than in services.

Custom capability invocation is less able to be understood by common network intermediaries between the service provider and service consumer. Firewalls and caches alike may be unable to perform their usual function.

Executing service logic can significantly increase the area of attack within service consumers for security vulnerabilities.
|
|
|
|
|
|

Status

Under Review
|
 |
 |
 |

Contributors

Balasubramanian, Carlyle, Pautasso
|
|
|
| |

Embedding a common virtual machine within service consumers allows their functionality be extended at run-time. Service providers can off-load state and processing to consumers, instruct consumers at run-time on how to interact with an extended service contract, and also provide interactions with the underlying hardware and its human user.


Web browsers make heavy use of customization logic in the form of JavaScript, applets, and forms. These are obtained via the uniform interface, but often include support to invoke service-specific capabilities as well as to enrich the user experience. These features are also used to extend the browser to trial new contract and media type extensions prior to their formal standardization or in the early stages of their deployment. For example, the explosion of video content on the Internet was initially only made possible by the embedding of flash-based players.

|
|
|