Patent ID: 7870568

Claim:
A system for provisioning a shared computing infrastructure that supports a plurality of software applications and a plurality of types of software application servers, each type of software applications server creating a run-time environment for executing at least one of the plurality of software applications on a grid of computing resources, the system comprising: at least one grid node, each grid node comprising at least one host computer; a first type of software application server and a second type of software application server, wherein the first and second types of software application servers are software programs and are of different types; two or more computing engines each assigned to execute an instance of one of the plurality of software applications in a run-time environment created by one of the plurality of types of software application servers on the at least one host computer of the at least one grid node; two or more clients each accessing one of the two or more computing engines to execute the software application assigned to the one computing engine; and a broker including: an optimization module for periodically determining an optimal allocation of the plurality of software applications and software application servers among the two or more computing engines; and a configuration manager, responsive to the determinations by the optimization module, for instructing one of the two or more computing engines to reconfigure its run-time environment, the configuration manager instructions causing a given computing engine to reconfigure by halting a current instance of a software application of a first type executing in a run-time environment created by the software application server of the first type, and by loading and starting an instance of a software application of a second type within a run-time environment created by the software application server of the second type on said given computing engine, wherein the halting is to reallocate resources based on the optimal allocation among the two or more computing engines.