Abstract:
The problems that normally attend the development and deployment of a computer system solution are reduced by employing patterns and virtual images in the development and deployment process. When information had been acquired about a data processing need to be met, pattern representing a generalized solution to that need is selected. A set of previously-developed virtual images supporting the selected pattern is chosen. Once information representing the specific need is received, the selected pattern is modified to represent a specific solution. Parameters are obtained for the specific solution and a set of scripts integrating the parameters is generated. The scripts are used to reconfigure the virtual images. The reconfigured virtual images are combined into a computer system solution that can be loaded and run with little or no further configuration.

Description:
BACKGROUND OF THE INVENTION 
       [0001]    The present invention relates to development of computer systems solutions and more particularly to the development of such solutions using patterns and virtual machines. 
         [0002]    Development of high-quality computer applications can be very difficult given the time and budget constraints that the developers of such applications ordinarily must comply with. The abundance of hardware architectures, the diversity of available operating systems and network platforms, and the demands of global competition make it increasingly difficult to build high quality software from the ground up within typical time and cost constraints. 
         [0003]    To build quality software today, many organizations stress the reuse of existing software models, designs and implementations that have already proven themselves to be useful. In an effective reuse process, attempts are made to limit the use of new code to code that is specific to a particular application. 
         [0004]    Moreover, software development organizations have begun to use patterns in developing new software applications. In simple terms, a pattern can be defined as a model or plan used as a guide in making things. The existence of patterns grew out of a realization that software developers must face similar challenges related to a myriad of programming topics, such as persistence, distribution, flow control, error handling, etc., in many different applications and domains. Over time, experienced software developers and architects created a body of literature that document different types of reusable knowledge in the form of patterns. 
         [0005]    Patterns codify reusable or repeatable experience and knowledge of people who have previously performed, perhaps many times, the task represented by the pattern. Patterns serve to document both proven solutions to problems and proven pitfalls that have been encountered in prior attempts to solve the problems and should be avoided. One example of reusable knowledge is a design pattern that describes the elements of a software system and the relationships among them and provides a common structure for communicating elements that solved a general problem within a particular context. Another example of reusable knowledge is an architectural pattern that expresses the overall structural organization of software systems and provides predefined subsystems with the specified responsibilities and relationships among the subsystems. 
         [0006]    A pattern is basically a starting point of a process for the development of a specific software solution. Patterns enable a software developer to work along a path beginning with a pattern and ending with specific software products that must be selected and configured to work together in a runtime package that provides an executable solution for the specific problem. 
       BRIEF SUMMARY OF THE INVENTION 
       [0007]    The invention may be embodied as a method for creating a computer system solution. A pattern representing a generalized solution for a data processing need is selected. A set of virtual images supporting the selected pattern is chosen and the selected pattern is modified to represent a specific solution for the data processing need. Parameters for the specific solution are obtained and a set of scripts integrating the obtained parameters is created. At least one virtual image in the set of virtual images is reconfigured using at least one of the scripts. The virtual images are combined to provide the desired computer system solution. 
         [0008]    The invention may also be embodied as a system for creating a computer system solution for a particular data processing need beginning with an existing pattern representing a generalized solution for the data processing need. Selection logic is employed to select a set of virtual images supporting the selected existing pattern. Modification logic is employed to modify the pattern to create a specific solution for the data processing need. Acquisition logic is used to obtained parameters for the specific solution and scripting logic is employed to create a set of scripts integrating the obtained parameters. Reconfiguration logic is used to reconfigure at least one of the virtual images using at least one of the created scripts. Combination logic is employed to combine the virtual images into the computer system solution. 
         [0009]    Finally, the invention may be embodied as a computer program product for creating a computer system solution for a particular data processing need beginning with an existing pattern representing a generalized solution for the need. The computer program product includes a computer usable medium embodying computer usable program code configured to select a set of virtual images supporting the existing pattern and to modify the existing pattern to represent a specific solution for the data processing need. The computer program product further includes code configured to obtain parameters for the specific solution and to create a set of scripts integrating the obtained parameters. Finally, the computer program product includes code configured to reconfigure at least one virtual images in a set of virtual machines and to combine the virtual images into the desired computer system solution. 
     
    
     
       BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWINGS 
         [0010]      FIG. 1  is a functional illustration of a multilevel set of patterns that can be used in a conventional sequence to create a system solution. 
           [0011]      FIG. 2  is a functional block diagram of the hardware infrastructure of a general purpose programmable device that may be used for a physical server that supports implementations of the present invention. 
           [0012]      FIG. 3  is more detailed functional block diagram of the hardware infrastructure indicating how the infrastructure is used in implementing virtual machines. 
           [0013]      FIG. 4  is a functional illustration of a process according to the present invention for developing a system solution beginning with an existing pattern. 
           [0014]      FIG. 5  is a different perspective on the process. 
           [0015]      FIG. 6  is functional illustration of a customer&#39;s perspective of the use of the end result of the process. 
       
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
       [0016]    As will be appreciated by one skilled in the art, the present invention may be embodied as a method, system, or computer program product. Accordingly, the present invention may take the form of an entirely hardware embodiment, an entirely software embodiment (including firmware, resident software, micro-code, etc.) or an embodiment combining software and hardware aspects that may all generally be referred to herein as a “circuit,” “module” or “system.” Furthermore, the present invention may take the form of a computer program product on a computer-usable storage medium having computer-usable program code embodied in the medium. 
         [0017]    Any suitable computer usable or computer readable medium may be utilized. The computer-usable or computer-readable medium may be, for example but not limited to, an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system, apparatus, device, or propagation medium. More specific examples (a non-exhaustive list) of the computer-readable medium would include the following: an electrical connection having one or more wires, a portable computer diskette, a hard disk, a random access memory (RAM), a read-only memory (ROM), an erasable programmable read-only memory (EPROM or Flash memory), an optical fiber, a portable compact disc read-only memory (CD-ROM), an optical storage device, a transmission media such as those supporting the Internet or an intranet, or a magnetic storage device. Note that the computer-usable or computer-readable medium could even be paper or another suitable medium upon which the program is printed, as the program can be electronically captured, via, for instance, optical scanning of the paper or other medium, then compiled, interpreted, or otherwise processed in a suitable manner, if necessary, and then stored in a computer memory. In the context of this document, a computer-usable or computer-readable medium may be any medium that can contain, store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device. The computer-usable medium may include a propagated data signal with the computer-usable program code embodied therewith, either in baseband or as part of a carrier wave. The computer usable program code may be transmitted using any appropriate medium, including but not limited to the Internet, wireline, optical fiber cable, RF, etc. 
         [0018]    Computer program code for carrying out operations of the present invention may be written in an object oriented programming language such as Java, Smalltalk, C++ or the like. However, the computer program code for carrying out operations of the present invention may also be written in conventional procedural programming languages, such as the “C” programming language or similar programming languages. The program code may execute entirely on the user&#39;s computer, partly on the user&#39;s computer, as a stand-alone software package, partly on the user&#39;s computer and partly on a remote computer or entirely on the remote computer or server. In the latter scenario, the remote computer may be connected to the user&#39;s computer through a local area network (LAN) or a wide area network (WAN), or the connection may be made to an external computer (for example, through the Internet using an Internet Service Provider). 
         [0019]    The present invention is described below with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
         [0020]    These computer program instructions may also be stored in a computer-readable memory that can direct a computer or other programmable data processing apparatus to function in a particular manner, such that the instructions stored in the computer-readable memory produce an article of manufacture including instruction means which implement the function/act specified in the flowchart and/or block diagram block or blocks. 
         [0021]    The computer program instructions may also be loaded onto a computer or other programmable data processing apparatus to cause a series of operational steps to be performed on the computer or other programmable apparatus to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide steps for implementing the functions/acts specified in the flowchart and/or block diagram block or blocks. 
         [0022]      FIG. 1  is a representation of a multi-layered e-business model that is currently being used to build solutions for the e-business marketplace. The model is offered as an example of a pattern. This model bridges the gap between business and information technology by defining architectural patterns at various levels, enabling a solution developer to easily navigate from one level to the next. The model includes business patterns  10 , integration patterns  12 , application patterns  14  and runtime patterns  16 , all of which are discussed below in more detail. The model further includes product mappings  18  and composite patterns  20 , also discussed below. The model is structured in a way that each level of detail builds on the last. 
         [0023]    Business patterns represent common business problems. The patterns provide tangible solutions to frequently encountered business challenges by identifying common interactions among users, business and data. A business executive can match a business requirement to business patterns that have already documented potential solutions for the requirement. In the drawing, business requirements takes the form of customer requirements  22  used in selecting the appropriate business pattern. 
         [0024]    One example of a business pattern is a self-service business pattern that describes applications in which users interact with the business via the Internet or an intranet. Simple website applications are an example of a self-service application. Another example of a business pattern is a collaboration application where the Internet or an intranet supports collaborative work among users. Examples of collaboration applications include e-mail, instant messaging and video conferencing. Other significant business patterns represent information aggregation applications (e.g., data mining) and extended enterprise applications (e.g., supply chain management). 
         [0025]    Integration patterns tie mobile business patterns together to solve a problem. One example of an integration pattern is an access integration pattern which integrates a number of services through a common entry point; e.g., a portal. Another example of an integration pattern is an application integration pattern which ties together multiple applications and data sources without a user having to directly invoke them. Examples of application integration patterns include message brokers and workflow managers. 
         [0026]    Composite patterns combine business patterns and integration patterns to create complex, advanced applications. Examples of composite patterns are electronic commerce patterns used in developing user-to-online-buying applications, account access patterns used in developing applications that provide customers with around-the-clock account access, and trading exchange patterns used in developing applications that allow buyers and sellers to trade goods and services on a public site 
         [0027]    Application patterns are used in making decisions related to the architecture of a proposed solution. Application patterns help refine higher level patterns (business, integration, composite) and are used to identify high-level logical components needed to implement key functions in a selected higher-level pattern. Each application pattern describes the solution structure, the placement of data and the degree of integration (loosely coupled or tightly coupled) of involved systems. An application pattern is supported by middleware that is expressed as one or more runtime patterns. 
         [0028]    A runtime pattern describes the logical architecture required to implement a higher-level pattern. A runtime pattern defines logical middleware nodes, the roles of those nodes and the interfaces among them in order to satisfy business requirements conveyed through the higher-level patterns. Runtime pattern documents must be employed to complete an application but do not specify the exact underlying software/hardware products that must be in place. 
         [0029]    Identification of the exact underlying software/hardware products is part of a product mapping phase. While the use of patterns may make it easier to identify appropriate software/hardware products in implementing the solution, the underlying software/hardware products, once identified in the product mapping phase, must still be installed and configured conventionally. Conventional installation and configuration practices can be complex and open to errors. Many configuration parameters must be set correctly to assure proper interaction among components. Whoever is doing the installation, whether a customer or a supplier, must have high levels of installation and configuration skills. 
         [0030]    The present invention reduces the complexity of the application development/installation/configuration process by coupling the use of patterns with virtual images or virtual machines representing underlying software products. In the following description, the terms “virtual image” and “virtual machine” may be used interchangeably. 
         [0031]    Generally speaking, a virtual machine is software that integrates application code and an execution environment for the application code. Multiple virtual machines can exist on a single physical server that controls the virtual machines through a virtual machine monitor or hypervisor. The execution environment in a virtual machine may be based on an operating system other than the operating system used by the physical server. Because the operating system in the virtual machine is isolated from the operating system for the hypervisor, applications written for different operating systems can be executed in virtual machines running on the same physical server. 
         [0032]      FIG. 2  represents the physical infrastructure of a general purpose computer system that can be used for the physical server. A typical general purpose computer system includes an internal system bus  100 , a system processor  102 , internal memory components  104  and one or more “external” memory components, such as an optical drive  106  and a magnetic hard drive  108 . The internal memory  104  includes specific types of memory such as read only memory (ROM)  110 , basic input/out system (BIOS) memory  112  and random access memory (RAM)  114 . The BIOS  112  stores configuration information for the computer system and basic routines used to control the transfer of information among the components of the computer system. 
         [0033]    Drives, such as optical drive  106  and hard drive  108 , provide non-volatile storage for applications and processes that execute in the computer system and for data used in and/or generated by those applications and processes. Depending on the technology employed, the drives may include removable media. The special purpose programming needed by a computer system to implement the described invention would typically be stored in one of these drives and transferred as needed into RAM  114 . Local drives, such as those discussed above, may be supplemented by network-accessible drives. 
         [0034]    The computer system also includes a significant number of input/output (I/O) adapters  118  that provide interfaces between a variety of input/output devices and the remainder of the computer system. Common examples of input/output devices include keyboard  120 , mouse  122 , monitor  124  and printer  126 . 
         [0035]    The computer system can be connected to other systems through network adapters  128 , which may support wired or wireless network connections. Finally, the computer system may include what are characterized as general use adapters that can be used for a number of different purposes. For example, USB (Universal Serial Bus) adapters can be used to connect typical input/output devices (such as keyboards, monitors, etc.), auxiliary memory devices, such as flash memory cards, portable hard drives and even high capacity magnetic hard drives, wireless network transceivers and many other kinds of devices to the computer system. 
         [0036]    It should not be inferred that only the devices shown in the drawing or discussed above can be part of the computer system. There are simply too many different types of devices to include in a drawing. Moreover, it should not be implied that the input/output adapters or general use adapters are limited to the technologies mentioned. There are too many different types of device adapters to include all in the drawing. Current examples of port technologies that are successfully used include not only USB, but also serial ports, parallel ports, SCSI, FireWire ports and infrared ports. Other port technologies undoubtedly already exist or will be developed. 
         [0037]    Virtual machine concepts can be implemented in a general-purpose computer system of the type described above in several ways, such as by running special software in the system to create a software component commonly referred to as a Virtual Machine Monitor (VMM), or hypervisor. The combination of the required system hardware and software for virtual machine operation is sometimes referred to as a hypervisor platform. 
         [0038]      FIG. 3  is a more detailed view of a portion of the general purpose computer system previously described with reference to  FIG. 2 .  FIG. 3  shows the system bus  100 , system processor  102 , magnetic hard drive  108 , and RAM memory  114 , all of which play significant roles when the general-purpose computer system is used to create and manage virtual machines. 
         [0039]    Until it is executed, VMM software  200  is stored on magnetic hard drive  108  like any other software to be executed in the computer system. Once the VMM software  200  is invoked, elements  200 R of the code are loaded into RAM memory  114  and are executed (as elements  200 SP) by the system processor to define and manage one or more virtual machines. 
         [0040]    Virtual machines can also be implemented through the use of hardware partitioning techniques that subdivide a server device into fractions, each of which can run an operating system, or through the use of hypervisor firmware that runs directly on a server. Use of the present invention is not limited to any particular virtual machine implementation. 
         [0041]    The states of the code  200 R stored in RAM  114  and  200 SP being executed in the system processor  102  along with data stored on magnetic hard drive  108  define one or more virtual machines  202 - 204 . The virtual machines can be thought of as a number of parallel software processes  202 SP- 206 SP and  202 R- 206 R co-existing in system processor  102  and RAM  114 , respectively, using data and code retrieved from and sent to the hard drive  108 . 
         [0042]    As will be described below, a pattern can be used in combination with a virtual image to provide a fully installed and configured solution that can execute a system of the type described below. The combination of patterns and virtual images provides flexibility to support different installation and configuration needs and an ability to configure interactions across virtual machines. 
         [0043]    In accordance with the present invention, a complex application can be more easily defined, implemented, installed and configured. Initially, a set of patterns (such as the e-business pattern described earlier) is defined. A corresponding set of virtual images is created. The virtual images are pre-installed and configured to support the patterns but lack specific configuration data required to personalize the patterns for a specific user topology and environment. 
         [0044]    The specific user topology and environment constitute configuration data that must be captured in order to personalize the virtual images. The personalized or reconfigured images can be packaged as new images. The new images can be shipped to a user/customer as a pre-built and ready to run application. 
         [0045]      FIG. 4  is a flow diagram showing a possible implementation of the present invention. The main components of the implementation include a set of patterns  24  and a set of virtual images (not explicitly shown) based on the patterns. The process is initiated by establishing a customer business need  26  which can be formulated as a customer&#39;s response to a series of questions posed by the system creator or the customer&#39;s own Information Technology (IT) people. The expressed business need is an input to a pattern matching engine  28  that selects one of the business patterns known to be available in set  24 . Multiple patterns can exist in the set  24 . One example of such a pattern is the e-business pattern discussed earlier. The pattern matching engine  28  selects a business pattern (or integration pattern or composite pattern) that appears to satisfy the customer&#39;s business needs. The end result is an XML document  30  that is used to match the chosen pattern to the customers system needs in an operation  32 . 
         [0046]    After gathering information about customer&#39;s business needs, information about the customer&#39;s technology structure and environment is gathered as a set of responses  34  that provide information about customer&#39;s environment, including such information as address spaces, file naming requirements and system preferences. The customers IT needs are embodied in an XML descriptor  38  that, like descriptor  30 , includes parameters that can be used in modifying the selected pattern to meet the customer&#39;s needs. 
         [0047]    The parameters provided in the descriptors  30  and  38  are used to personalize virtual images (not specifically shown) to satisfy the customer&#39;s business and IT needs. A description of the modified virtual images is returned to the customer in a Stage  1  document while the modified images (Stage  1  image  42 ) are made available for further changes. At this point, customer input is used to verify the modified virtual images. If changes need to be made in the images, an XML descriptor is generated in the form of a script that is packaged with the stage  1  image to recast the image into a stage  2  or final image in an operation  50 . 
         [0048]    The end result of the above process is a set of virtual machine image(s)  54  that can be shipped ready to run once started in the customer environment. 
         [0049]      FIG. 5  is a more document-oriented view of the process. A customer&#39;s requirements (both business and IT) are represented by a document  60  that can be converted to an XML configuration document  62  that provides one input to a configuration engine  40 . A configuration engine output is used to select one or more virtual images  44   a - 44   e  from a set  42  of available images. The configuration engine  40  also provides output that causes XML configuration scripts and XML configuration documents  46  to be generated. The scripts  46  are used to modify selected ones of the generic images  44   a - 44   e  to produce virtualized images  48   a - 48   c  that require no significant configuration after being distributed to a customer. The customer has only to load the virtualized images into its hypervisor platform and begin running the images. 
         [0050]      FIG. 6  shows steps that are performed by the customer when the virtualized images  48   a - 48   c  are received. An install script  52  preferably uses customized XML configuration information to install the images on customer physical systems, such as system  54  and  56 . Configuration information is also pushed to a user configuration database  58  maintained by the customer and/or the software supplier. 
         [0051]    It is possible that a needed virtualized image is already installed on a customer&#39;s system. If that is the case, the installed image can be reused without requiring a second installation. If the installed image must be reconfigured, a script may be run in the customer environment to perform the necessary reconfiguration. 
         [0052]    The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods and computer program products according to various embodiments of the present invention. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of code, which comprises one or more executable instructions for implementing the specified logical function(s). It should also be noted that, in some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts, or combinations of special purpose hardware and computer instructions. 
         [0053]    The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention. As used herein, the singular forms “a”, “an” and “the” are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms “comprises” and/or “comprising,” when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof. 
         [0054]    The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The description of the present invention has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the invention. The embodiment was chosen and described in order to best explain the principles of the invention and the practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated. 
         [0055]    Having thus described the invention of the present application in detail and by reference to preferred embodiments thereof, it will be apparent that modifications and variations are possible without departing from the scope of the invention defined in the appended claims.