Patent Publication Number: US-8121996-B2

Title: Optimization of aspects of information technology structures

Description:
RELATED APPLICATION 
     This application is a continuation application claiming priority to Ser. No. 11/263,498, filed Oct. 31, 2005 and entitled “Optimization of Aspects Of Information Technology Structures”, which is a continuation-in-part of copending U.S. patent application Ser. No. 11/159,918, filed Jun. 23, 2005 and entitled “Coupling of a Business Component Model to an Information Technology Model”, which is a continuation-in-part of copending U.S. patent application Ser. No. 11/135,599, filed May 23, 2005 and entitled “Automated Verification of Correctness of Aspects of an Information Technology System”, which is a continuation-in-part of copending U.S. patent application Ser. No. 11/120,678 filed May 3, 2005 and entitled “Automated Generation of Configuration Elements of an Information Technology System”, which is a continuation-in-part of copending U.S. patent application Ser. No. 11/060,007, filed Feb. 17, 2005 and entitled “Automated Display of an Information Technology System Configuration”, which is a continuation-in-part of copending U.S. patent application Ser. No. 11/011,449, filed Dec. 14, 2004 and entitled “Automation of Information Technology System Development”. 
    
    
     BACKGROUND OF THE INVENTION 
     1. Technical Field 
     The present invention relates generally to automation of Information Technology system development and more particularly to optimization of aspects of Information Technology (IT) structures. 
     2. Related Art 
     A number of activities are associated with use of a computer. These activities may be grouped into several categories: development, deployment, operations and maintenance, and productive use. The category of development comprises determination of specific hardware, software, and networking required to satisfy the specific usage needs; planning of a production system. 
     The category of deployment comprises implementation of the developed production system, ranging from acquisition of the appropriate hardware and software to installation, configuration, and customization of acquired software, hardware and network devices, to verification of correctness of the built system. 
     The category of operations and maintenance comprises operation of the deployed production system and introduction of changes to it. 
     The category of productive use comprises application of the deployed production system to activities for which it is intended. 
     The preceding categories of activities are common to computing systems, be it a stand-alone personal computer, or a geographically dispersed collection of highly complex systems supporting an international corporation. The first three of the preceding categories of activities (i.e., development, deployment, operations) are a liability required in support of the last activity category of productive use of a computer system. While for a single stand-alone personal computer, development, deployment and operations may involve miniscule investment of time and/or money (with the exception of the acquisition of the necessary hardware and software), in large institutions, these preceding three activities occupy armies of technical and administrative personnel and entail high costs, primarily due to complexity of computer systems, exacerbated by constantly evolving technology and business requirements. 
     Thus, there is a need for a method and system to reduce costs and user effort pertaining to Information Technology (IT) development, including implementation of an automated coupling of a Component Based Model (CBM) of a business to an Information Technology (IT) model of an IT system. 
     SUMMARY OF THE INVENTION 
     The present invention provides a computer-implemented method for optimizing an aspect of an Information Technology (IT) structure of an IT system, said method comprising optimizing the aspect of the IT structure with respect to at least one control parameter, said IT structure comprising a plurality of elements, each element independently being a hardware element, a software element, or a combination of a hardware element and a software element, each control parameter having a value that is specific to each element of the IT structure. 
     The present invention provides a computer program product, comprising a computer usable medium having a computer readable program that when executed on a computer causes the computer to perform a method for optimizing an aspect of an Information Technology (IT) structure of an IT system, said method comprising optimizing the aspect of the IT structure with respect to at least one control parameter, said IT structure comprising a plurality of elements, each element independently being a hardware element, a software element, or a combination of a hardware element and a software element, each control parameter having a value that is specific to each element of the IT structure 
     The present invention provides a process for deploying (or integrating) computing infrastructure, said process comprising integrating computer-readable code into a computing system, wherein the code in combination with the computing system is capable of performing a method for optimizing an aspect of an Information Technology (IT) structure of an IT system, said method comprising optimizing the aspect of the IT structure with respect to at least one control parameter, said IT structure comprising a plurality of elements, each element independently being a hardware element, a software element, or a combination of a hardware element and a software element, each control parameter having a value that is specific to each element of the IT structure. 
     The present invention provides a computer system comprising a processor and a computer readable memory unit coupled to the processor, said memory unit containing instructions that when executed by the processor implement a method for optimizing an aspect of an Information Technology (IT) structure of an IT system, said method comprising optimizing the aspect of the IT structure with respect to at least one control parameter, said IT structure comprising a plurality of elements, each element independently being a hardware element, a software element, or a combination of a hardware element and a software element, each control parameter having a value that is specific to each element of the IT structure. 
     The present invention provides a method and system to reduce costs of an Information Technology (IT), including implementation of optimization of aspects of IT structures 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is a diagram illustrating Information Technology (IT) entities included in the base entity model, and organized in a class hierarchy, in accordance with embodiments of the present invention. 
         FIG. 2  is a flow chart depicting the logic of setRelationship( ) method, in accordance with embodiments of the present invention. 
         FIG. 3  is a flow chart depicting the logic of addElement( ) method, in accordance with embodiments of the present invention. 
         FIG. 4  is a flow chart depicting the logic of deleteElement( ) method, in accordance with embodiments of the present invention. 
         FIG. 5  is a flow chart, depicting the logic of setAvailable( ) method, in accordance with embodiments of the present invention. 
         FIG. 6  is a flow chart depicting the logic of establishInterface( ) method, in accordance with embodiments of the present invention. 
         FIG. 7  is a flow chart depicting the logic of ensureDependencies( ) method, in accordance with embodiments of the present invention. 
         FIG. 8  is a diagram illustrating the concept of IT structure composition, in accordance with embodiments of the present invention. 
         FIG. 9  is a chart depicting the IT development process, in accordance with embodiments of the present invention. 
         FIG. 10  is a flow chart depicting the process of translation of an IT structure instance, in accordance with embodiments of the present invention. 
         FIG. 11  is a flow chart depicting the translation iteration process, in accordance with embodiments of the present invention. 
         FIG. 12  is a flow chart depicting the process of ensuring specification of characteristics of an abstract IT structure instance, in accordance with embodiments of the present invention. 
         FIG. 13  is a flow chart depicting the process of adjusting a particular set of characteristics of an IT structure instance, in accordance with embodiments of the present invention. 
         FIG. 14  is a flow chart depicting the process of selection a subclass of an IT structure, in accordance with embodiments of the present invention. 
         FIG. 15  is a flow chart depicting the process of selecting the best translation candidate from a list of translation candidates, in accordance with embodiments of the present invention. 
         FIG. 16  is a flow chart depicting a reverse specification process, in accordance with embodiments of the present invention. 
         FIG. 17  is a flow chart depicting a process for comparing two IT structure instances, in accordance with embodiments of the present invention. 
         FIG. 18  is an extended class hierarchy example, in accordance with embodiments of the present invention. 
         FIG. 19  is a flow chart for implementing delivery binding of an IT structure to a delivery environment, in accordance with embodiments of the present invention. 
         FIG. 20  illustrates a computer system used for implementing an IT Entity Model and associated processes, in accordance with embodiments of the present invention. 
         FIG. 21A  depicts a network display comprising devices, network segments, and vertical connectors, in accordance with embodiments of the present invention. 
         FIG. 21B  depicts relationships between the network display of  FIG. 21A  and a two-dimensional matrix representing the screen layout, in accordance with embodiments of the present invention. 
         FIGS. 22A and 22B  is a flow chart describing matrix generation and matrix cell swapping, in accordance with embodiments of the present invention. 
         FIG. 23  is a flow chart describing rearrangement of network segments, in accordance with embodiments of the present invention. 
         FIG. 24  is a flow chart describing the goal function method for computing a goal value, in accordance with embodiments of the present invention. 
         FIGS. 25-26  illustrate how the swapping of two non-empty cells of the matrix can affect the goal value, in accordance with embodiments of the present invention. 
         FIGS. 27-28  illustrate movement of overlapping network segments, in accordance with embodiments of the present invention. 
         FIG. 29  illustrates a display for visualizing IT relationships, in accordance with embodiments of the present invention. 
         FIG. 30  illustrates a display for visualizing IT dependencies, in accordance with embodiments of the present invention. 
         FIGS. 31A-31C  is a flow chart describing firewall rule generation and assignment of the generated firewall rules to firewalls, in accordance with embodiments of the present invention. 
         FIG. 32  depicts a configuration illustrating the method of  FIGS. 31A-31B , in accordance with embodiments of the present invention. 
         FIGS. 33A-33B  is a flow chart depicting a method for load balancing rule generation, in accordance with embodiments of the present invention. 
         FIG. 34  depicts a configuration illustrating the method of  FIG. 33 , in accordance with embodiments of the present invention. 
         FIG. 35  is a flow chart depicting a method for generating wrappers for a non-compliant application, in accordance with embodiments of the present invention. 
         FIG. 36  is a flow chart depicting a method for verifying correctness of an IT structure deployment, in accordance with embodiments of the present invention. 
         FIG. 37  is a flow chart depicting a method for detecting unauthorized changes to an operating instance of an IT structure, in accordance with embodiments of the present invention. 
         FIG. 38  is a flow chart depicting the verifyConformance( ) method of an exemplary IT delivery environment, in accordance with embodiments of the present invention. 
         FIG. 39  illustrates elements of a Component Business Model (CBM) map, in accordance with embodiments of the present invention. 
         FIG. 40  illustrates application of evaluation criteria to a CBM map, in accordance with embodiments of the present invention. 
         FIG. 41  illustrates relationships between a CBM and an IT model, in accordance with embodiments of the present invention. 
         FIG. 42  is a flow chart depicting identification of business components for which Total Cost of Ownership (TCO) exceeds business value, in accordance with embodiments of the present invention. 
         FIG. 43  is a flow chart depicting identification of business components with increasing cost-to-value (C/V) ratio, in accordance with embodiments of the present invention. 
         FIG. 44  is a flow chart depicting assessment of impact and implementation of a business change in supporting IT, in accordance with embodiments of the present invention. 
         FIG. 45  is a flow chart depicting determination of values of control parameters to minimize the value of the goal function, in accordance with embodiments of the present invention. 
         FIG. 46  is a flow chart depicting determination of the value of the goal function, defined on the instance of ITStructure specified as the argument of the ITOptimizer class constructor, in accordance with embodiments of the present invention. 
         FIG. 47  is a network diagram depicting the IT Structure used as an example for illustrating an optimization algorithm, in accordance with embodiments of the present invention. 
         FIG. 48  is a table listing the initial IT structure of the example of  FIG. 47 , in accordance with embodiments of the present invention. 
         FIG. 49  is a table listing the control parameters of the example of  FIG. 47 , in accordance with embodiments of the present invention. 
         FIG. 50  is a table listing the optimized IT structure of the example of  FIG. 47 , in accordance with embodiments of the present invention. 
     
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     The detailed description of the present invention is organized into the following sections: 
     1. Nomenclature; 
     2. Information Technology (IT) Entity Model (defines basic IT entities and describes their properties and associated processes); 
     3. IT Structure Visualization (generates a display of an IT structure configuration); 
     4. Generation of IT Structure configuration elements; 
     5. Verification of correctness of aspects of an Information Technology system; 
     6. Relationship of Component Business Model (CBM) and IT model and applications of this relationship; 
     7. Aspects of optimization of IT structures; 
     8. Computer System (describes computer system used to implement an IT Entity Model and associated processes) 
     1. Nomenclature 
     1.1 Flow Charts 
     The flow charts in the Figures comprise, inter alia, the following block shapes: 
     1) Rectangular: represents execution of code as described (e.g.,  FIG. 3 , block  2202 ); and 
     2) Diamond: represents a decision block (e.g.,  FIG. 3 , block  2203 ). 
     1.2 Abbreviations 
     The following abbreviations are utilized herein. 
     
       
         
           
               
               
               
               
               
             
               
                   
                   
               
             
            
               
                   
                   
                 CASE 
                 computer-aided software engineering 
                   
               
               
                   
                   
                 CBM 
                 Component Business Model 
                   
               
               
                   
                   
                 CD 
                 compact disk 
                   
               
               
                   
                   
                 CICS 
                 Customer Information Control System 
                   
               
               
                   
                   
                 CPU 
                 central processor unit 
                   
               
               
                   
                   
                 DASD 
                 direct access storage device 
                   
               
               
                   
                   
                 DB 
                 database 
                   
               
               
                   
                   
                 DNS 
                 domain name server 
                   
               
               
                   
                   
                 DRAM 
                 dynamic random access memory 
                   
               
               
                   
                   
                 DVD 
                 digital video disk 
                   
               
               
                   
                   
                 GB 
                 gigabyte 
                   
               
               
                   
                   
                 GUI 
                 graphical user interface 
                   
               
               
                   
                   
                 HTTP 
                 HyperText Transfer Protocol 
                   
               
               
                   
                   
                 HTTPS 
                 HTTP Secure 
                   
               
               
                   
                   
                 IDE 
                 integrated development environment 
                   
               
               
                   
                   
                 IP 
                 internet protocol 
                   
               
               
                   
                   
                 IT 
                 information technology 
                   
               
               
                   
                   
                 KB 
                 kilobyte 
                   
               
               
                   
                   
                 KW 
                 kiloWatt 
                   
               
               
                   
                   
                 LAN 
                 local-area network 
                   
               
               
                   
                   
                 LOC 
                 lines of code 
                   
               
               
                   
                   
                 Mbps 
                 megabits per second 
                   
               
               
                   
                   
                 MHz 
                 mega-Hertz 
                   
               
               
                   
                   
                 MP 
                 multi-processor 
                   
               
               
                   
                   
                 MRC 
                 monthly recurring charge 
                   
               
               
                   
                   
                 NAT 
                 network address translation 
                   
               
               
                   
                   
                 NIC 
                 network interface card 
                   
               
               
                   
                   
                 NOOP 
                 no operation (moot) 
                   
               
               
                   
                   
                 OS 
                 operating system 
                   
               
               
                   
                   
                 OTC 
                 one-time charge 
                   
               
               
                   
                   
                 PM 
                 person/month 
                   
               
               
                   
                   
                 POTS 
                 “plain old telephone service” 
                   
               
               
                   
                   
                 RAM 
                 random-access memory 
                   
               
               
                   
                   
                 RISC 
                 reduced instruction set computer 
                   
               
               
                   
                   
                 ROI 
                 return on investment 
                   
               
               
                   
                   
                 ROM 
                 read-only memory 
                   
               
               
                   
                   
                 SL 
                 service level 
                   
               
               
                   
                   
                 SMTP 
                 Simple Mail Transfer Protocol 
                   
               
               
                   
                   
                 S/N 
                 serial number 
                   
               
               
                   
                   
                 TCO 
                 total cost of ownership 
                   
               
               
                   
                   
                 TCP/IP 
                 transmission control protocol/internet protocol 
                   
               
               
                   
                   
                 UI 
                 user interface 
                   
               
               
                   
                   
                 UML 
                 universal modeling language 
                   
               
               
                   
                   
                 UP 
                 uni-processor 
                   
               
               
                   
                   
                 UPS 
                 uninterruptible power supply 
               
               
                   
                   
               
            
           
         
       
     
     2. Information Technology (IT) Entity Model 
     IT systems and environments may be described in terms of IT entities. The term “entity” is understood to denote “IT entity” herein. 
     The base entity model comprises IT entities, relationships among the IT entities, and interfaces and methods provided by these IT entities. 
     For illustrative purposes, Java-like syntax is used herein as a specification language for IT structures. An IT structure is a set of IT entities. Generally, another programming language (e.g., object oriented, procedural, high- or low-level) may be used instead of Java; a modeling language (e.g., UML) may be used instead of Java; and a specialized language could be defined and implemented solely for the purpose of definition of IT structures. 
     2.1 IT Entities 
       FIG. 1  is a diagram illustrating IT entities included in the base entity model, and organized in a class hierarchy as shown in Table 1, in accordance with embodiments of the present invention. 
     
       
         
           
               
               
             
               
                   
                 TABLE 1 
               
               
                   
                   
               
             
            
               
                   
                 ITEntity 2001 
               
               
                   
                   ITStructure 2003 
               
               
                   
                     ITDeliveryEnvironment 2007 
               
               
                   
                   ITInterface 2005 
               
               
                   
                     defaultInterface 2022 
               
               
                   
                     InstalledOn 2015 
               
               
                   
                     Supports 2016 
               
               
                   
                     Invokes 2017 
               
               
                   
                     Invokable 2018 
               
               
                   
                     ConnectsTo 2019 
               
               
                   
                     Manages 2020 
               
               
                   
                     Mangeable 2021 
               
               
                   
                   ITRelationship 2004 
               
               
                   
                     DefaultITRelationship 2010 
               
               
                   
                     InstallationITRelationship 2011 
               
               
                   
                     InvocationITRelationship 2012 
               
               
                   
                     CommunicationITRelationship 2013 
               
               
                   
                     ManagementITRelationship 2014 
               
               
                   
                   ITDependency 2006 
               
               
                   
                     RequiresPresenceOf 2008 
               
               
                   
                     ExclusiveWith 2009 
               
               
                   
                   
               
            
           
         
       
     
     IT entities may be qualified as real, virtual, or abstract. A real IT entity has no undefined characteristic and may therefore be represented physically. A virtual IT entity has exactly one undefined characteristic and thus cannot have more than one undefined characteristic. An abstract IT entity has at least two undefined characteristics. Examples of real entities, virtual entities, and abstract entities will be presented infra. For convenience, class Type is introduced as follows: 
     Enumeration Type:=(abstract, virtual, real) 
     2.1.1 ITEntity Class 
     TEntity class is introduced for convenience as a root class for the other IT entity classes listed above. ITEntity has the following methods: 
     1) constructor(String name [, Type type])—creates an instance of ITEntity with the specified name and of optionally specified type 
     2) boolean isAbstract( ), returns true if ITEntity is abstract, false otherwise 
     3) boolean isVirual( ), returns true if ITEntity is virtual, false otherwise 
     4) boolean isReal( ), returns true if ITEntity is real, false otherwise 
     5) getName( )—returns ITEntity name 
     6) setType(Type type)—changes IT entity type as specified 
     2.2 IT Structures 
     An IT structure is either a primitive IT structure or a complex IT structure. 
     A primitive IT structure is an IT entity representing materials or labor, indivisible within a particular view to a structural model, and a set of method associated with characteristics of the represented materials or labor. 
     A real primitive IT structure represents a specific single physical object or a specific unit of labor. Examples of real primitive IT structure include: 
     1) RS/6000 model F50 S/N 123456-AB. There is one and only one RS/6000 model F50 with this particular S/N. 
     2) Software product Ppppp version vvvvv license key 12345678-AB-9ABCD-XYZ. 
     A virtual primitive IT structure represents a class of specific physical objects. Examples of virtual primitive IT structure include: 
     1) RS/6000 model F50. Since no s/n is specified, there is a class of RS/6000 model F50 this virtual primitive IT structure corresponds to, and RS/6000 model F50 with any s/n belongs to this class. 
     2) Software product Ppppp version vvvvv. 
     An abstract primitive IT structure represents an abstract view of materials or labor. In this embodiment, abstract primitive IT structures include the same out-of-model IT entity, called abstractPrimitive. Other embodiment may have a multiplicity of abstract primitive out-of-model entities. Examples of abstract primitive IT structure include: 
     1) RS/6000. Since no model is specified, any RS/6000, including model F50, as well as any other models, belongs to this class. 
     2) Computer. Since no architecture, type, or any other characteristics are specified, any computer, including any model of RS/6000, belongs to this class. 
     3) Software product Ppppp. 
     4) Software product. 
     Primitive IT structures are indivisible only within a particular model. For example, a computer may be viewed as indivisible in the context of the model used in this embodiment. In a different embodiment, however, a different model may exist in which a computer may be represented as an IT structure (see discussion infra of a complex IT structure), comprising several primitive IT structures; e.g., the following collection of primitive IT structures: processor, memory, DASD, and network interface. 
     A complex IT structure is a non-empty collection of IT structures, a defined set of relationships (see below) among these IT structures, and a description of this IT structure&#39;s characteristics. Examples of a complex primitive IT structure include: 
     1) a personal computer 
     2) a network of Lotus Domino servers 
     3) a zSeries sysplex 
     4) a collection of programs running on a particular computer 
     5) a collection of software and hardware required to run Ariba Buyer application 
     6) a hosted application service (e.g., a service including a service provider hosting an application; Ariba Buyer, in its data center, and providing service customers access to the application through a network; Internet) 
     7) a professional service (e.g., a service including a service provider perform installation and configuration of an application; Ariba Buyer, at a service customer data center) 
     8) a network service (e.g., a service providing access to Internet at a specified guaranteed minimum bandwidth) 
     9) a combined network/hosted application services (e.g., a service providing access to Internet at a specified bandwidth and optionally including web hosting such as hosting of customer&#39;s web pages accessed through Internet; and a hosted application service for e-mail). 
     In the process of formation of an IT structure, values of properties of elements of this IT structure&#39;s composition (see below) may change; e.g., assignment of a name to a computer may be required to include that computer in an IT structure. 
     The set of relationships is imposed by a particular IT structure, rather than being intrinsic for the primitive IT structures comprising the IT structure. Thus, multiple complex IT structures may be created from the same set of primitive IT structures, and uniqueness of the assigned name (i.e., its inequality to any other computer name) may be imposed on a primitive IT structure representing a computer, included in a complex IT structure. 
     An IT structure composition is the list of IT structures included in a complex IT structure, or an out-of-model entity describing the entity represented by a primitive IT structure (e.g., a String, or a reference to a DB record). 
     An IT structure composition element is an IT entity included in an IT structure composition. An IT structure primitive composition is the list of primitive IT structures included in an IT structure, where all complex IT structures are replaced with their respective primitive compositions. 
       FIG. 8  is a diagram illustrating the concept of IT structure composition, in accordance with embodiments of the present invention. A complex IT structure A  2701  includes in its composition  2703  two other complex IT structures B  2704  and C  2705 , and one abstract primitive IT structure D  2706 . Complex IT structure B includes in its composition two primitive IT structures E  2708  and F  2709 , and complex IT structure C includes in its composition two primitive IT structures, an abstract primitive IT structure G  2710 , and a primitive IT structure H  2711 . Both abstract primitive IT structures, D and H, represent the abstractPrimitive out-of-model entity  2712 , while all other primitive IT structures represent respective non-abstract out-of-model entities  2713 ,  2714 ,  2715 . The IT structure A primitive composition  2707  includes all primitive IT structures shown (and no complex IT structures), namely primitive IT structures E  2708 , F  2709 , G  2710 , H  2711 , and D  2706 . 
     An abstract IT structure is an IT structure whose composition includes at least one abstract IT entity. Examples of an abstract IT structure include: 
     1) An abstract IT structure may include an Intel computer with a single 400 MHz Pentium processor, 1024 MB of main memory, 10 GB of DASD, and an Ethernet network interface; however, since no particular model of computer is specified, this IT structure would be abstract.
 
2) At a different (higher) level of abstraction, the same IT structure may include just a computer, without specification of its technology or characteristics.
 
A virtual IT structure is a non-abstract IT structure whose composition includes at least one virtual IT entity.
 
A real IT structure is a non-abstract and non-viral IT structure.
 
From the above definitions, it follows that a real IT structure only includes real IT entities in its composition. From the above definitions, it also follows that in a real IT structure, each IT entity in its composition uniquely corresponds to a physical IT entity.
 
Table 2 Infra Provides Examples of IT Structure Composition.
 
     
       
         
           
               
             
               
                 TABLE 2 
               
             
            
               
                   
               
               
                 Examples of IT structure composition 
               
            
           
           
               
               
               
               
               
            
               
                 IT structure 
                 Networking 
                 Computers 
                 Software 
                 Labor 
               
               
                   
               
               
                 Abstract IT 
                 network 
                 computer 
                 Ariba Buyer 
                   
               
               
                 structure with 
                   
                   
                 application 
               
               
                 high degree of 
               
               
                 abstraction 
               
               
                 Abstract IT 
                 TCP/IP 
                 platform 
                 Ariba Buyer 
               
               
                 structure with 
                 network 
                   
                 Application v7 
               
               
                 low degree of 
               
               
                 abstraction 
               
               
                 Virtual IT 
                 connectivity 
                 platform and 
                 Ariba Buyer v7 for 
                 installation and 
               
               
                 structure 
                 requirements 
                 associated parameters 
                 AIX on RS/6000 
                 management 
               
               
                   
                   
                 (memory, processor 
               
               
                   
                   
                 power, DASD space) 
               
               
                 Delivery- 
                 LAN 
                 model 
                 Ariba Buyer v7.02 for 
                 specific 
               
               
                 bound IT 
                 segments with 
                   
                 AIX on RS/6000 
                 installation 
               
               
                 structure 
                 symbolic IP 
                   
                   
                 activities; specific 
               
               
                   
                 addresses 
                   
                   
                 management 
               
               
                   
                   
                   
                   
                 activities 
               
               
                 Real IT 
                 LAN 
                 computer s/n 
                 Ariba Buyer v7.02 for 
                 skill level and 
               
               
                 structure 
                 segments with 
                 specified 
                 AIX on RS/6000, 
                 quantity of labor 
               
               
                   
                 real IP 
                   
                 license # &lt;lic. #&gt; 
                 by activity 
               
               
                   
                 addresses 
                   
                   
                 specified 
               
               
                   
               
            
           
         
       
     
     An abstract IT structure with a high level of abstraction may be “an Ariba Buyer application running on a computer, connected to a network”. The degree of abstraction can be lowered by restating the previous clause in more specific terms—“an Ariba Buyer application running on an RS/6000 computer, connected to a TCP/IP network”. 
     The corresponding virtual IT structure may be “an Ariba Buyer version 7.0 for AIX on RS/6000 application, running on an AIX v5.0 operating system and RS/6000 model F50 computer with one 320 MHz CPU, 640 KB of main memory, and 128 GB of DASD in a single disk, connected through a 10 Gbps Ethernet LAN to a TCP/IP network—and—labor associated with installation and management of the above”. 
     Once resolved into a delivery-bound IT structure, the previous IT structure may turn into something like “an Ariba Buyer version 7.0 path level 17.2 for AIX on RS/6000 application, running on an AIX v5.0 patch level 5.0.3.2 operating system and RS/6000 model F50-3745 computer with one 320 MHz CPU, 640 KB of main memory, 128 GB of DASD in a single disk, and a NIC (network interface card), connected through a 10 Gbps Ethernet LAN to a TCP/IP network on a single segment with a symbolic IP address of a.b.c.d and specific installation and management activities associated with the above. 
     Once deployed in a data center, the corresponding real IT structure would be “an Ariba Buyer version 7.0 path level 17.2 for AIX on RS/6000 application, license # 178215-04, running on an AIX v5.0 patch level 5.0.3.2 operating system, license #514ABC-AE, and RS/6000 model F50-3745 computer, s/n 6734-FWU, with one 320 MHz CPU, 640 KB of main memory, 128 GB of DASD in a single disk, and a NIC (network interface card), connected through a 10 Gbps Ethernet LAN to a TCP/IP network on a single segment with a symbolic IP address of a.b.c.d and specific installation and management activities associated with the above, including quantity of labor and level of skills for each. 
     A delivery-bound IT structure is a virtual IT structure ready for provisioning in a particular delivery environment (see below) with no additional input/sources of information. “In a particular delivery environment” means “at the level of detail required by the provisioning process of the delivery environment”. For example, a delivery-bound IT structure may include a specification of 10/100 Mbps Ethernet card, without regard to the manufacturer of that card. 
     An operating IT structure instance is a collection of physical hardware, software, networking, and labor, resulting from deployment of a real IT structure. 
     2.2.1 ITStructure Class 
     An IT Structure is represented by a class ITStructure, which inherits from ITEntity class and has the following methods: 
     1) ITStructure(String name, String function, Vector functions, Vector operationalCharacteristics[, Boolean external])—constructor; the external parameter is optional, and indicates that the ITStructure represents an external entity. 
     Note: Type is not specified for an ITStructure class—it is always derived based on ITStructure composition using the type definition as a rule. 
     2) Vector getFunctions( )—returns a list of functions (String) supported by ITStructure (always non-null) 
     3) Vector setFunctions(Vector V)—adjusts IT structure for support of one or more functions whose names were previously returned by getFunction( ) method; the list V is a list of pairs (&lt;function&gt;,&lt;value&gt;), where &lt;function&gt; is one of the list returned by getFunction( ) method and &lt;value&gt; is the associated setting. The method returns an empty Vector if the method execution was successful, and a list of error messages otherwise. If an error occurs, the method has not altered the IT structure.
 
4) Vector getOperationalCharacteristics( )—returns a list of pairs of names (String) and values (String) of operational characteristics of this IT structure
 
5) Vector setOperationalCharacteristics(Vector V)—adjusts IT structure operational characteristics as specified by the input parameters. The input parameter is a list of pairs of (operational characteristic name (String), characteristic value), where operational characteristic name is one of the values returned by the getOperaitonalCharacteristics( ) method, and characteristic value is specific to the operational characteristic being modified. The list V corresponds to all of or a subset of the list returned by getOperationalCharacteristics( ) method. The method returns an empty Vector if the method execution was successful, and a list of error messages otherwise. If an error occurs, the method has not altered the IT structure.
 
6) Vector getResolutionValues( )—returns a list of pairs of names (String) and values (String) of abstraction resolution parameters of this IT structure
 
7) JavaClass resolve(Vector V), where V is Vector of pairs (String resolution_parameter, value)—returns a less abstract ITStructure instance, instantiated with the specified resolution parameters if execution was successful; returns a Vector of error messages if no resolution was possible (in which case the IT structure is left unmodified)
 
8) boolean isPrimitive( )—returns true if this IT structure is primitive
 
9) boolean isComplex( )—returns true if this IT structure is complex
 
10) Vector getComposition([String C 1  [, C 2  . . . [, Cn]]]])—for a complex IT structure, returns list of other IT structures comprising this IT structure; for a primitive IT structure, returns the list including the IT structure itself. The optional list of parameters C 1  . . . Cn specify names of ITStructure subclasses to be returned by the getComposition( ) method. If C 1  . . . Cn are specified, only IT structures of subclasses with names C 1  . . . Cn will be returned by the getComposition( ) method.
 
11) Vector getPrimitiveComposition([String C 1  [, C 2  . . . [, Cn]]])—returns primitive composition of an IT; returns the IT structure itself if invoked for a primitive IT structure. The optional list of parameters C 1  . . . Cn specify names of ITStructure subclasses to be returned by the getPrimitiveComposition( ) method. If C 1  . . . Cn are specified, only IT structures of subclasses with names C 1  . . . Cn will be returned by the getPrimitiveComposition( ) method.
 
12) Vector getInterfaces([String I 1  [, I 2  . . . [, In]]])—returns the list of IT interfaces this IT structure possesses. The optional list of parameters I 1  . . . In specify names of ITInterface subclasses to be returned by the getInterfaces( ) method. If I 1 , . . . In are specified, only IT interfaces of subclasses with names I 1  . . . In will be returned by the getInterfaces( ) method.
 
13) Vector getRelationships([String R 1  [, R 2  . . . [, Rn]]])—returns a list of IT relationships elements of this IT structure&#39;s composition are involved in; returns an empty Vector if no IT relationships exist among elements of this IT structure&#39;s composition. The optional list of parameters R 1  . . . Rn specify names of ITRelationship subclasses to be returned by the getRelationships( ) method. If R 1  . . . Rn are specified, only IT relationships of subclasses with names R 1  . . . Rn will be returned by the getRelationships( ) method.
 
14) Vector getPrimitiveRelationships([String R 1  [, R 2  . . . [, Rn]]])—returns a list of IT relationships elements of this IT structure&#39;s primitive composition are involved in; returns an empty Vector if no IT relationships exist among elements of primitive composition of this IT structure. The optional list of parameters R 1  . . . Rn specify names of ITRelationship subclasses to be returned by the getPrimitiveRelationships( ) method. If R 1  . . . Rn are specified, only IT relationships of subclasses with names R 1  . . . Rn will be returned by the getPrimitiveRelationships( ) method.
 
15) ITRelationship getRelationship(ITStructure A, ITStructure B)—returns the ITRelationship instance for relationship of IT structures A and B within the composition of this IT structure or null if IT structures A and B are not involved in an IT relationship
 
16) Vector setRelationship(ITStructure x, ITInterface xi, ITStructure y, ITInterface yi, Relationship r)—establishes the relationship r between IT structures x and y within the composition of this IT structure. Returns a null Vector if relationship was established successfully, and a Vector of error messages if relationship could not be established.
 
17) Vector setDependency({&lt;add&gt;|&lt;remove&gt;}, ITDependency x)—adds or removes the specified IT dependency to or from this IT structure. Returns a null Vector if dependency was added or removed successfully, and a Vector of error messages if dependency could not be added. Removal of an IT dependency is always successful. Addition of an IT dependency may fail if x contradicts an existing dependency—e.g., x indicates mutual exclusivity with IT structure Y and a dependency on presence of Y is already stated.
 
18) Vector getDependencies([String D 1  [, D 2  . . . [, Dn]]])—returns a list of IT dependencies of this IT structure. The optional list of parameters D 1  . . . Dn specify names of ITDependency subclasses to be returned by the getDependencies( ) method. If D 1  . . . Dn are specified, only IT dependencies of subclasses with names D 1  . . . Dn will be returned by the getDependencies( ) method.
 
18a) Vector getPrimitiveDependencies([String D 1  [, D 2  . . . [, Dn]]])—returns a list of IT dependencies among the elements of the IT structure primitive composition. The optional list of parameters D 1  . . . Dn specify names of ITDependency subclasses to be returned by the getPrimitiveDependencies( ) method. If D 1  . . . Dn are specified, only IT dependencies of subclasses with names D 1  . . . Dn will be returned by the getPrimitiveDependencies( ) method.
 
19) Vector addElement(ITStructure A)—adds IT structure A to the composition of this IT structure. Returns a null Vector if addition was successful, and a Vector of error messages if addition failed. In order to ensure uniqueness of identifiers (computer names, network addresses) within IT structures, each identifier within IT structure A being added is prefixed with string A.getName( )+“.”. As a part of the addition process, addElement( ) method verifies that:
 
a. addition of IT structure A to the composition of this IT structure does not violate any IT dependencies for any IT structure already included in the composition of this IT structure
 
b. addition of IT structure A to the composition of this IT structure does not violate any IT dependencies for IT structure A and ensures that IT dependencies of the IT structure being added are satisfied. Each added IT structure composition element&#39;s name is prefixed with the IT structure name to ensure uniqueness.
 
20) Vector ensureDependencies(ITStructure A)—ensures that IT dependencies of the class requiresPresenceOf of ITStructure A in the composition of this IT structure are satisfied. If processing is unsuccessful, a Vector of error message(s) is returned, otherwise, a null Vector is returned.
 
21) Vector deleteElement(ITStructure A [, &lt;force&gt;])—removes IT structure A from the composition of this IT structure. Returns a null Vector if removal was successful, and a Vector of error messages if removal failed. &lt;force&gt; indicates that A should be removed regardless of relationships with or dependencies on it by other elements of this IT structure&#39;s composition.
 
22) Vector setOptimizationFunctions(Vector F)—specifies a prioritized list (starting with the highest priority and ending with the lowest) of optimization classes (class ITOptimizer) to be applied to this IT structure. Returns a null Vector if processing is successful, and a Vector of error messages otherwise.
 
23) Vector getOptimizationFunctions( )—returns the prioritized list of optimization classes (class ITOptimizer) to be applied to this IT structure.
 
24) Vector optimize( )—performs optimization of the IT structure using the specified prioritized list of optimization classes and applying each optimization function to the IT structure in turn, starting with the highest and ending with the lowest priority of optimization classes. Returns a Vector, containing the optimized IT structure as its first element if optimization was successful, and a list of error messages otherwise.
 
25) Vector setTargetITDeliveryEnvironments(Vector D)—specifies a list of target IT delivery environments (see below) for this IT structure. Returns a list of error messages if an error occurs (e.g., invalid specification of a target IT delivery environment), and a null Vector otherwise.
 
26) Vector getTargetITDeliveryEnvironments( )—returns the list of target IT delivery environments for this IT structure.
 
27) getID( )—returns a real IT structure&#39;s unique identifier; returns null if invoked for a non-real IT structure.
 
28) setID( )—sets real IT structure unique identifier; NOOP for a non-real IT structure.
 
29) Vector SLmaintenance(Vector V)—optional, supported for Autonomic IT System Improvement Cycle (see below); obtains a list of pairs of operational characteristics and associated values provided by monitoring facilities, and performs adjustment of the operational characteristics to sustain the SL. Returns a null Vector if processing is successful and a list of error messages if processing is unsuccessful.
 
30) Boolean isExternal( )—returns true if this IT structure is an external entity, and false otherwise. An external IT structure may be defined for completeness, and represents an IT structure outside the normal operational boundaries, yet which can engage in IT relationships. External IT structures are excluded from the sets of entities returned by getComposition( ) or getPrimitiveComposition( ) methods of the ITStructure class, yet IT relationships can be established to them and will be included in the sets of entities returned by getRelationships( ) or getPrimitiveRelationships( ) methods of the ITStructure class. E.g., for an IT structure defining a server and network configuration for a Web service, a client (or a set of clients) connecting to the Web service through Internet may be defined as an external IT structure. External IT structures are exempt from error verification or optimization, and are ignored when an IT structure comparison is performed, or when a reverse-specification of an IT structure is performed. External IT structures are presumed to be outside of an IT delivery environment, and will not result in generation of real IT entities as a part of the translation or delivery binding processes.
 
31) setBusinessComponents(Vector BC)—sets the list of business components this IT structure directly supports. Note that while all IT structures in a business IT environment support business components, not all IT structures support business components directly, and therefore will have a null list of business components supported. For example, ITStructure ProcurementSystem may support a Procurement business component. At the same time, ITStructure LoggingSubsystem, contained in the ProcurementSystem primitive composition, may not directly support any business components.
 
32) Vector getBusinessComponents( )—returns the list of business components this IT structure directly supports (or null, if none).
 
33) Int getTCO( )—returns the Total Cost of Ownership (TCO) of an IT structure, as calculated or measured by the appropriate financial tracking system(s), expressed in monetary units (e.g., U.S. dollars) per time period (e.g., 1 year). Note that TCO only includes operations and maintenance (defect repair) costs, and does not include development and deployment costs.
 
2.2.2 Detailed Description of Non-Trivial Methods
 
2.2.2.1 Set Functions
 
     A composition of an IT structure instance and relationships among elements of its composition may depend on particular function(s) this IT structure instance is intended to perform. The purpose of this method is to perform the necessary adjustments within IT structure instance that tailor IT structure composition and relationships among composition&#39;s elements as appropriate. This method also performs enforcement of function-specific rules. 
     The setFunctions( ) method is subclass-specific. Class ITStructure includes a placeholder that does nothing other than store the specified business function. ITStructure examples include: 
     1) IT structure X has three functions—A, B, C. However, these functions cannot be fulfilled indiscriminately (by their nature)—either A, or B and/or C, but not A and B, A and C, or A, B, and C can be supported by any instance of IT structure X. The setFunctions( ) method, when invoked, would ensure proper combination of functions requested from the instance of X, and prohibit improper modifications in the future.
 
2) Composition of instance of X may depend on the functions it performs. To perform function A, X may need to include an Intel server running Windows OS, an Oracle DB and a specific program package supporting function A. To perform functions B or C, X may need to include an RS/6000 server (whose power depends on whether only one of functions B and C, or both of these functions are supported), with a DB2 DB and specific program packages supporting functions B or C. So, the composition of X will be altered by the setFunctions( ) method appropriately, based on specification of functions.
 
2.2.2.2 Set Operational Characteristics
 
     A composition of an IT structure instance and relationships among elements of its composition, given a particular set of functions supported by the IT structure instance, may depend on operational characteristics associated with support of particular functions. The purpose of this method is to perform the necessary adjustments within IT structure instance that tailor IT structure composition and relationships among composition&#39;s elements as appropriate. This method also performs enforcement of operational-characteristic-specific rules. 
     The setOperationalCharacteristics( ) method is subclass-specific. Class ITStructure includes a placeholder that does nothing other than store the specified operational characteristic values. 
     Examples: 
     1) IT structure X function A potentially supports up to 500 users. Its response time depends on the power and amount of memory of the processor that runs function A and an increment in the number of supported users can be translated into a processor power and memory increments. An instance of X is created, whose requirement is to support up to 200 users. setOperationalCharacteristics(new Vector(“users”, 200)) can be used to specify that number and adjust the configuration of the Intel server supporting function A in the composition of instance of X to ensure it supports the required number of users.
 
2) Availability of IT structure X instance supporting function A may be 80% or 99.8%, depending on configuration of processors and software supporting function A. If a single set of hardware and software elements support function A, availability is 80%; if supporting hardware and software are duplicated and appropriate monitoring software is added to permit takeover between the two sets of hardware and software, availability is 99.8%. setOperationalCharacteristics(new Vector(“availability”, “high”)) can be used to indicate that instance of X when supporting function A must provide 99.8% availability.
 
3) The above operational characteristics settings may be combined: setOperationalCharacteristics(new Vector((“users”, 200), (“availability”, “high”)))
 
2.2.2.3 Resolve
 
     A composition of an IT structure instance and relationships among elements of its composition, given a particular set of functions supported by the IT structure instance and given a particular set of operational characteristics associated with support of the particular set of functions, may depend on additional factors. A purpose of this method is to perform the necessary adjustments within IT structure instance that tailor IT structure composition and relationships among composition&#39;s elements as appropriate. 
     The resolve( ) method is subclass-specific. Class ITStructure includes a placeholder that does nothing other than store the specified resolution values. 
     Example: Two hardware and operating systems platforms exist that provide equivalent (both in terms of scale and cost) performance, permitting an instance of IT structure X to support the required number of users with equivalent operational characteristics for its function A. For example, the choice of either of the two hardware and operating system platforms for the composition of an instance of IT structure X providing function A will produce an equivalent result. Further, the delivery environment in which the instance of X will operate, support both combinations of hardware and operating system with equivalent costs and service levels. The resolve( ) method may be used to specify which of the two combinations of hardware and operating system platforms to use based on other factors. For example, IT developer&#39;s preference or similarity with hardware and operating system platforms of other IT structures involved in a solution. 
     Assume the two combinations of hardware and operating system platforms are (a) AIX on RS/6000 and (b) Linux on Intel. So, IT structure X may provide a resolution characteristic “platform preference” which may be specified as “AIX” or “Linux”, resulting in the choice of (a) or (b) for the instance of IT structure X. 
     2.2.2.4 Set Relationship 
     Once an IT structure is added to the composition of the IT structure being developed, the developer may specify IT relationships between the added IT structure and other elements of the composition or primitive composition of the IT structure being developed. 
       FIG. 2  is a flow chart depicting the logic of setRelationship( ) method, in accordance with embodiments of the present invention. The Vector setRelationship(ITStructure x, ITInterface xi, ITStructure y, ITInterface yi, Relationship r) establishes the relationship r between IT structures x and y within the composition of this IT structure. The setRelationship( ) method returns a null Vector if relationship was established successfully, and a Vector of error messages if relationship could not be established. The setRelationship( ) method for ITStructure instance X is invoked with parameters ITStructure A, ITInterface AI, ITStructure B, ITInterface BI, ITRelationship R  2101 . The method attempts to find IT structure A in the composition of X  2102 . If IT structure A is not found in the composition of X  2103 , an error message is returned  2104  and processing terminates. The method then attempts to find IT structure B in the composition of X  2105 . If IT structure B is not found in the composition of X  2106 , an error message is returned  2107  and processing terminates. The method then proceeds to finding IT interface AI in the list of IT interfaces of IT structure instance A  2108 . If AI is not found  2109 , an error message is returned  2110  and processing terminates. The method then attempts to find IT interface BI in the list of IT interfaces of IT structure instance B  2111 . If BI is not found  2112 , an error message is returned  2113  and processing terminates. 
     Upon ascertaining presence of both specified IT structure instances A and B and IT interfaces AI and BI within A and B, the method execution enters a critical section  2114  which is used to serialize updates to the IT interface states. A critical section is a portion of the method which cannot be executed concurrently in a multi-threaded fashion, and entry to which must be serialized. No particular method of serialization for critical sections of programs is prescribed by this embodiment—known methods include (but are not limited to) semaphores, process queues, process locks, TS (Test and Set) instruction, CS (Compare and Swap) instruction. 
     The method then checks availability of IT interface AI by invoking the getAvailable( ) method of IT interface AI; if AI is unavailable  2115 , an error message is returned  2116 , previously entered critical section is exited  2124 , and processing terminates. The method proceeds to checking availability of IT interface BI by invoking the getAvailable( ) method of IT interface BI; if BI is unavailable  2117 , an error message is returned  2118 , previously entered critical section is exited  2124 , and processing terminates. 
     Upon ascertaining availability of both AI and BI interfaces, the method attempts to relate IT interfaces AI and BI. Vector x is allocated (not shown in the figure) to contain error message strings from attempts to establish the interface between AI and BI. The method attempts to update IT interface AI as interfacing with IT interface BI by invoking AI method establishInterface(BI), passing it BI as the parameter  2119 . If an error occurs during the establishInterface(BI) method of AI invocation  2120 , Vector x contains error messages, which are returned to the invoker of setRelationship( ) method of IT structure instance X  2121  upon exiting the critical section  2124 . The method then attempts to update IT interface BI as interfacing with IT interface AI by invoicing BI method establishInterface(AI), passing it AI as the parameter  2122 . If an error occurs during the establishInterface(BI) method of AI invocation  2123 , Vector x contains error messages, which are returned to the invoker of setRelationship( ) method of IT structure instance X  2121  upon exiting the critical section  2124 , but only after the error cleanup is performed and the previously established update of IT interface AI is reversed by invoking its method setAvailable(BI)  2125 . 
     If interface establishment was successful, IT relationship R is updated to contain the interface AI and BI  2125  prior to completion of method execution. 
     2.2.2.5 Add Element 
       FIG. 3  is a flow chart depicting the logic of addElement( ) method, in accordance with embodiments of the present invention. The Vector addElement(ITStructure A) method adds IT structure A to the composition of IT structure X. The IT structures A and X may each independently be an abstract IT structure, a virtual IT structure, or a real IT structure. However, the resulting IT structure will have the highest degree of abstraction of that of X and A. For example, if X is abstract the result will be abstract even if A is not abstract, and if A is abstract the result will be abstract even if X is not abstract. As another example, if either X or A is virtual, and both X and A are not abstract, the result will be virtual. 
     The addElement( ) method returns a null Vector if addition was successful, and a Vector of error messages if addition failed. The addElement( ) method of ITStructure instance X is invoked with parameter ITStructure A, referencing the ITStructure instance to be added to X&#39;s composition  2201 . The method retrieves composition of X as a Vector C  2202 . If C is null (there are no composition elements for X)  2203 , this is the addition of the first element, and no additional checks are necessary. The method creates a composition Vector C for X  2204 , adds ITStructure A to C  2205 , and returns. 
     If ITStructure X is a primitive IT structure (X.isPrimitive( )=true)  2243 , an error message is stored  2244  and processing terminates. 
     If ITStructure X already has non-empty composition  2203 , the method iterates through X&#39;s composition elements making sure no IT dependencies of either X or A are violated by the addition of A to X. While there are elements in C  2206 , the next unprocessed element E of C is obtained  2207 , and its list of IT dependencies De is extracted using the getDependencies( ) method of E  2208 . 
     While there are unprocessed elements in De (list of IT dependencies of ITStructure E)  2209 , the following is performed. A critical section is entered  2210 . The next element d of De is obtained  2211 . If d (which belongs to the class ITDependency) indicates exclusion with class Y and IT structure A belongs to class Y or its subclass  2212 , an error message is stored  2213 , and upon exiting from the critical section  2214 , processing terminates. Otherwise, critical section is exited  2215 . 
     The method execution then proceeds to obtaining the list Da of IT dependencies of A using the getDependencies( ) method of A  2216 . While there are unprocessed elements in Da (list of IT dependencies of ITStructure A)  2217 , the following is performed. A critical section is entered  2218 . The next element d of Da is obtained  2219 . If d (which belongs to the class ITDependency) indicates exclusion with class Z and IT structure E belongs to class Z or its subclass  2220 , an error message is stored  2213 , and upon exiting from the critical section  2214 , processing terminates. Otherwise, critical section is exited  2222 . 
     When all possible combinations of potential dependencies of IT structure A and all elements of the composition of X are exhausted, and no violation has been found, the addElement( ) method invokes method ensureDependencies(A)  2245  to ensure that any of A&#39;s IT dependencies of the class requiresPresenceOf are satisfied. If ensureDependencies( ) method&#39;s processing was not successful  2246 , any error messages returned by the ensureDependencies( ) method&#39;s invocation are returned, otherwise, A is added to the composition A is added to the composition C of IT structure X  2205 . 
     2.2.2.6 Ensure Dependencies 
       FIG. 7  is a flow chart depicting the logic of ensureDependencies( ) method, in accordance with embodiments of the present invention. The ensureDependencies(ITStructure A) method ensures that IT dependencies of the class requiresPresenceOf of ITStructure A in the composition of this IT structure are satisfied. If processing is unsuccessful, a Vector of error message(s) is returned, otherwise, a null Vector is returned. The ensureDependencies( ) method is invoked for IT structure instance X with parameter ITStructure A  2601 . The method retrieves composition of X as Vector C  2602  and the list of A&#39;s IT dependencies, from which it selects a subset (list D) of IT dependencies of class requiresPresenceOf  2603 . The method then iterates through list D of IT dependencies of class requiresPresenceOf of IT structure A, until the end of the list is reached  2604 . Each element d of list D is an IT dependency d of class requiresPresenceOf. The method retrieves the next element d from the list  2605  and attempts to find an element of C (IT structure X composition) that satisfies the IT dependency d  2606 . If an element E of C satisfying IT dependency d is found  2607 , IT dependency d is considered to be satisfied. 
     ensureDependencies( ) method then creates an abstract IT structure E of ITStructure subclass that satisfies IT dependency d  2608  and attempts to add E to the composition of IT structure X using a recursive invocation of X.addElement(E)  2609 . If execution of X.addElement(E) failed (i.e., E could not be added to X&#39;s composition—e.g., because it is exclusive with some element of X&#39;s composition)  2610 , any error messages returned by X.addElement(E) are returned  2611  and processing terminates. Otherwise, addition of E to X&#39;s composition was successful, IT dependency d is now considered to be satisfied. 
     An abstract IT relationship (defaultRelationship) between E (either found in the composition C of IT structure X, or newly created) and A using defaultInterface of both is created and added to IT structure X)  2612 . If establishment of the IT relationship was unsuccessful  2613 , error message(s) are returned to the invoker  2611 . If E was newly added  2614 , it is removed  2615  to maintain the composition of IT structure X unchanged. 
     If establishment of the new IT relationship was successful  2613 , the next element d of A&#39;s dependencies is considered. 
     2.2.2.7 Delete Element 
       FIG. 4  is a flow chart depicting the logic of deleteElement( ) method, in accordance with embodiments of the present invention. The deleteElement(ITStructure A [, &lt;force&gt;]) method removes IT structure A from the composition of this IT structure. Returns a null Vector if removal was successful, and a Vector of error messages if removal failed. &lt;force&gt; indicates that A should be removed regardless of relationships with or dependencies on it by other elements of this IT structure&#39;s composition. In a first embodiment the &lt;force&gt; option is available for being selected, and in a second embodiment the &lt;force&gt; option is not available for being selected. Thus, the &lt;force&gt; option may not be specified because: (1) the &lt;force&gt; option is not available for being selected or (2) the &lt;force&gt; option is available for being selected but was not selected. The deleteElement( ) method is invoked for IT structure instance X with parameter ITStructure A and an optional specification of &lt;force&gt;  2301 . The method retrieves composition of X as Vector C  2302  and attempts to find IT structure A in C  2303 . if A is not found in C  2304 , an error message is stored  2305  and processing terminates. Otherwise, the method proceeds through the attempt to remove A from C. 
     The method builds the list R of IT relationships of elements of C that involve A  2306 . If R is not null (i.e., A is involved in IT relationships with at least one other element of composition of X)  2307 , the method checks whether the &lt;force&gt; option was specified  2308 , and if not, A cannot be removed from the composition of X, an error message is stored  2309 , and processing terminates. If, however, &lt;force&gt; was specified, the method removes all IT relationships in the list R and removes them from the list of IT relationships of elements of C  2310 . 
     The method then proceeds to check IT dependencies involving A. The method builds a list D of all dependencies of elements of C other than A itself on A  2311 . If the list D is not null  2312 , for each dependency in list D, the method attempts to find an element in C other than A that would satisfy the dependency  2316 . If replacements were not found for any dependencies in list D  2317 , the method checks whether the &lt;force&gt; option was specified  2313 , and if not, A cannot be removed from the composition of X, an error message is stored  2314 , and processing terminates. 
     Otherwise, if all previous checks indicate that removal of A will not damage IT structure X, or if the &lt;force&gt; option specification overrides the possible damage, the method removes A from C  2315 . 
     2.3 IT Interfaces 
     An IT Interface is a characteristic of an IT structure, specifying a type of relationship this IT structure can engage in relative to other IT structures. 
     An abstract IT interface instance is an IT interface instance involving at least one abstract IT structure. 
     A virtual IT interface instance is a non-abstract IT interface instance involving at least one virtual IT structure. 
     A real IT interface instance is an IT interface instance involving only real IT structures. 
     A multi-connection IT interface is an IT interface to which multiple IT structures can relate (connect). For example, multiple invokers can call a single program—sometimes, concurrently. 
     A single-connection IT interface is an IT interface to which a single IT structure can relate (connect). For example, only a single cable can be plugged into a single printer port of a personal computer. 
     An available IT interface is an IT interface to which one or more IT structures can relate (connect). 
     A busy or Unavailable IT interface is an IT interface which has exhausted its ability to relate, and cannot be involved in any additional relationships (i.e., the maximum number of relationships have already been established). For example, a printer port of a personal computer is available if nothing is connected to it, and busy/unavailable if a printer cable is plugged into it. 
     2.3.1 ITInterface Class 
     An ITInterface class inherits from ITEntity class and has the following methods: 
     1) ITInterface(String name, Type type)—constructor, creates an ITInterface instance with specified name and type 
     2) boolean is SingleConnection( )—returns true if this ITInterface is a single-connection IT interface, and false otherwise 
     3) boolean is Available([int p])—returns true if ITInterface is available, false otherwise; optional parameter p indicates the specific connection for a multi-connection interface 
     4) setAvailable([ITInterface i])—makes ITInterface available; an ITInterface parameter i may be specified for multi-connection IT interfaces to indicate which of the multiple connections is to be made available 
     5) Vector establishinterface(ITInterface i [, int p])—establishes an interface with the parameter IT interface; returns an empty Vector if interface was established successfully, and a list of error messages otherwise. For a multiple-connection IT interface, may be optionally provided with the second parameter p specifying the connection.
 
6) int getAvailable( )—for multi-connection IT interfaces returns the number of available connections; always returns zero (unavailable) or one (available) for single-connection IT interfaces; always returns “high integer” for multi-connection IT interfaces with unlimited number of connections
 
7) int getRelated( )—returns the number of ITInterface instances related to this ITInterface
 
8) Vector getRelatedITInterfaces( )—returns a list of zero or more ITInterface instances related to this ITInterface
 
9) Vector verifyValidity(ITInterface Y)—returns null Vector if a connection between this IT interface instance and IT interface instance Y would be valid—i.e., the ITInterface subclass of this instance correlates with the ITInterface subclass of ITInterface instance Y; returns a Vector containing error message(s) if subclasses of X and Y do not correlate.
 
     Note that the verifyValidity( ) method is a NOOP in the ITInterface class—each subclass of ITInterface, with the exception of DefaultInterface, overrides this method with the appropriate logic. Also note that an ITInterface cannot be instantiated—only ITInterface subclasses have practical uses. 
     2.3.2 ITInterface Subclasses 
     A number of different interfaces may exist among IT structures. Each IT structure, by definition, includes the DefaultInterface, which is used to establish relationships not involving real interfaces, such as “requires presence of . . . to install”. DefaultInterface supports any relationships. 
     Other ITInterface subclasses are (“correlates” in this context means “can only be related to”): 
     InstalledOn(&lt;single&gt;)—IT structure is installed using this interface (correlates with Supports) 
     Supports({&lt;single&gt;|&lt;multiple&gt;})—IT structure(s) can be installed on this interface (correlates with InstallsOn) 
     ConnectsTo(&lt;connection type&gt;,{&lt;single&gt;|&lt;multiple&gt;})—can connect to IT structure(s) using &lt;connection type&gt;, correlates with ConnectsTo 
     where: 
     &lt;connection type&gt;::={&lt;direct&gt;|&lt;network&gt;|&lt;messaging&gt;|&lt;other&gt;} 
     X ConnectsTo(&lt;connection type&gt;,{&lt;single&gt;|&lt;multiple&gt;}, Integer IPaddress, Integer NetMask, String transport[,Vector ports])—an additional constructor signature for ConnectsTo, where IPaddress is the IP address associated with this interface, NetMask is the associated netmask, transport is an identifier of the type of transport (“TCP” or “UDP”), and ports is a list of IP ports to be used (if not specified, dynamic port assignment is assumed).
 
Invokes(&lt;invocation type&gt;, &lt;single&gt;)—can invoke IT structure using &lt;invocation type&gt;, correlates with Invokable
 
Invocable(&lt;invocation type&gt;, {&lt;single&gt;|&lt;multiple&gt;})—can be invoked by IT structure(s) using &lt;invocation type&gt;, correlates with Invokes
 
where:
 
&lt;invocation type&gt;::={&lt;direct&gt;|&lt;interrupt&gt;|&lt;other&gt;}
 
Manages({&lt;single&gt;|&lt;multiple&gt;})—is managing IT structure(s), correlates with Manageable
 
Manageable(&lt;single&gt;)—is managed by IT structure, correlates with Manages
 
X Balances(&lt;multiple&gt;)—is balancing load for IT structures, correlates with BalancedBy
 
X BalancedBy(&lt;single&gt;)—is balanced by a load balancer, correlates with Balances
 
Table 3 shows valid ITInterface subclass correlations, wherein “yes” denotes a pair of correlated IT interfaces.
 
     
       
         
           
               
             
               
                 TABLE 3 
               
             
            
               
                   
               
               
                 Interface correlations 
               
            
           
           
               
               
               
               
               
               
               
               
               
               
               
            
               
                   
                 Default 
                 Installed 
                   
                 Connects 
                   
                   
                   
                   
                   
                 Balanced 
               
               
                   
                 Interface 
                 On 
                 Supports 
                 To 
                 Invokes 
                 Invocable 
                 Manages 
                 Manageable 
                 Balances 
                 By 
               
               
                   
               
               
                 Default 
                 yes 
                 yes 
                 Yes 
                 yes 
                 yes 
                 yes 
                 yes 
                 yes 
                 yes 
                 yes 
               
               
                 Interface 
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
               
               
                 InstalledOn 
                 yes 
                   
                 Yes 
                   
                   
                   
                   
                   
                   
                   
               
               
                 Supports 
                 yes 
                 yes 
                   
                   
                   
                   
                   
                   
                   
                   
               
               
                 ConnectsTo 
                 yes 
                   
                   
                 yes 
                   
                   
                   
                   
                   
                   
               
               
                 Invokes 
                 yes 
                   
                   
                   
                   
                 yes 
                   
                   
                   
                   
               
               
                 Invocable 
                 yes 
                   
                   
                   
                 yes 
                   
                   
                   
                   
                   
               
               
                 Manages 
                 yes 
                   
                   
                   
                   
                   
                   
                 yes 
                   
                   
               
               
                 Manageable 
                 yes 
                   
                   
                   
                   
                   
                 yes 
                   
                   
                   
               
               
                 Balances 
                 yes 
                   
                   
                   
                   
                   
                   
                   
                   
                 yes 
               
               
                 BalancedBy 
                 yes 
                   
                   
                   
                   
                   
                   
                   
                 yes 
               
               
                   
               
            
           
         
       
     
     The IT interface subclasses are summarized as follows in terms of IT 1 , IT 2 , IF 1 , and IF 2 : 
     IT 1 : IT structure  1   
     IT 2 : IT structure  2   
     IF 1 : interface of IT structure  1   
     IF 2 : interface of IT structure  2   
     1) Installed On: a characteristic of IF 1  permitting IT 1  to be installed on IT 2   
     2) Supports: a characteristic of IF 2  permitting IT 1  to be installed on IT 2   
     3) ConnectsTo: a characteristic of IF 1  permitting IT 1  to connect to IT 2   
     4) Invokes: a characteristic of IF 1  permitting IT 1  to invoke IT 2   
     5) Invocable: a characteristic of IF 2  permitting IT 2  to be invoked by IT 1   
     6) Manages: a characteristic of IF 1  permitting IT 1  to manage IT 2   
     7) Manageable: a characteristic of IF 2  permitting IT 2  to be managed by IT 1   
     8) Balances: a characteristic of IF 1  permitting IT 1  to balance load for IT 2   
     9) BalancedBy: a characteristic of IF 2  permitting IT 2  to be balanced by IT 1   
     Examples of IT interfaces are as follows 
     A program is installed on a computer 
     A computer supports one or more programs to be installed on the computer 
     Computer A connects to computer B through a network 
     Program A invokes program B 
     Program B is invocable by program A 
     Program A manages system B 
     System B is manageable by program A 
     In this embodiment, labor entities are associated with other entities by means of defaultInterface and defaultITRelationship. In another embodiment, a special ITInterface, laborInterface, may be defined, and used to comprise a laborRelationship to relate a labor entity to another entity. 
     2.3.3 Detailed Description of Non-Trivial Methods 
     2.3.3.1 Set Available 
       FIG. 5  is a flow chart, depicting the logic of setAvailable( ) method, in accordance with embodiments of the present invention. The setAvailable([ITInterface i]) method makes ITInterface available; an ITInterface parameter i may be specified for multi-connection IT interfaces to indicate which of the multiple connections is to be made available. The setAvailable( ) method is invoked for ITInterface instance X with an optional parameter ITInterface i  2401 . If IT interface instance X is a single-connection IT interface (X.isSingleConnection( ) returns true)  2402 , the field interfacing With in ITInterface X is set to null  2403 , and the count of IT interfaces X is interfacing with is set to zero  2404 . Note that it is the responsibility of the invoker to ensure that the corresponding IT interface that was interfacing with X (if any) also becomes available. 
     If ITInterface X is a multiple-connection IT interface  2402 , processing ensures that a parameter i is passed, indicating which connection out of the multitude to make available. If parameter i is not passed  2411 , and an error is signaled  2412 , and processing terminates. The mechanism of signaling an error may vary, depending on implementation, and may include, but is not limited to, an error message, an exception, an ABEND, a log and/or a trace entry. 
     Upon ascertaining availability of parameter i  2311 , processing enters a critical section  2405 . ITInterface i passed as the parameter to method setAvaliable( ) is located in the array of IT interfaces ITInterface X is interfacing with  2406 . If i is not found  2407 , processing terminates after exiting a critical section  2410 . If i is found  2407 , the method sets the entry in the array of IT interfaces ITInterface X is interfacing with that corresponds to i to null  2408 , decrements the count of IT interfaces X is interfacing with  2409 , and exits the critical section  2410 . 
     2.3.3.2 Establish Interface 
       FIG. 6  is a flow chart depicting the logic of establishInterface( ) method, in accordance with embodiments of the present invention. The establishinterface(ITInterface i [, int p]) method establishes an interface with the parameter IT interface; returns an empty Vector if interface was established successfully, and a list of error messages otherwise. The establishInterface( ) method is invoked for ITInterface instance X with a parameter ITInterface Y and an optional parameter integer p  2501 . 
     The method starts by verifying validity of establishment of connection between X and Y (by invoking method X.verifyValidity(Y))  2502 . If establishment of connection between X and Y is invalid (X.verifyValidity(Y) returns error message(s))  2503 , method establishInterface( ) returns the error message(s) returned by X.verifyValidity(Y) invocation  2504  and terminates processing. 
     If ITInterface X is a single-connection interface  2505 , but X is available  2506 , method establishInterface( ) returns and error message  2507  and terminates processing. Otherwise, if X is a single-connection interface  2505  and X is available  2506 , a critical section is entered  2508  the interfacingWith reference of ITInterface X is set to Y  2509 , the count of IT interfaces X is connected with is set to one  2510 , the critical section is exited  2511 , and processing completes successfully. 
     For a multiple-connection ITInterface X  2505 , critical section is entered  2512 . If the optional parameter p was specified on invocation of method establishInterface( )  2513 , but p-th entry of X&#39;s array of connections is not null (X.isAvailable(p)=false), indicating that the p-th connection of X is unavailable  2514 , an error message is stored  2515 , the critical section is exited  2511 , and processing terminates. If, on the other hand, the p-th connection of X is available  2514 , the p-th entry in X&#39;s array of connections is set to Y  2516 . 
     If the optional parameter p was not specified on invocation of method establishInterface( )  2513 , an attempt is made to find an available (null) entry in X&#39;s array of connections  2519 . If an available entry is found  2521 , the found entry is set to Y  2520 , otherwise an error message is stored  2522 , and processing terminates after exiting the critical section  2511 . 
     If a connection was established  2516   2520 , if ITInterface X does not support an unlimited number of connections  2517 , the count of connections of X is incremented  2518 . The method establishInterface( ) then exits the critical section  2511  and completes its processing. 
     2.4 IT Relationships 
     An IT Relationship is a pair of associated (established) IT interfaces belonging to two different IT structure instances. Note that the notion of IT relationship is introduced for convenience. This notion is not absolutely necessary for the model, since a pair of established IT interfaces can always be considered in and of itself, but IT relationships represent a convenient way of tracking interfacing IT structure pairs. 
     A symmetric IT relationship is an IT relationship, involving IT interfaces of identical class. Examples of a symmetric IT relationship include: 
     1) IT structure A uses ConnectsTo interface to relate to IT structure B, and IT structure B uses ConnectsTo interface to relate to IT structure A. 
     2) IT structure A uses DefaultInterface to relate to IT structure B, and IT structure B uses DefaultInterface to relate to IT structure A. 
     An asymmetric IT relationship is an IT relationship, involving IT interfaces of different classes. As an example, IT structure A InstallsOn IT structure B, while IT structure B Supports IT structure A. 
     An abstract IT relationship instance is an IT relationship interface instance involving at least one abstract IT interface instance. 
     A virtual IT relationship instance is a non-abstract IT relationship instance involving at least one virtual IT interface. 
     A real IT relationship instance is an IT relationship instance involving only real IT interface instances. 
     2.4.1 ITRelationship Class 
     ITRelationship class inherits from ITEntity class and has the following methods: 
     1) ITRelationship(String name, Type type[, ITInterface A, B])—constructor, establishes a relationship &lt;name&gt; of type &lt;type&gt; using IT interfaces A and B, or defaultInterface if A and B are not specified. 
     2) boolean is Symmetric( )—returns true if relationship is symmetric, false otherwise 
     3) [ ] ITInterface getRelatedITInterfaces( )—returns the pair of ITInterface instances involved in a relationship ITRelationship cannot be instantiated—only ITRelationship subclasses have practical uses. 
     2.4.2 ITRelationship Subclasses 
     Subclasses of the ITRelationship class are predicated by the types of IT interfaces included in the model. The following IT relationships may exist given the types of IT interfaces defined above: 
     DefaultITRelationship—two IT structures are related in an unidentified way 
     InstallationITRelationship—IT structure  1  is installed on IT structure  2   
     CommunicationITRelationship(&lt;connection type&gt;)—IT structure  1  communicates to IT structure  2  using &lt;connection type&gt; 
     InvocationITRelationship(&lt;invocation type&gt;)—IT structure  1  invokes IT structure  2   
     ManagementITRelationship—IT structure  1  manages IT structure  2   
     2.5 IT Dependencies 
     An IT dependency is a characteristic of an ITStructure class, indicating requirements of this ITStructure class instances for presence or absence of this or other ITStructure class instances. 
     A symmetric IT dependency is an IT dependency which can be applied to ITStructure subclasses involved, regardless of the order of ITStructure subclasses in the IT dependency predicate. For example, IT structure A depends on IT structure B, and IT structure B depends on IT structure A in the same way. The order of A and B in the previous sentence may be reversed without a change in meaning of the sentence. 
     An asymmetric IT dependency is a non-symmetric IT dependency (i.e., it cannot be applied to ITStructure subclasses involved regardless of their order in the IT dependency predicate). For example: IT structure A depends on IT structure B, but IT structure B does not depend on IT structure A. 
     2.5.1 ITDependency Class 
     ITDependency class inherits from ITEntity class and has the following methods: 
     1) ITDependency(String name, String A, B)—constructor, establishes a dependency of ITStructure subclass A on ITStructure subclass B, where A and B are names of subclasses. 
     2) boolean is Symmetric( )—returns true if relationship is symmetric, false otherwise 
     3) [ ] String getDependentClasses( )—returns the pair of names of ITStructure subclasses involved in an IT dependency. 
     ITDepdendency cannot be instantiated—only ITDependency subclasses have practical uses. 
     2.5.2 ITDependency Subclasses 
     A number of different dependencies may exist among IT structures comprising (i.e., included in a complex IT structure&#39;s composition) or potentially comprising an IT structure (i.e., having a potential of being included in a complex IT structure&#39;s composition). For the purposes of this definition, the following dependencies (ITDependency subclasses) are considered (i.e., other dependencies may be defined as appropriate for the structural model): 
     1) RequiresPresenceOf—as in “IT structure  1  requires presence of IT structure  2 ” 
     2) ExclusiveWith—Negation of 1—as in “IT structure  1  is exclusive with IT structure  2 ”, IT structure  1  cannot be installed or operate in the presence of IT structure  2   
     In this embodiment, no difference is made between requirement of presence for installation and requirement of presence for operation, and the corresponding exclusivity. In another embodiment, such distinction could be made. 
     2.6 IT Delivery Environment 
     An IT delivery environment (or delivery environment) is a collection of rules, policies, practices, and associated support functions, including labor, physical space, power supply, hardware, software, networking, and management facilities involved in operating a data center, as well as means of provisioning and deployment of the aforementioned support functions. IT delivery environment also includes a collection of all delivery-bound real IT structures operating in it or in process of being deployed. 
     IT delivery environment may be null if every IT structure in it operates independently, does not use any data center services, no data center infrastructure exist, and no rules or standards are imposed on IT structures by the delivery environment. For example: a stand-alone personal computer is operated in a null IT delivery environment. 
     A delivery-bound IT structure is a virtual IT structure that can be provisioned and deployed in a particular IT delivery environment. 
     2.6.1 ITDeliveryEnvironment Class 
     ITDeliveryEnvironment class inherits from ITStructure and is always a complex IT structure. ITDeliveryEnvironment composition includes all IT structures deployed in the delivery environment. ITDeliveryEnvironment composition may (and normally would) also include one or more IT structures representing data center infrastructure. 
     Unlike ITStructure, ITDeliveryEnvironment permits an empty composition—empty composition is valid for the null IT delivery environment. 
     In addition to the standard ITStructure methods, ITDeliveryEnvironment includes the following methods: 
     1) Vector verifyConformance(ITStructure A)—verifies conformance of an IT structure to the rules of the IT delivery environments. Returns an empty Vector if the parameter IT structure conforms to the IT delivery environment rules, and a Vector containing a list of error message strings if the parameter IT structure does not conform to the IT delivery environment rules. This method is a NOOP for the null IT delivery environment.
 
Example: A set of product standards may be established by a data center, such that for certain types of products only products included in the standard set may be used—e.g., operating systems may be restricted to UNIX, and Windows; e.g., UNIX hardware platforms may be restricted to RS/6000 model F50 or H50 and no other computer may be used to run UNIX. verifyConformance( ) method in this case would examine the composition of its parameter IT structure (recursively, if the parameter IT structure is complex) and ensure that it only includes products for operating systems and hardware platform for UNIX that are either within the established set of standards or have higher level of abstraction than specific operating system and specific type of hardware.
 
2) Vector addElement({&lt;new&gt;|&lt;update&gt;}, ITStructure A)—overrides the parent class addElement( ) method; performs delivery binding of a virtual IT structure. Returns a Vector containing a delivery-bound IT structure as the first element if delivery binding is successful, and a list of error messages otherwise. This method is a NOOP (i.e., returns the input virual IT structure as the first element of the returned Vector) for the null IT delivery environment. &lt;new&gt; or &lt;update&gt; input parameter may be specified to indicate whether this is a binding of a newly added IT structure, or an update of an existing IT structure.
 
3) Vector deploy({&lt;new&gt;|&lt;update&gt;}, ITStructure A)—initiates deployment of a delivery-bound IT structure. Returns a Vector containing error messages if processing is unsuccessful, and a null Vector otherwise. &lt;new&gt; or &lt;update&gt; input parameter may be specified to indicate whether this is a deployment of a new IT structure, or a change to an existing IT structure.
 
4) NetworkSecurityPolicy getNetworkSecurityPolicy( )—returns network security policy established within the IT delivery environment. The NetworkSecurityPolicy class may be specific to a particular IT delivery environment.
 
5) setNeworkSecurityPolicy(NetworkSecurityPolicy S)—establishes a network security policy S for an IT delivery environment.
 
Note that all methods of ITDeliveryEnvironment class are subclass-specific. Class ITDeliveryEnvironment includes NOOP placeholders.
 
2.7 Extending Entity Model
 
     The above model provides a foundation for building an IT class library. However, it is highly abstract and insufficient for effective modeling of IT. A set of general extensions, with its classes inheriting from the appropriate base IT classes, defining basic IT constructs, such as computers or network devices, is required as further foundation. Such extended class libraries exist—e.g., Common Information Model (CM). 
     Another example of such class hierarchy is described in  FIG. 18 , in accordance with embodiments of the present invention.  FIG. 18  is an example of a set of extensions going from the class hierarchy origin (ITEntity) down to a set of specific computer models shown at a lowest hierarchical level as the virtual IT structures RS/6000 model F30, RS/6000 model F50, and RS/6000 model H50.  FIG. 18  also shows intermediate hierarchical levels having successively lower degrees of abstraction. For example, consider the following example path through the hierarchical representation shown in  FIG. 18 : ITStructure, device, Identifiable Device, computer, IBM xSeries, RS/6000, RS/6000 model F50. In the preceding example, device is less abstract than ITstructure, IdentifiableDevice is less abstract than device, computer is less abstract than IBMxSeries, IBMxSeries is less abstract than RS/6000, and RS/6000 is less abstract than RS/6000 model F50. The lowest level IT structure of RS/6000 model F50 is a virtual IT structural, though not delivery bound. 
     Within the IT class hierarchy, class Device is included; the class Device embodies any types of hardware devices, and, in addition to all inherited and specific properties and methods associated with class Device, provides the following methods: 
     Int PeakPowerConsumption( )—returns the peak power consumption of the device (expressed in KW); 
     Boolean is RackMounted( )—returns true if the device is rack-mounted, and false otherwise; 
     Int requiredSpace( )—returns the number of rack slots a device requires if it is rack mounted, or the size of device footprint (expressed in square feed) if device is not rack mounted. 
     Within the IT class hierarchy, class Firewall is included; the class Firewall embodies any type of firewalls, and, in addition to all inherited and specific properties and methods associated with class Firewall, provides the following methods: 
     Vector getRules( )—returns the Vector of firewall rules associated with this firewall, or null if no rules have been specified for this firewall; 
     setRules([Vector rules)])—if not specified, the set of firewall rules is set to empty (no rules); otherwise, the set of firewall rules is set to the specified Vector of rule strings. 
     Class Program, also included in the IT class hierarchy, in addition to all the other properties and methods inherited or specific to class Program, possesses the properties IPTransportServer and Ports. Note that “application” and “software” are each to be construed as a member of the class Program. 
     IPTransportServer([“TCP”|“UDP”])—sets the IPTransportServer property value to “TCP” if a Program is a TCP server, “UDP” if a Program is a UDP server, or null, if a Program is not an IP transport server. 
     String getIPTransportServer( )—returns the value of the IPTransportServer property. 
     Ports is a Vector of TCP or UDP ports which the Program uses to accept communications. 
     setPorts([Vector &lt;ports&gt;])—sets the value of IP ports associated with the IP transport server; if not specified, dynamic port assignment is assumed, 
     Vector getPorts( )—retrieves the list of ports associated with the IP transport server. 
     Associated with the above properties, is a list of clients, IPClients. 
     Vector getIPClients( )—returns a list of IP clients associated with the IP transport server. 
     setIPClients(Vector &lt;IP address&gt;)—associates a set of IP clients with the IP transport server, where &lt;IP address&gt; is either address of the host or network where each client is located. 
     The isSessionBased property of class Program indicates whether the program represented by the instance of class Program supports persistent sessions. 
     Boolean isSessionBased( )—returns the value of isSessionBased property of class Program, 
     void setIsSessionBased({true|false})otherwise sets the value of isSessionBased property to the specified Boolean value. 
     The expectedTxLoad property of class Program reflects the expected server load triggered by a single transaction on the scale of 0, 1, 2, 3 where 0 corresponds to unknown, 1 reflects low expected server load, 2 reflects medium expected server load, and 3 reflects high expected server load. 
     Integer getExpectedTxLoad( )—returns the value of expectedTxLoad property. 
     setExpectedTxLoad({0|1|2|3})—sets the value of expectedTxLoad property. 
     setPeakBandwidth(Int &lt;peak bandwidth&gt;)—sets the value of peak bandwidth this program may require, expressed in Mbps. 
     Int getPeakBandwidth( )—returns the peak value of bandwidth this program may require, expressed in Mbps. 
     Class Program may be associated with an ITServer object; this association is established by means of getITServer( ) and setITServer( ) methods. 
     ITServer getITServer( )—returns ITServer object associated with the Program, or null if none is associated. 
     setITServer(ITServer S)—associates a Program with ITServer S, or disassociates a Program from an ITServer if S is null. 
     An ITServer class, included in the IT class hierarchy, in addition to all the other properties and methods inherited or specific to class ITServer, has the following methods: 
     setITLBGroup(ITLBGroup G)—associates an ITServer with an instance of ITLBGroup, or disassociates ITServer from an instance of ITLBGroup if G is null. 
     ITLBGroup getITLBGroup( )—returns the associated ITLBGroup instance, or null if no ITLBGroup instance is associated. 
     setlbApplication(Program A)—sets an association with an instance of Program object which represents the application program requests to which should be load balanced. 
     Program getlbApplication( )—returns instance of class Program, requests to which should be load balanced, or null if no such program has been associated using setlbApplication( ) method. 
     An ITLBGroup class, included in the IT class hierarchy, in addition to all the other properties and methods inherited or specific to class ITLBGroup, has the following methods: 
     Vector getServerList( )—returns the list of ITServer objects comprising the load balanced group. 
     setServerList(Vector S)—sets the list of ITServer objects comprising the load balanced group. 
     ITLBMechanism getITLBMechanism( )—returns the instance of ITLBMechanism class, which contains the definition and parameters of the load balancing mechanism to be used 
     setITLBMechanism(ITLBMechanism M)—sets the instance of ITLBMechanism class. 
     ITLBSessionPersistence getITLBSessionPersistence( )—returns the stored definition of the session persistence mechanism to be used; class ITLBSessionPersistence is a user-defined class which represents the session persistence mechanism to be used—source IP address/port, URL, or cookie-based string. 
     setITLBSessionPersistence (ITLBSessionPersistence S)—sets the definition of the session persistence mechanism to be used. 
     Class LoadBalancer is included in the IT class hierarchy, embodying any type of load balancer, and, in addition to all the other properties and methods inherited or specific to class LoadBalancer, having the following methods:
         Vector getRules( )—returns the Vector of load balancing rules associated with this load balancer, or null if no rules have been specified for this load balancer.       

     setRules([Vector rules)])—if not specified, the set of load balancer rules is set to empty (no rules); otherwise, the set of load balancer rules is set to the specified Vector of rule strings. 
     Class ITLBMechanism is the parent for the following classes which describe individual load balancing mechanisms which have become de-facto industry standards: ITLBMechanismRoundRobin, ITLBMechanismLeastLoad, ITLBMechanismFastestResponse. 
     Class ITLBMechanismRoundRobin provides the following methods: 
     setWeightCoefficients(Vector weightcoefficients[ ])—sets weight coefficients associated with the round-robin algorithm for load balancing 
     Vector getWeightCoefficients( )—returns the values of weight coefficients associated with the round-robin algorithm for load balancing 
     Class ITLBMechanismLeastLoad provides the following methods: 
     setLoadMetrics(ITLBLoadMetrics loadMetrics)—specify least load algorithm load metrics, where class ITLBLoadMetrics is a user-defined class which provides a method returning a double precision value of the load metrics. 
     ITLBLoadMetrics getLoadMetrics( )—retrieve least load algorithm load metrics 
     Class ITLBMechanismFastestResponse provides the following methods: 
     setResponseString(String responseString)—sets the response string associated with the fastest response load balancing algorithm. 
     String getResponseString( )—retrieves the response string associated with the fastest response load balancing algorithm. 
     Within the IT class hierarchy, class ITIPTransportWrapper is included, to describe IP transport wrappers, and, in addition to all inherited properties and method, possesses the following properties and provides the following methods:
         IPTransport([“TCP”|“UDP”])—sets the IPTransport property value to “TCP” if the non-compliant transport is TCP, “UDP” if the non-compliant transport is UDP, or null otherwise.       

     String getIPTransport( )—returns the value of the IPTransport property. 
     Vector getInPorts( )—returns the vector of TCP or UDP ports where the wrapper is to intercept the incoming communications. 
     setInPorts(Vector P)—sets the vector of TCP or UDP ports where the wrapper is to intercept the incoming communications. 
     Integer getOutPort( )—returns the number of TCP or UDP port where the wrapper is to open the pipe to. 
     The present invention discloses a translator (see Section 2.10 infra) to translate the abstract IT structure at the highest level (denoted as ITStrucure) to the virtual IT structures RS/6000 model F30, RS/6000 model F50, and RS/6000 model H50. To effectuate such translation, all of the intermediate IT structures shown in  FIG. 18  may be stepped through in order to arrive at the final virtual IT structures (e.g., RS/6000 model F30, RS/6000 model F50, RS/6000 model H50, etc.). In some embodiments, however, the designer may provide sufficient input description (typically stored in libraries) so that the translator may not have to step through all of the intermediate IT structures shown in  FIG. 18  to arrive at the final virtual IT structures. For example, a requirement that a particular IT structure can store and execute software may imply that the particular IT structure is a computer, so that the intermediate levels of device and IdentifiableDevice in the preceding example path could be skipped by the translator. 
     Although each IT structure box in  FIG. 18  is a primitive IT structure, a box appearing in the hierarchy of  FIG. 15  could alternatively be a complex IT structure. For example, a box in the hierarchy could represent a client-server architecture as a complex IT structure having primitive elements of server and client. 
     2.8 Extended IT Delivery Environment 
     Similar to ITStructure subclasses, the ITDeliveryEnvironment class can have subclasses, used to define various delivery environments. All of ITDeliveryEnvironment subclasses must override two methods: verifyConformance( ) and addElement( ). The verifyConformance( ) method verifies whether a particular IT structure can be deployed and can operate within a given instance of an ITDeliveryEnvironment subclass. The addElement( ) method performs delivery binding of an IT structure to the IT delivery environment subclass instance if the IT structure has been previously verified via verifyConformance( ) to be deployable and operable within the IT delivery environment defined by the given instance of an ITDeliveryEnvironment subclass. 
     While this embodiment does not attempt to enumerate all possible delivery environments, an example ITDeliveryEnvironment subclass, called StandardizedITEnvironment is described. The key characteristic of the StandardizedITEnvironment is that it imposes product standards and restricts IT structures deployed and operated within it only to the allowable product set. So, the verifyConformance( ) method of StandardizedITEnvironment checks primitive composition of its argument target IT structure and indicates conformance only if every element of the primitive composition of the target IT structure belongs to the set of primitive IT structures permitted by the ITDeliveryEnvironment subclass. For example, the ITDeliveryEnvironment subclass may restrict a computer to be an IBM xSeries computer or an IBMzSeries computer. 
     Another embodiment for using the verifyConformance( ) method is a situation in which an IT structure is currently deployed in IT delivery environment A, but it is desired that this IT structure migrate to IT delivery environment B. Accordingly, this IT structure would be checked against the verifyConformance( ) method of delivery environment B to determine if this IT structure could be deployed in delivery environment B. 
       FIG. 18  is a flow chart depicting a modified addElement( ) method of StandardizedITEnvironment to perform delivery binding of the argument target IT structure to the instance of StandardizedITEnvironment, in accordance with embodiments of the present invention. The modified addElement( ) method effectuates IT delivery binding by invoking the general addElement( ) method of  FIG. 3  with an addition of elements required to delivery bind the IT structure to a given IT delivery environment. As a part of this process, the modified addElement( ) method of  FIG. 19  includes the general addElement( ) method  1902  of  FIG. 3 . If at least one element of the primitive composition of the delivery-bound IT structure requires access to the Internet, then the modified addElement( ) method assigns  1904  IP addresses to the elements of primitive composition of the target IT structure requiring IP addresses, these IP addresses being unique relative to the current primitive composition of the instance of StandardizedITEnvironment and adhering to the IP addressing policy of the instance of StandardizedITEnvironment. Similarly, the addElement( ) method assigns names  1906  to the elements of primitive composition of the target IT structure requiring names, and ensures uniqueness of these names relative to the current primitive composition of the instance of StandardizedITEnvironment and adherence of these names to the naming policies of the instance of StandardizedITEnvironment. If target IT structure requires access to the Internet through the firewall(s) provided by the instance of StandardizedITEnvironment, the firewall rules of the instance of StandardizedITEnvironment are updated  1908  to permit the appropriate communications. 
     2.8.1 Verifying Conformance of an ITStructure to an Exemplary Delivery Environment 
     The exemplary delivery environment is a data center and is aimed at providing the highly-available branded infrastructure for Internet-accessible IT applications. 
     The data center is a new, state-of-the-art facility. It is built on today&#39;s technology and practices a philosophy of being a security-focused operation. Activities and services are monitored by an experienced technical staff 24×7 from the Network Operations Center (NOC). The facilities include 3,000 square feet of raised floor, a network operations monitoring center, conference rooms, administrative space and coffee room. 
     The physical space of the data center has a secure co-location in a 3,000 square foot room with 18″ raised floor and is ADA (Americans with Disabilities Act)-compliant. The physical space includes 27″×39″×84″ cabinets with internal vertical cable management and vented front and back doors. All hardware must fit into cabinets. No space other than cabinets is provided. 
     The electrical power to the data center from NYSEG (New York State Electric and Gas Company) is delivered by dual redundant feeds. The electric service in the building is connected to a parallel redundant UPS. There is a backup 1000 KW diesel generator with 7-day fuel reserve. 
     Primary Internet access of the data center is via AT&amp;T Gigabit Ethernet over multi-mode fiber to their national fiber network node located in adjacent building. This network node has eight connections to the AT&amp;T network. Alternate Internet access is via 100 Mbps Ethernet over single-mode fiber connection to the Cable &amp; Wireless Network. 
     Security for the data center includes access control by Smart Card system issued by NOC personnel staffed 24×7×365 (24 hours, 7 days a week, 365 days a year). Data center floor access is controlled by access card and biometric scan. Visitors are granted access by duly authorized representatives of the data center clients. A biometric scan and surrender of the visitor&#39;s driver&#39;s license for a proxy card is required for visitors to gain access from the lobby to the administrative area. Another biometric scan and use of the access card is required to enter the raised floor area. 
     Conformance factors for the IT structure to the above IT delivery environment (i.e., data center) include:
         Electric power availability, reliability (and possibly voltage)   Ability to introduce devices out of the list of “supported” devices   Ability to use specific software, or requirement to run specific software (e.g., for monitoring or virus defense)   Availability of specific rack sizes/space   Ability to use geometrically non-standard devices   Compliance to physical network layer (jack types; switches/hubs; network speed)   Compliance to monitoring/admin access (e.g., there may be a requirement to have an extra network interface per physical box for admin access)   Possible conflict of application availability requirements to DE service window   Network bandwidth requirements   Internet availability requirements (dual-ISP, etc. . . . )   Architectural requirements with respect to network (layering, firewalls, IP addressing schema, network isolation requirements)   Network traffic requirements (e.g., “This IT Delivery Environment will allow only HTTP/HTTPS traffic from the Internet to your hosts”; “We do not allow outgoing traffic on port  25  directly, you must use one of our SMTP servers if you want to send email”)   Application type limitations (“We do not allow mass-mailing applications”)   Security level provided by IT Delivery Environment versus IT structure security requirements
 
2.9 IT Development Process
       

       FIG. 9  is a chart depicting the IT development process, in accordance with embodiments of the present invention. Translator  3009  (see Sec. 2.10;  FIG. 10 ) may be used in a translation process to translate an abstract IT structure  3006  into another abstract IT structure  3007  having a lower degree of abstraction than abstract IT structure  3006 . This translation process may be recursively repeated until the abstract IT structure  3006 / 3007  has been translated into a virtual IT structure  3008  or until the translation process aborts due to an unsuccessful translation attempt. Alternatively, a single translation of abstract IT structure  3006  by translator  3009  may produce the virtual IT structure  3008 . The virtual IT structure  3008  serves as input to the delivery binder  3012  (see Sec. 2.11; Sec. 2.2.2.5, addElement ( ) method,  FIG. 3 ), which translates the virtual IT structure into a delivery-bound IT structure  3013 , elements of which are then provisioned and deployed  3014  (see Sec. 2.12; deploy( ) method), resulting in a real IT structure  3015  operating in the appropriate IT delivery environment. 
     2.10 Translation 
     Translation is performed on an abstract IT structure instance with the intention of obtaining a virual IT structure, which can then be optimized and bound to one or more IT delivery environment to obtain one or more real IT structure.  FIGS. 10 and 11  collectively describe an IT translator (ITRAN) adapted to translate an abstract IT structure to the virtual IT structure. 
       FIG. 10  is a flow chart depicting the process of translation of IT structure instance X  3501 , in accordance with embodiments of the present invention. The process starts by initializing the return Vector  3508  to an empty Vector  3502 . If X is not abstract  3503 , no translation is necessary, and a null return Vector is returned to indicate that no action was performed (and no errors occurred). 
     The process then performs a series of iterations until either an error occurs or a virtual IT structure is obtained. The process invokes the translation iteration process  3504 , as described infra in relation to  FIG. 11 , to iteratively translate the abstract elements of X (i.e., the IT structures in the composition of X) until an instantiation of X following said iterative translation is virtual. If an error is indicated by the translation iteration (by returning error message(s))  3505 , any error messages returned by the translation iteration process are added to the return Vector  3506  and processing terminates. If translation iteration processing did not indicate an error  3505 , a check is performed to ascertain whether the translation iteration processing was successful  3507  (i.e., the translation iteration process returned a new instance of IT structure X), and if so, the new instance of IT structure X returned by the translation iteration process is made the first element of the return Vector  3508 , and the current instance of IT structure X is replaced with the new instance of IT structure X returned by the translation iteration process  3509 . The process then loops back to the check of whether the instance of IT structure X is still abstract  3503 . 
       FIG. 11  is a flow chart depicting the translation iteration process, which is performed for an IT structure instance X  3601 , in accordance with embodiments of the present invention. The process iterates through the abstract elements of X&#39;s composition to perform a translation of each abstract element of X, wherein the iterations end when a re-instantiation of X results in X being virtual (i.e., being in a virtual state). 
     The process starts by initializing the return Vector  3620  to an empty Vector  3602 . The process then invokes the process of specification for X  3603 , which may be a NOOP if X is fully specified, or, if X is not fully specified, will ensure full specification of characteristics of X. If an error occurs during the specification process for X  3604 , any error messages returned by the specification process are added to the return Vector  3605  and processing terminates. 
     The process then checks whether X is abstract  3606 , and if X is no longer abstract (i.e., X is now virtual), the process makes X the first element of the return Vector  3607  and returns. 
     If X is still abstract  3606 , the process invokes selection of subclasses for X  3608 . If an error occurs during subclass selection  3609 , any error messages returned by the subclass selection process are added to the return Vector  3605  and processing terminates. 
     If subclass selection did not indicate an error  3609 , the process checks whether X is still abstract  3610 , and if X is no longer abstract (i.e., X is now virtual), the process makes X the first element of the return Vector  3607  and returns. 
     If X is still abstract  3610 , the process checks whether X is primitive  3611 , and if so, the process places a translation error message in the return Vector  3607  and processing terminates. The reason for this is that subclass selection process for a primitive IT structure has searched all possible subclasses of X (including any existing virtual IT structures) and has not found one that would represent a satisfactory translation result for X—i.e., no possible virtual IT structure exists that would satisfy functional, operational, and other requirements and/or constraints imposed on X. 
     If X is complex  3611 , the process iterates through abstract elements of X&#39;s composition  3612 . Because X is still abstract, by definition of abstract IT entities, X&#39;s composition includes at least one abstract element. Each iteration through X&#39;s composition finds the next abstract element E of X&#39;s composition  3613  and recursively invokes the translation process for E  3614 . If an error occurs during translation of E  3615 , any error messages returned by the recursive invocation of the translation process are added to the return Vector  3605  and processing terminates. 
     If translation process is successful and returns a new instance of E  3615 , the new instance of E (denoted as E NEW ) is substituted for the current instance of E in the composition of X  3616 . The process of substitution (not shown, but an analogous process is shown in  FIG. 14 ) involves ensuring that any IT dependencies in X involving E are still satisfied, any IT relationships in X involving E are still valid and established, any characteristics of X (functional, operational, or other) are still supported, and X is still valid for any IT delivery environment for which it is targeted. 
     X (with E NEW  substituted therein) is then re-instantiated  3618  to form an interim IT structure instance. If an error occurs during re-instantiation of X  3619  (e.g., if the interim IT structure instance is not virtual), error messages are added to the return Vector  3605  and processing terminates. 
     X (now re-instantiated) is then made the first element of the return Vector  3620 . If X is no longer abstract  3621  (i.e., it is virtual), the return Vector (including X as its first element) is returned and processing terminates. If X is still abstract  3621 , processing iterates to finding the next abstract composition element of X  3612 . 
       FIG. 12  is a flow chart depicting the process of ensuring specification of characteristics of abstract IT structure instance X  3701 , in accordance with embodiments of the present invention. The process starts by initializing the return Vector  3707  to an empty Vector  3702 . The process then invokes the adjustment process for the X&#39;s function(s)  3703 . The adjustment process for a particular characteristic of an IT structure may be a NOOP if that characteristic is fully specified, or, otherwise, will ensure full specification of that characteristic. If an error occurs during the adjustment of X&#39;s function(s)  3704 , any returned error messages are added to the return Vector  3705  and processing terminates. 
     The process then checks whether X is still abstract  3706 . It is conceivable that as a result of invocation of setFunctions( ) method of X, X became virtual. If this is the case, X is made the first element of the return Vector  3707  and processing terminates. 
     If X is still abstract  3706 , the process invokes the adjustment process for the X&#39;s operational characteristics  3708 . If an error occurs during the adjustment of X&#39;s operational characteristics  3709 , any returned error messages are added to the return Vector  3705  and processing terminates. 
     The process then once again checks whether X is still abstract  3710 . It is conceivable that as a result of invocation of setOperationalCharacteristics( ) method of X, X became virtual. If this is the case, X is made the first element of the return Vector  3707  and processing terminates. 
     If X is still abstract  3710 , the process invokes the adjustment process for the X&#39;s resolution values  3711 . If an error occurs during the adjustment of X&#39;s resolution values  3712 , any returned error messages are added to the return Vector  3705  and processing terminates, otherwise, the process makes X the first element of the return Vector  3707  prior to completion. 
       FIG. 13  is a flow chart depicting the process of adjusting a particular set of characteristics of IT structure instance X  3801 , in accordance with embodiments of the present invention. The process starts by initializing the return Vector to an empty Vector  3802 . The process then builds a list D of unspecified characteristics of the requested type that have default values  3803 . If D is not empty  3804  (i.e., at least one unspecified characteristic of the requested type has a default value), the unspecified characteristics are set to their default value  3805  using the appropriate method (i.e., setFunctions( ) for functional characteristics, setOperationalCharacteristics( ) for operational characteristics, and resolve( ) for resolution values). If an error occurs during the appropriate method invocations  3806  (i.e., if the requested characteristics could not be set to their corresponding default values), any error messages are added to the return Vector  3807  and processing terminates. 
     If default setting for the unspecified characteristics of the requested type was successful  3806 , X is re-instantiated  3808 . If an error occurs during the attempt to re-instantiate X  3809  (i.e., there is an internal logic error in X-X has accepted the default settings for the unspecified characteristics of the requested type, but now cannot be instantiated using these settings), any error messages are added to the return Vector  3807  and processing terminates. 
     The process then builds a list U of unspecified characteristics of the requested type  3810  (i.e., those that remain unspecified after any defaults were set). If U is not empty  3811  (i.e., at least one characteristic of the requested type remains unspecified), the process prompts the user for specification of the unspecified characteristics of the requested type  3812  and sets the now specified characteristic values using the appropriate method  3813 . If an error occurs during the appropriate method invocations  3814  (i.e., if the requested characteristics could not be set to the values specified for them by the user), any error messages are added to the return Vector  3807  and processing terminates. 
     A number of possibilities exist as alternatives to addressing the user, comprising: 
     consulting an internal policy, possibly, associated with the target IT delivery environment(s), 
     generating a value for each unspecified characteristic of the requested type that would not violate internal logic of the class of IT structure X, 
     ignoring the fact that a particular characteristic is unspecified, 
     requiring the users to always provide a default value for all characteristics of IT structures. 
     If setting of the user-specified values for the unspecified characteristics of the requested type was successful  3814 , X is re-instantiated  3815 . If an error occurs during the attempt to re-instantiate X  3816  (i.e., there is an internal logic error in X-X has accepted the user settings for the unspecified characteristics of the requested type, but now cannot be instantiated using these settings), any error messages are added to the return Vector  3807  and processing terminates. 
     The process then checks whether X was re-instantiated during preceding steps  3817 , and if so, makes the new instance of X the first element of the return Vector  3818 , otherwise (no error has occurred, but X was not re-instantiated—this is a NOOP processing case), an empty (as originally created) return Vector is returned upon completion of the process. 
       FIG. 14  shows the process of selection a subclass of IT structure X, in accordance with embodiments of the present invention. The instances of IT structure X would support characteristics of the instance (abstract) of IT structure X, relationships imposed on the instance of IT structure X, dependencies of IT structure X, and be valid for the IT delivery environments to which the instance of IT structure X is targeted  3901 . The process starts by initializing the return Vector to an empty Vector  3902 . The process then finds all subclasses of the class C of X  3903  (i.e., those classes in the class library that inherit from C directly or indirectly (by inheriting from a class that inherits from C directly or indirectly)). If no subclasses of C are found  3904 , an error is indicated  3905  and processing terminates. The reason for indicating an error is that X is abstract, and therefore must have a way to be translated to a virtual IT structure instance. The translation process ensures that X is fully specified, and therefore, no other means of reducing abstraction than finding a less abstract class for X remain—and that just proved to be impossible. 
     If at least one subclass of C was found  3904 , the process iterates through the list of subclasses CL of C  3906 . An instance Y of subclass CL is created  3907 . If an error occurs when creating an instance of CL  3908 , CL is ignored (although an error message may be stored in the return Vector, as inability to create an instance of CL indicates an error in CL definition) and the next value of CL is taken. 
     If instance Y of class CL was created successfully  3908 , Y&#39;s IT dependencies are verified  3909 . If an error is detected by verification of Y&#39;s IT dependencies  3910 , CL is discarded and the next value of CL is taken. 
     The process then attempts to impose all characteristics of IT structure instance X on Y  3911 . If any characteristics of X could not be imposed on Y and an error occurred  3912 , CL is discarded and the next value of CL is taken. 
     If transfer of characteristics from X to Y was successful  3912 , any IT relationships of X are imposed on Y  3913 . If Y cannot support all of X&#39;s IT relationships  3914 , CL is discarded and the next value of CL is taken. 
     If transfer of IT relationships from X to Y was successful  3914 , Y is now verified against all IT delivery environments to which X is targeted  3915 . If an error is indicated  3916 , CL is discarded and the next value of CL is taken. 
     Now that Y supports the context of X, a check is performed to determine whether Y is abstract  3917 . It is conceivable that Y was virtual from the beginning, or that one or a combination of the actions performed for the transfer of X&#39;s context to Y caused Y to become virtual. The reason this check was not performed before this point is that until it is known that Y can support the context of X, Y&#39;s type is irrelevant. 
     If Y is virtual  3917 , it is added to the list of translation candidates D  3921 , and the next value of CL is taken. 
     If Y is abstract  3917 , a translation of Y is attempted  3918  (recursive invocation of the translation process). If an error occurs during translation of Y or if no error occurs but Y is not translated anyway (NOOP)  3919 , CL is discarded and the next value of CL is taken. 
     If Y was successfully translated  3919 , but the result of the translation is still an abstract IT structure  3920 , CL is discarded and the next value of CL is taken. 
     Discarding a subclass of C that does not translate into a virtual IT structure is not a necessity but a design choice. It would be equally valid to include the abstract IT structure Y in the list of candidates D in hopes of subsequent user intervention and manual modification of class source of the class CL of Y such that translation of Y to a virtual IT structure becomes possible. The design choice may be made for conciseness and minimization of complicated actions by the user. 
     If Y is now virtual  3920 , Y is added to the list of translation candidates D  3921  before the next CL value is taken, 
     Upon completion of iteration through the subclasses CL of C, if the list of translation candidates D is empty  3922  (i.e., no translation candidates were found), an error is indicated  3905  and processing terminates. 
     If the list of translation candidates D contains at least one translation candidate  3922 , the process of translation candidate selection is performed  3923 , resulting in selection of a single translation result Y from the list of translation candidates D, which is made the first element of the return Vector  3924  prior to completion of the process. 
       FIG. 15  is a flow chart depicting the process of selecting the best translation candidate Y from a list of translation candidates D (all virtual)  30001 , in accordance with embodiments of the present invention. The process starts by optimizing each element of D (using its optimizes method), and, if optimization is successful, replacing the element of D with the result of its optimization  30006 . If the list of candidates D has a single element  30002 , no further action is performed and the one element of D is returned. 
     If the list of translation candidates D has more than one element to choose from  30002 , the prioritized list of optimization classes (getOptimizationFunctions( ) method) is retrieved  30003 . The process then iterates through the list G of optimization classes  30004 , always taking the next (i.e., the highest priority) optimization class F from the list  30005 . The process then assesses each element of D using the optimization goal function A (method getOptimizationF( ) of class ITOptimizer) associated with the optimization class F  30007  and only keeps in D the elements for which A produces the best result  30008 , discarding all others. 
     If more than one element remains in D  30009  (i.e., optimization resulted in equally good result for multiple elements of D), the process iterates to the next assessment function. 
     If after the application of a sequence of assessment functions, D only has a single element  30009 , that element is returned as the one selected for translation from the list of candidates D. 
     If all assessment functions are exhausted before D is reduced to a single element  30004 , the list of elements in D is presented to the user and the user&#39;s choice acts as the tie-breaker  30010 —the user can select a single element from the list and the others will be discarded prior to the process completion. 
     Prompting the user for a tie-breaker decision is a design choice. Other designs are possible, including those in which other means of breaking the tie are employed (e.g., random choice), and those in which multiple elements of D are returned and, as a result, the user is presented with multiple equally valid translations. The reason for the choice of human intervention as the tie-breaker is the extremely low probability of having multiple applications of assessment functions to multiple different optimized IT structure instances produce identical results. 
     2.11 Binding 
     An IT structure instance X can be added to another IT structure Y by inclusion of X into the composition of Y by means of the addElement( ) method of Y. The process of addition of IT structure instance X to Y is called binding. 
     2.11.1 Deliver Binding 
     A virtual IT structure targeted to a particular IT delivery environment may be delivery-bound (i.e., translated into a delivery-bound virtual IT structure) by means of invoking the addElement( ) method of the target ITDeliveryEnvironment class instance. 
     2.12 Initiating Deployment of a Deliver-Bound IT Structure 
     Deployment of a delivery-bound IT structure is initiated by invoking the method deploy( ) of the particular ITDeliveryEnvironment class instance. 
     2.13 Fall-Back Policy 
     In several places above it has been noted that it is not always possible to transition from an abstract IT structure to, eventually, a real IT structure. A trivial cause of this may be unavailability of the appropriate materials in a provisioning system. More complex cases are possibly, in which, although materials are available, the right combination of them cannot be derived, or, worse, a wrong choice was made in a decision tree of one of the steps of translation to make delivery binding impossible. In many of these cases, returning to a previous step in the IT development process may resolve the problem. Therefore, a fall-back policy is implemented throughout the IT development process, such that, should a condition be reached preventing the production of a real IT structure as a result of a step of the IT development process, a return to the appropriate previous step of the IT development process is performed and a different decision is made, resulting hopefully in a positive outcome of the IT development process. 
     2.14 IT Agents 
     An IT agent is a program, installed on or embedded within OS of a computer, or embedded within microcode or hardware of a device, which gathers information about hardware configuration of a computer or a device, software installed on a computer, and network connectivity of a computer or a device, and transmits this information to a requester. 
     IT agents may transmit gathered information to a requester unsolicited or in response to a request. IT agents possess proper OS authorization and proper network connectivity to be able to transmit gathered information. 
     IT agents are a particular case of software agents in general, and therefore their implementation is OS- and possibly hardware-dependent. 
     External discovery functions other than agents may be used to obtain some or all of the required information. 
     Depending on the degree of sophistication of an IT agent, an IT agent may or may not be able to provide certain types of information—e.g., an IT agent may or may not contain logic permitting it to examine customization and configuration parameters of a particular program. For the purposes of this embodiment, it is assumed that an IT agent always possesses the degree of sophistication required to accomplish its task and furnish the information necessary to fulfill a particular function. If this is not the case, and some of the required information may not be provided by an IT agent, a manual completion step may be required in some of the methods described below, enabling the user to provide the missing information. 
     Depending on a security policy and network connectivity of a particular IT delivery environment, some IT agents may be unable to gain access to some of the information they intend to gather, or to transmit some of the gathered information. For the purposes of this embodiment, it is assumed that an IT agent always possesses the necessary authority to gather the information it needs and is capable of transmitting this information whenever such transmission is required. If this is not the case, and some of the required information may not be provided by an IT agent, a manual completion step may be required in some of the methods described below, enabling the user to provide the missing information. 
     IT agents are assumed to be present on all computers and smart devices comprising a real IT structure. 
     2.15 Reverse-Specifying an IT Structure 
     In order to accomplish some of the functions described below, it may be necessary to perform a process of delivery-binding “in reverse”, having an operational configuration as input, and deriving from it a real and a virtual IT structure. The process relies on the information gathered by IT agents and builds a real IT structure first, including all IT entities within an IT structure being examined. Once a real IT structure is built, a corresponding virtual IT structure is produced by discarding the information imposed on an IT structure by the delivery binding process associated with a particular IT delivery environment, and replacing real primitive IT structures in an IT structure composition with their respective virtual primitive counterparts. 
     While the reverse-specification process will recreate composition and IT relationships of an IT structure, it will not produce IT dependencies or any methods beyond those present in the real or virtual primitive IT structures and IT relationships used to comprise the reverse-specification. 
     The process of reverse-specification is illustrated in  FIG. 16 , in accordance with embodiments of the present invention. The process starts by creating a complex IT structure R, with empty composition  31501 . The process proceeds to establishing reverse-specification scope  31502 . This is necessary to bound the reverse-specification process to the necessary subset of the IT delivery environment. The scope of reverse specification is a list of IT entities (most likely, computers) indicated by a user. If the scope is not provided, all IT entities supplied with agents are considered within the scope—e.g., the whole IT delivery environment. While there are unprocessed entity collections in scope (an entity collection is a group of IT entities reachable by a single discovery agent—e.g., a computer with its full software stack)  31503 , consider the next unprocessed entity collection  31504 . Obtain the list of entities and relationships from the associated discovery agent  31505 , and add this list to the composition of IT structure R  31506 . When all the entity collections are processed  31503 , if composition of R is empty  31507 , en error is indicated  31508 . The resulting IT structure R is returned to the invoker  31509 . The resulting IT structure R may result from either reverse specifying an IT delivery environment or from reverse specifying an IT system instance. 
     2.16 Comparing IT Structures 
     In some cases, it may be advantageous to compare two IT structures. IT structure classes can be compared by comparing their source code using conventional means of program comparison (e.g., delta-compare utility). The process of comparing two IT structure instances is described infra. 
     The process of comparing IT structures assumes one of the two cases, based on the usage of results of a comparison (these are the practical cases when a comparison would be useful—the method of comparison is not restricted to these situations): 
     1) The IT structure instances being compared are an original and its reverse-specification—for deployment verification and detection of unauthorized modifications. 
     2) The IT structure instances being compared are instances of the same IT structure subclass—for testing of IT structure methods by the user. 
       FIG. 17  describes the process of comparing two IT structure instances. The process obtains as input two IT structure instances, termed “old” (X) and “new” (Y) A 1 . The process obtains primitive compositions (getPrimitiveComposition( )) of the old  1702  and the new  1703  IT structure instances. The process then obtains primitive relationships list (getPrirnitiveRelationships( )) of the old  1704  and the new IT  1705  structures. 
     The process then matches elements of the old and the new IT structure instances primitive compositions and determines any additions or deletions in (assumed) derivation of the new IT structure from the old  1706 , and reports any additions or deletions in the new IT structure relative to the old one  1707 . 
     The process then performs a similar matching for IT relationships of the old and the new IT structure instances  1708  and reports any differences  1709 . 
     The process then produces a report (textual and/or graphical), showing any differences, and marking them as additions or deletions. 
     3. IT Structure Visualization 
     Visualization of IT structures supports usability for IT development tools. At different times during a development of an IT structure, an IT developer may desire to view different configurations relating to an IT structure such as, inter alia,: a network topology configuration; a systems management configuration; a configuration of IT dependencies among IT structure composition elements; and a configuration of IT Relationships among IT structure composition elements. 
     3.1 Invocation of Fundamental IT Structure Methods 
     To visually represent various configurations relating to an IT structure X, method getPrimitiveComposition( ) for X may be invoked. This invocation of getPrimitiveComposition( ) returns the list of primitive IT structures comprising IT structure X. Depending on what information is being visualized, various additional methods operating on X may be invoked, including: getPrimitiveRelationships( ) for visualization of networks (e.g., communications networks) or other types of IT relationships; and getPrimitiveDependencies( ) for visualization of IT dependencies. For visualizing IT dependencies, the present invention may exploit the fact that the ITStructure class is enhanced with method getPrimitiveDependencies( ) which returns a list of IT dependencies among elements of IT structure primitive composition. Thus, to display network topology, the set of IT relationships returned by the getPrimitiveRelationships( ) method may be a specific subset of the set of IT relationships that includes IT relationships of the subclass “communicates with”. This specific subset represents network paths among primitive IT structures returned by getPrimitiveComposition( ). Other subsets of IT relationships may be used for various other displays; e.g., “is managed” and “managed by” can be used to generate a visual representation of an IT structure that includes management structure as shown in  FIG. 29  described infra. 
     3.2 Visualization of Networks 
     IT structures may involve complex networks. An IT developer may review and analyze various aspects of networking involved in the composition of an IT structure. The present invention discloses infra methodology for displaying multiple overlayed and interconnected networks on a screen in a fashion that enables the IT developer to easily comprehend the network. 
       FIG. 21A  depicts a display of a network comprising devices, network segments, and vertical connectors, in accordance with embodiments of the present invention. The devices are hardware devices and/or software devices and are represented by rectangular icons and may comprise, inter alia, computers, routers, firewalls, software packages or modules, etc. 
     The network segments may represent a hub or VLANS (virual LANs) implemented in network switches (which could be present as entities within the IT class hierarchy). The network segments may also represent a token ring MAU (media-access unit) or Ethernet 10B2 coaxial cable in a network topology configuration. The network segments are represented in  FIG. 21A  by horizontal lines, wherein a network segment may comprise subsegments and nodes. For example, network segment  4000  comprises subsegments  4005  and  4006  and nodes  4001 - 4003 . 
     The vertical connectors are vertical lines that represent physical connectors or circuitry that electrically connects devices to network segments. For example, the vertical connector  4012  is coupled to the device  4010  at IP address 192.168.72 and connects the device  4012  to network segment  4000  at node  4001 . The vertical connectors may represent cables connecting devices engaged in communication IT relationships to aforementioned hubs or VLANS. Another way to define a subclass of ITRelationship class—physicallyConnected—would indicate a connection via Ethernet cable or radio. 
     Devices are electrically and/or logically coupled to each other by paths which are combinations of network segments and/or vertical connectors. The devices names and IP addresses may be generated as a result of delivery binding. 
     3.2.1 Displaying Network Diagrams 
     The display method of the present invention places related components close to one another to utilize space efficiently and reduce or minimize the length of connections as well as the number of intersections and interleaves among connections and devices. A “connection” is a network segment, a vertical connector, or a combination thereof. The method of the present invention is performed by executing a goal function method in which goal values are computed. The goal function method assigns weights to the network segments, the vertical connectors, and overlays of devices and network segments. The goal function method also limits or precludes overlay of devices and network segments. An “overlay of devices” overlays (and thus obscures) a first device on the screen by a second device. The goal function method will be described in detail infra in conjunction with  FIG. 24   
       FIG. 21B  depicts relationships between the network display of  FIG. 21A  and a two-dimensional matrix representing the screen layout, in accordance with embodiments of the present invention. Thus,  FIG. 21B  depicts an overlay pattern of the network segments and the vertical connectors overlayed on the matrix in accordance with the distribution of the devices in the cells of the matrix and in accordance with the description of the configuration of devices, network segments, and vertical connectors provided in step  4200  of  FIG. 22  as described infra. 
     In  FIG. 21B , the positive directions associated with the mutually perpendicular X and Y coordinate axes are defined to be the horizontal and vertical directions, respectively. An initial phase of the display method calculates the size of a two-dimensional matrix to be used for representing the screen layout. Each cell of the matrix contains one device or is empty; and each cell may contain no more than one device. Each displayed device is placed in a unique cell of this matrix. The initial size of the matrix may be determined as follows. The initial height (NY) of the matrix in the vertical direction may be a function of the number of network segments in the IT structure. The initial width (NX) of the matrix in the horizontal direction may be a function of the number of devices on a network segment of the IT structure having the highest number of devices attached thereto as compared with all other network segments of the IT structure. The number of cells (N) in the matrix is the product of NX and NY. 
     Initially, devices may be distributed approximately uniformly in the matrix cells so as to initially form a set of filled matrix cells without regard as to which device fills (i.e., placed in) each such filled matrix cell. The method then performs multiple iterations, each iteration trying to minimize the goal value for the prevailing IT structure. Each iteration considers all possible pairs of matrix cells (such that at least one cell in the pair is non-empty) and swaps the matrix cells of a pair if a swap would reduce the goal value. Pairs of cells, representing devices with identical sets of network segments to which they are connected, may be ignored. The method may terminate when an iteration has not resulted in reduction of the goal value, when the iteration has not reduced the goal value by more than a predetermined tolerance (e.g., absolute tolerance, percent, etc.) relative to the goal value at the end of the immediately preceding iteration, when the goal value does not exceed a predetermined upper limiting goal value, when a maximum predetermined number of iterations has elapsed, etc. 
     In one embodiment, the display method does not use location of network segments in its decisions, such that the method does not male a decision that depends on where any of the network segments is located. Placement of a network segment may be determined as a function of location of devices connected to the network segment. Network segment placement determination may be performed within the goal function method. However, on every invocation of the goal function method as a side-effect of execution of the goal function method, locations of network segments may be calculated and stored, so that the network segments can be used for post-iteration processing such as for being rendered on the screen. 
       FIGS. 22-24  describe the display method in detail, in accordance with embodiments of the present invention. 
       FIGS. 22A and 22B  (collectively “FIG.  22 ”) is a flow chart describing matrix generation and matrix cell swapping, in accordance with embodiments of the present invention.  FIG. 22  comprises steps  4200 - 4219 . 
     Step  4200  provides a description of a configuration of devices, network segments, and vertical connectors relating to at least one IT structure. The description describes how the devices, the network segments, and the vertical connectors are mutually coupled. The configuration may be, inter alia, a network topology configuration, a configuration of IT relationships among IT structure composition elements, or a configuration of IT dependencies among IT structure composition elements. 
     In step  4201 , the matrix height (i.e., in the vertical direction and denoted as matrix_height or NY) may be calculated as a function of the number of network segments in the IT structure. In one embodiment, this function relating to step  4201  returns double the number of network segments in the IT structure. Thus the rows may be indexed from 0 to (NY−1). 
     In step  4202 , the matrix width (i.e., in the horizontal direction and denoted as matrix_width or NX) is calculated as a function of the number of devices on a network segment having the highest number of devices attached thereto as compared with all other network segments of the IT structure. 
     In one embodiment (noting that the devices can be connected to network segments by vertical connectors both from both above and below), this function relating to step  4202  returns three quarters of the number of devices on the network segment with the highest number of devices in the IT structure, rounded up to the nearest integer. Thus the rows may be indexed from 0 to (NX−1). 
     Step  4203  generates the matrix using the dimensions NX and NY determined in steps  4201 - 4202 , 
     Step  4204  initially distributes the devices in the cells of the matrix using the dimensions NX and NY previously calculated in steps  4201 - 4202 . Thus, the devices are initially distributed to form an initial distribution of the devices in the cells of the matrix. The devices in the IT structure may be initially distributed approximately uniformly and in no particular order (e.g., randomly with respect to the devices) among cells of the matrix. In an embodiment, the number of iterations is limited by a predetermined value (MaxIter), and therefore the iteration counter (Iter) is initialized to zero in step  4205 . In another embodiment, the maximum number of iterations may be unspecified and the number of iterations may be limited by the approximation to the goal value as described supra (e.g., maximum value of goal value, change in goal value between successive iterations, etc.) In yet another embodiment, the number of iterations may be limited by both the number of iterations and the approximation to the goal value, whichever is achieved sooner. Each iteration comprises execution of steps  4206 - 4219 . 
     Each cell of the matrix contains content, said content being a device of the network or a null content. A null content is defined as an absence of a device. A cell is said to be empty if the cell contains a null content. A cell is said to be non-empty if the cell contains a device. Thus, swapping two cells of the matrix mean swapping the content of the two cells. Consider two cells of matrix denoted as cell A and cell B. As a first example in which cell A initially contains device X and cell B initially contains device Y, swapping cells A and B means transferring device X from cell A to cell B and transferring device Y from cell B to cell A. As a second example in which cell A initially contains device X and cell B initially contains a null content, swapping cells A and B means transferring device X from cell A to cell B and transferring the null content from cell B to cell A (i.e., making cell A empty). As a third example in which cells A and B each initially contain null content, swapping cells A and B cannot change the content of cells A and B from their initially null content. 
     In step  4206 , the goal value is computed as described infra in conjunction with  FIG. 24 . Steps  4207  and  4208  respectively initialize internal loop counters i and j to zero. Even though the matrix is two-dimensional, its cells can be examined linearly, without consideration to their position in the two-dimensional matrix. The cells are enumerated, starting from 0 and ending with matrix_size−1 (or N−1), wherein matrix_size is equal to the product of matrix_width and matrix_height (i.e., N=NX*NY). Counters i and j represent cells i and j, respectively, within this linear enumeration. 
     In  FIG. 22 , steps  4209 - 4215  form a first loop over cell i and steps  4206 - 4217  form a second loop over cell j, wherein the first loop is an inner loop relative to the second loop. Thus cells i and j are processed in (i,j) pairs according to the first and second loops of  FIG. 22  in a sequential order described by the notation ((j=0, 1, . . . , N−1), i=0, 1, . . . , N−1) subject to i unequal to j. 
     Step  4209  decides whether the cells i and j should be considered for swapping (i.e., for being swapped), using a criteria such as: at least one cell of cells i and j is non-empty (i.e., said one cell contains a device therein) and cells i and j contain devices that do not have identical sets of network segments to which the devices in cells i and j connect. If the cells i and j should not be considered for swapping, then the process iterates to the next value of j in step  4214 . Otherwise, step  4410  is next executed. 
     If the cells i and j should be considered for swapping in step  4209 , the contents of cells i and j are swapped in step  4210 , and a new goal value is computed in step  4211  in accordance with the algorithm described in  FIG. 24 . In step  4212 , the new goal value is compared to the previous goal value. If the new goal value is not less than the previous goal value (i.e., goal value has not decreased), cells j and j are swapped in step  4213  to effectively reverse the swapping previously performed in step  4210 . 
     Step  4214  increments j by 1 to its next value. Step  4215  determines whether j is less than matrix_size. If j is less than matrix_size then the process loops to step  4209 ; otherwise, step  4216  is next executed which increments i by 1 to its next value Step  4217  determines whether i is less than matrix_size. If j is less than matrix_size then the process loops to step  4208 ; otherwise, step  4218  is next executed which increments Iter to its next value. 
     Step  4219  determines whether Iter is less than MaxIter. If Iter is less than MaxIter, then the process loops to step  4206  to execute the next iteration comprising steps  4206 - 4219 . The next iteration will initially compute a lower goal value in step  4206  than was computed in the immediately preceding iteration, since each swapping of cells in step  4211  that is not offset by the inverse swapping of step  4213  lowers the computed goal value. Each iteration is characterized by a first distribution of devices in the cells of the matrix at the beginning of each iteration, wherein the first distribution of the first iteration is the initial distribution determined in step  4204 , and wherein the first distribution of each iteration after the first iteration is the distribution of devices in the cells of the matrix at the end of the immediately preceding iteration. Therefore each iteration has an improved first distribution of devices in the cells of the matrix as compared with the first distribution of devices in the cells of the matrix for the immediately preceding iteration. Accordingly, each iteration has a potential for lowering the goal value relative to the lowest goal value computed in the immediately preceding iteration. If Iter is not less than MaxIter in step  4219 , then the distribution of the devices in the cells of the matrix is a final distribution of said devices, and the process continues with execution of the algorithm depicted in the flow chart of  FIG. 23 , described infra. As stated supra, the use of MaxIter is only one of several alternatives for determining when to stop iterating. The goal value relating to the final distribution of devices is lower than the goal value relating to the initial distribution of devices. 
       FIG. 23  is a flow chart describing rearrangement of network segments, in accordance with embodiments of the present invention. The rearrangement of network segments contributes to formation of an overlay pattern of the network segments and the vertical connectors overlayed on the matrix in accordance with the final distribution of the devices in the cells of the matrix and in accordance with the description of the configuration provided in step  4200  of  FIG. 22 . As a side effect of execution of the goal function method, a list of network segments and their placement are determined.  FIG. 23  verifies this list of network segments and their placement to eliminate any conflicts, i.e., to ensure that network segments drawn on a single horizontal row on a screen will not intersect.  FIG. 23  includes steps  4301 - 4312 . The method of  FIG. 23  iterates through the list of network segments using counters i and j to represent the network segments. 
     Step  4301  initializes i to 0, and step  4302  sets j to i+1. In  FIG. 23 , steps  4303 - 4309  form a first loop over network segment i and steps  4302 - 4311  form a second loop over network segment j, wherein the first loop is an inner loop relative to the second loop. Thus i and j are processed in (i, j) pairs according to the first and second loops of  FIG. 23  in a sequential order described by the notation ((j=i+1, i+2, . . . , S), i=0, 1, . . . , S−1), wherein S is the total number of network segments. 
     Step  4303  determines whether network segments i and j have the same vertical position. If network segments i and j do not have the same vertical position, then the method next executes step  4308  which increments j by 1 to j+1. If network segments i and j have the same vertical position in step  4303 , then step  4304  is next executed. 
     Steps  4304 - 4305  collectively determine whether network segments i and j overlap horizontally. In particular, step  4304  determines whether the rightmost end of network segment i is to the right of the leftmost end of network segment j, and step  4305  determines whether the rightmost end of network segment j is to the right of the leftmost end of network segment i. If steps  4304 - 4305  collectively determine that network segments i and j do not overlap horizontally, then the method next executes step  4308  which increments j by 1 to j+1. 
     If steps  4304 - 4305  collectively determine that network segments i and j overlap horizontally, then the method next executes steps  4306 - 4307  which are illustrated in  FIGS. 27 and 28  in accordance with embodiments of the present invention. In  FIG. 27 , network segments i and j, respectively represented by network segments 192.168.6.X and 192.168.2.X, overlap horizontally. In step  4306 , the method comprises moving down one row all network segments and all devices whose vertical coordinate is greater than the vertical coordinate of network segment i (i.e., network segment 192.168.6.X), resulting in the vertically downward movement of network segment 192.168.3.X, the device disposed between vertical connectors 192.168.4.1 and 192.168.3.1, the device disposed between vertical connectors 192.168.2.2 and 192.168.3.2, and the device disposed between vertical connectors 192.168.2.3 and 192.168.3.3). In step  4307 , the method comprises moving down one row the network segment j (i.e., network segment 192.168.2.X), resulting in the vertically downward movement of network segment 192.168.2.X) and all devices connected to network segment j whose vertical coordinate is greater than the vertical coordinate of network segment j and that were not moved in step  4306 . Note that there are no such devices in  FIG. 27  to be moved in step  4307 .  FIGS. 27 and 28  represent the rendered network diagram before and after, respectively, the moves of network segments mandated by steps  4306 - 4307 , where network segments i and j are the two network segments superimposed on the network diagram in row 3 of  FIG. 27 , and are no longer superimposed in  FIG. 28 . 
     In step  4308 , j is incremented by 1. Step  4309  determines whether j is less than the number of network segments. If j is less than the number of network segments, then the method loops back to step  4303 . If j is not less than the number of network segments, then step  4310  is next executed. Step  4310  increments i by 1. 
     Step  4311  determines whether i is less than the number of network segments minus 1. If i is less than the number of network segments minus 1, then the method loops back to step  4302 . If j is not less than the number of network segments minus 1, then in step  4312  the final distribution of device with the overlay pattern of the network segments and vertical connectors are displayed on the display screen and the method of  FIG. 23  ends. 
       FIG. 24  is a flow chart of steps  4401 - 4412  for describing the goal function method for computing a goal value called “Goal”, in accordance with embodiments of the present invention. Counters i and j represent network segments i and devices j, respectively. Step  4401  initializes Goal to zero. Step  4402  initializes i to zero. Step  4403  computes and stores the horizontal position of network segment i, as described by the horizontal matrix coordinates of the leftmost and the rightmost devices connected to the network segment i. 
     Step  4404  increments Goal by the product of a weight (denoted as h_weight) and the width of network segment i (i.e., the difference of the horizontal matrix coordinates of the rightmost and leftmost devices attached the i-th network segment). Step  4405  sets j equal to zero. Step  4406  increments Goal by the product of: a weight (denoted as v_weight) and the length of the vertical connector between the i-th network segment&#39;s j-th device and the i-th network segment. 
     If the vertical connector between the i-th network segment j-th device and the i-th network segment crosses any device, Goal is incremented by a penalty value in step  4407 . Since such device crossings impair the quality of the visual representation of the network on the screen, it may be desirable in some embodiments to assign a penalty value that exceeds the weights of network segments and vertical connectors (e.g., by one or two orders of magnitude). 
     Step  4408  increments counter j by 1. Step  4409  determines if j is less than the number of devices of the i-th network segment. If j is less than the number of devices of the i-th network segment, then the process loops back to step  4406 . If j is not less than the number of devices of the i-th network segment, then step  4410  is next executed. 
     Step  4410  increments i by 1. Step  4411  determines if i is less than the number of network segments. If i is less than the number of network segments, then the process loops back to step  4403 . If i is not less than the number of network segments, then step  4412  returns the value of Goal to the invoker (e.g., step  4206  or  4211  of  FIG. 22 ). 
       FIGS. 25-26  illustrate how the swapping of two non-empty cells of the matrix can affect the goal value, in accordance with embodiments of the present invention. Denoting C 23  and C 44  as the cells in (row 2, column 3) and (row 4, column 4), respectively, the device “elearningODS” in cell C 23  and the device “emailODS-email_server” in cell C 24  in  FIG. 25  are shown as having been swapped in  FIG. 26 . This swapping increases the goal value for this example. Although the length of the Network Segment 192.168.3.X has decreased somewhat, said decrease was more than offset by increasing the length of the Vertical Connectors 192.168.3.1, 192.168.7.1 and 192.168.6.2. Moreover, the goal function method now introduced a penalty for Vertical Connector 192.168.7.1 crossing the Device in row 2, column 4. 
     The relative values of weights of network segments, vertical connectors and penalties may influence the layout and visual clarity of the rendered network diagram that the algorithm builds. These weights and penalties can be determined experimentally, by assuming initially equal weights for network segments and vertical connectors, and taking the penalty value approximately equal to a multiplier (e.g., 50) on the average value of the weights for the network segments and vertical connectors. Trying different network configurations to vary the balance between h_weight (see step  4404  of  FIG. 24 ) and v_weight (see step  4406  of  FIG. 24 ) provides an empirical technique for determining values of these weights and penalties that result in a desirable visual image on the display screen. 
     The weight of each network segment may be a same network segment weight for each network segment, and the weight of each vertical connector may be a same vertical connector weight for each vertical connector. Alternatively, the network segment weight, the vertical connector weight, and the penalty may each independently be described by a plurality of values. For example, some network segments may be weighted differently from other network segments, some vertical connectors may be weighted differently that other vertical connectors, and some penalties may be weighted differently than other penalties. To illustrate, some device connections may be more important to the user for visualization purposes than other device connections and the user may accordingly desire a higher quality visual representation in relation to the more important device connections than in relation to the less important device connections, thereby resulting in multiple weights for at least one connector parameter (i.e., network segment weight, vertical connector weight, penalty). Moreover, the weights and penalties may have predetermined numerical values or may be dynamically computed in accordance with an algorithm. 
     In  FIG. 24 , the goal value is computed as a linear combination of: a product of the length and weight of each network segment, a product the length and weight of each vertical connector, and the penalty. Generally, the goal value is computed as a function of a length and weight of each network segment, a length and weight of each vertical connector, and a penalty for each crossing of a device by a network segment. The functional dependence of the goal value on any of the relevant parameters (i.e., network segment weight, vertical connector weight, and penalty) may be linear or nonlinear. For example, the goal value may depend nonlinearly on the length of at least one network segment, the length of at least one vertical connector, the penalty, and combinations thereof. 
     Moreover, the computation of the goal value may comprise computing values of cross-coupling terms involving said parameters (e.g., the product of network segment weight and the square root of the vertical connector weight). In other words, the scope of the present invention includes any functional dependence of the goal value that results in an acceptable display image of a configuration relating to an IT structure. 
     3.3 Visualization of IT Dependencies, IT Relationships, and Systems Management 
       FIG. 29  illustrates a display for visualizing IT relationship, in accordance with embodiments of the present invention. In  FIG. 29 , four computers are present: eLeamingODS-AppServer — 1, eLearningODS-AppServer — 2, eLearningODS-DBServer, and managementServer. Each of the computers communicates with the other computers, as reflected by the bidirectional IT relationship representation “communicates with”. 
     Computers have various types of programs installed on them. For example, OS AIX 4.3.2 is installed on eLearningODS-DBServer, and DB DB2 UDB v7.0.1 is installed on OS AIX 4.3.2. 
     Both instances of Application eLearning_ap 1.7.2 invoke DB DB2 UDB v7.0.1 (and thus, DB DB2 UDB v7.0.1 is invoked by both instances of eLearning_ap 1.7.2), as shown by the asymmetric IT relationship representation “Invokes”. 
     Tivoli_Monitoring program is managing the two application and one DB servers (and thus, the two application and one DB servers are managed by Tivoli_Monitoring program), as shown by the asymmetric IT relationship representation “Manages”. 
     The computers eLearningODS-AppServer_ 1  and eLearningODS-DBServer are mutually coupled to each other through the asymmetric IT relationship “Communicates with”. 
     In one embodiment, multiple relationships genres are shown as combined in a single display, (e.g.,  FIG. 29 ). In particular,  FIG. 29  includes a management genre, a communications genre, and an invocation genre. In another embodiment, the user can select the relationship genres desired for display. For example, the user may select relationships of a single genre for display such as only management relationships, wherein only the management relationship diagram will be displayed. Similarly, the user may select only invocation relationships, wherein only the invocation diagram of programs will be displayed. 
     The display algorithms described in the flow charts of  FIGS. 22-24  are applicable to generating a display of IT relationships as follows, using  FIG. 29  for illustrative purposes in comparison with  FIG. 21A . The rectangles of  FIG. 29  (e.g., rectangle  4510 ) simulate the devices of  FIG. 21A . The horizontal lines of  FIG. 29  (e.g., horizontal line  4511 ) simulate the network segments of  FIG. 21A . The vertical lines of  FIG. 29  (e.g., vertical line  4512 ) simulate the vertical connectors of  FIG. 21A . 
     Generally, the present invention discloses a method for generating a display of a configuration of IT relationships among IT structure composition elements such that each displayed device (i.e., displayed rectangle) represents an IT structure composition element. The displayed horizontal segments and vertical connectors form paths such that each path link a first device with a second device and represents an IT relationship between the first device and the second device. Each path has two ends and either end or both ends of the path may have a terminating arrow to denote the asymmetry or symmetry of the relationship. A path is unidirectional if one end, and only one end, of the path has a terminating arrow denoting an asymmetric relationship (e.g., eLearningODS-DBServer “manages” Tivoli_Monitoring). A path is bidirectional if both ends of the path has a terminating arrow denoting a symmetric relationship (e.g., eLearningODS-AppServer_ 1  “Communicates with” eLearningODS-DBServer, and vice versa). The display algorithm will display the terminating arrows. 
       FIG. 30  illustrates a display for visualizing IT dependencies, in accordance with embodiments of the present invention. in  FIG. 30 , an arrow represents an IT dependency. Thus, Application eLearning_ap 1.7.2 requires presence of DB; more specifically, DB2; more specifically, UDBv7. Similarly, eLearning_ap 1.7.2 requires presence of Middleware; more specifically, ApplicationServer; more specifically, WAS (WebSphere Application Server); more specifically, WASv2. Similarly, DBv7 requires presence of an OS; more specifically, AIX; more specifically, AIXv4. Similarly, WASv2 requires presence of an OS; more specifically, AIX; more specifically, AIXv4. Similarly, AIXv4 requires presence of a Computer; more specifically, RS/6000. 
     The display algorithms described in the flow charts of  FIGS. 22-24  are applicable to generating a display of IT dependencies as follows, using  FIG. 30  for illustrative purposes in comparison with  FIG. 21A . The rectangles of  FIG. 30  (e.g., rectangle  4520 ) simulate the devices of  FIG. 21A  and more generally represent IT structure composition elements. The horizontal lines of  FIG. 30  (e.g., horizontal line  4521 ) simulate the network segments of  FIG. 21A . The vertical lines of  FIG. 30  (e.g., vertical line  4522 ) simulate the vertical connectors of  FIG. 21A . 
     Generally, the present invention discloses a method for generating a display of a configuration of IT dependencies among IT structure composition elements such that each displayed device represent an IT structure composition element (e.g., a hardware element, a software element, a labor or service entity, etc). The displayed horizontal segments and vertical connectors form paths such that each path links a first device with a second device and represents an IT dependency between the first device and the second device. Each path has two ends and either end or both ends of the path may have a terminating arrow to denote the asymmetry or symmetry of the dependency. A path is unidirectional if one end, and only one end, of the path has a terminating arrow denoting an asymmetric dependence (e.g., Application eLearning_ap 1.7.2 requires presence of DB). A path is bidirectional if both ends of the path has a terminating arrow denoting a symmetric dependence. All dependencies shown in  FIG. 30  are asymmetric. The display algorithm will display the terminating arrows. 
     4. Generation of IT Structure Configuration Elements 
     An IT generator comprises software that generates a deliverable (i.e., an end result of a development activity) from knowledge of IT structures and/or other aspects of an IT development model. There are two types of generators: basic generators, which generate output in relation to any IT structure (e.g., a generator of a cross-reference listing); and extended generators, which generate output in relation to specific types of IT structures. 
     This section discloses extended generators for: firewall rule set generation; load balancing script generation, and generation of wrappers for non-compliant applications. 
     4.1 Firewall Rule Generation 
     Using a formal specification of an IT structure makes it possible to automatically generate firewall rules, thereby making firewall rule generation a more efficient process than a manual firewall rule generation process. Moreover, automatic firewall rule generation is less subject to human error and more readily accommodates dynamic changes in IT structures than is manual firewall rule generation. In addition, manual firewall rule generation may not able to effectively solve the firewall rule generation problem, such as: when several applications and/or several boxes share the same firewall; when the security-related infrastructure includes several objects (e.g., firewall, programmable switches); etc. 
     Automatic firewall rule generation facilitates proper definition of firewall objects and groups which increases the firewall efficiency (i.e. throughput). For example, for a subset of firewall-protected objects sharing the same network protocol, a single set of rules describing the same protocol is more efficient than specifying the protocol-related rules separately for each of the machines. 
     4.1.1 Use of IT Structures For Deriving Input For Firewall Rules 
     The IP address for a real IT structure is a real IP address. The IP address for any other IT structure is a unique integer which adheres to the IP address structure rules, but does not necessarily represent a valid IP address within a context of any particular delivery environment; i.e., any placeholder IP addresses are replaced with real IP addresses as a part of delivery binding. 
     Thus, to obtain information about network topology of an IT structure and required communications, one may use the method getPrimitiveRelationships( ) for an IT structure and examine all the ConnectsTo ITInterfaces referenced by all the CommunicationITRelationship classes obtained from the getPrimitiveRelationships( ) method. 
     4.1.2 Firewall Rule Generation Algorithm 
     The following assumptions are made in conjunction with the embodiments described herein with the understanding that a person skilled in the art should have no difficulty relaxing these assumptions as indicated infra for each assumption: 
     1) one network interface per computer (the scope of the invention generally includes multiple network interfaces per computer); 
     2) valid transports are Transmission Control Protocol (TCP) or User Datagram Protocol (UDP) (the scope of the invention generally includes any other applicable transport layer protocols that become standard or significantly utilized in the future); 
     3) UDP communications are symmetrical (the scope of the invention generally includes both symmetric and asymmetric UDP communications), wherein symmetric UDP communications allow bidirectional communication between two computers, and wherein asymmetric UDP communications allow only unidirectional communication between two computers; and 
     4) each software component can be a TCP server or a UDP server or both. 
     5) TCP or UDP clients are separated from corresponding servers by no more than one firewall (the scope of the invention generally includes multiple firewalls on a path between clients and servers). 
     A firewall rule includes “source”, “destination”, “protocol”, and “action” values, where “action” is “deny” or “allow”, “source” and “destination” are each a triplet of (IP address, netmask, IP transport port), and “protocol” is “TCP” or “UDP”. The communications are assumed to be initiated from the source and directed at the destination. When a firewall is configured, the embodiments described herein utilize the default firewall rule is that nothing is allowed (default action is “deny”), and any permitted communications are permitted as a result of added explicit firewall rules with action “allow”. However, the scope of the present invention also includes embodiments in which the default firewall rule is that the data transmission is allowed (default action is “allow”), and any forbidden communications are forbidden as a result of added explicit firewall rules with action “deny”. 
     The firewall rule denies or allows data transmission from the IP transport port of the “source” to the IP transport port of the “destination”. 
       FIGS. 31A-31C  (collectively,  FIG. 31 ) is a flow chart comprising steps  5001 - 5041  which describe firewall rule generation and assignment of the generated firewall rules to firewalls, in accordance with embodiments of the present invention.  FIGS. 31A-31B  comprise steps  5001 - 5026  (firewall rule generation), whereas  FIG. 31C  comprises steps  5027 - 5041  (assignment of generated firewall rules) 
     The counters k, i, j, m, and n in  FIGS. 31A-31B  are used as follows. Counter k indexes the firewall rules. Counter i indexes the computers within an IT structure primitive composition. Counter j indexes the software components installed on a given computer. Counter m indexes TCP ports and UDP ports on which a software component is listening. Counter n indexes clients of a given software component. A “client” is a program or a computer. Counter r indexes firewalls. Counter s indexes network interfaces of a given firewall. 
     Step  5001  initializes counter k (corresponding to firewall rule k) to zero. The method iterates through all the computers i in the given IT structure primitive composition, using the loop over counter i comprising steps  5003 - 5026 . Method getPrimitiveComposition( ) is used to obtain the list of entities comprising the IT structure. The list of computers is obtained as a subset of the entities comprising the IT structure, returned by the getPrimitiveComposition( ) method. 
     Counter i is initialized to zero in step  5002 . 
     For each computer i, the method iterates through the software components j installed on the computer i, using the loop over j comprising steps  5004 - 5024 . Method getPrimitiveComposition( ) is used to obtain the list of entities comprising an IT structure. Method getPrimitiveRelationships( ) is used to obtain the list of relationships among the primitive composition of the IT structure. The list of software components installed on a computer is obtained by generating the list of computers and the list of software components as subsets of the IT structure primitive composition. Then, the list of IT relationship is subset to istallation IT relationships, and these are used to correlate software components with computers on which software components are installed. 
     Counter j is initialized to zero in step  5003 . 
     In steps  5004  to  5012 , firewall rules for TCP servers are generated for computer i, and in steps  5013  to  5020 , firewall rules for UDP servers are generated for computer i. 
     The first step  5004  of steps  5004 - 5012  for generating firewall rules for TCP servers ascertains whether the j-th software component installed on i-th computer is a TCP server as follows. 
     If the j-th software component installed on i-th computer is not a TCP server, then the method branches to step  5013  so as to bypass TCP port processing. 
     If the j-th software component installed on i-th computer is a TCP server, then step  5005  initializes the TCP port counter m to zero, and the method iterates through all TCP ports m on which the software component j is listening in steps  5006 - 5012 . Step  5006  initializes client counter n to zero. 
     Step  5007  ascertains whether the computer&#39;s IP address (IPAddr1) and the n-th TCP client&#39;s IP address (IPAddr2) belong to the same subnet. A “subnet” is defined by the IP protocol definition as “network segment in which any two communicating entities can communicate directly (in one hop)”. Step  5007  is implemented by ascertaining whether the expression (IPAddr1 AND. NetMask1) .XOR. (IPAddr2 AND. NetMask2) is equal to 0. “NetMask” is defined by the IP protocol as “a four-byte number (represented in the decimal notation the same way as IP address), where (in its binary representation)  0  correspond to the portion of the IP address used to address the host inside the subnet, and 1 correspond to the portion of the IP address used to address the subnet in the Internet”). The terminology “same subnet” and “common subnet” have the same meaning herein. 
     If the condition in step  5007  is satisfied, then the method bypasses the firewall generation of step  5008  and next performs step  5009 , because the source and destination IP addresses are on the same subnet, and therefore do not have any routers (including firewalls) between them. 
     If the condition in step  5007  is not satisfied, then the k-th firewall rule is generated in step  5008  by specifying: the computer&#39;s IP address as comprised by the “destination” component of the firewall rule; n-th client IP address as comprised by the “source” component of the firewall rule; m-th TCP port as the IP transport port comprised by the “destination” component of the firewall rule; “TCP” as the “protocol” component of the firewall rule; and “allow” as the “action” component of the firewall rule unless it is necessary to trigger some additional action (e.g., logging, following a denial of a particular traffic pattern). Any TCP port of computer i may be the IP transport port comprised by the “destination” component of the firewall rule. The netmask for both the “source” and “destination” components of the firewall rule is determined in accordance with the IP protocol definition stated supra. 
     After the k-th firewall rule is generated, the counter k of the firewall rules is incremented by 1 such that the incremented value of k points to the next firewall rule to be generated, followed by execution of step  5009 . 
     Step  5009  increments counter n of the TCP clients by 1 for the given software component j to point to the next TCP client n. 
     Step  5010  ascertains whether n is less than the number of TCP clients of the j-th software component. If n is less than the number of TCP clients of the j-th software component (i.e., the list of the TCP clients for the given software component j is not yet exhausted), then the method loops back to step  5007 ; otherwise step  5011  increments the port counter m by 1 for the given software component j. 
     Step  5012  determines whether m, which points to the TCP port currently being processed, is less than the number of TCP ports for the given software component j. If m is less than the number of TCP ports for the given software component j, then the method loops back to step  5006 ; otherwise step  5013  is next performed. 
     In steps  5013  to  5020 , firewall rules for UDP servers are generated for computer i. Step  5013  ascertains whether the j-th software component installed on i-th computer is a UDP server. If the j-th software component installed on i-th computer is not a UDP server, then the method branches to step  5023  so as to bypass UDP port processing. 
     If the j-th software component installed on i-th computer is a UDP server, then step  5014  initializes UDP port counter m to zero, and the method iterates through all UDP ports m on which the component is accepting datagrams. 
     Step  5015  initializes client counter n to zero. Step  5016  ascertains whether the computer&#39;s IP address and the n-th UDP client&#39;s IP address belong to the same subnet, which is done by ascertaining that the expression (IPAddr1 AND. NetMask1).XOR. (IPAddr2 AND. NetMask2) is equal to 0. For simplicity, the preceding expression does not cover the case of one subnet being a proper substring of the other. Persons skilled in the art will understand that the preceding expression can be expanded to cover subnet mask values of different lengths. 
     If the preceding condition in step  5016  is satisfied, then the method bypasses the firewall generation of steps  5017 - 5018  and next performs step  5019 , because the source and destination IP addresses are on the same subnet, and therefore do not have any routers (including firewalls) between them. 
     If the preceding condition in step  5016  is not satisfied, then a pair of symmetrical firewall rules is next generated. The first firewall rule of the pair is generated in step  5017 , and the second firewall rule of the pair is generated in step  5018 . 
     In step  5017 , the first firewall rule of the pair is generated in step  5017  as firewall rule k by specifying: the computer&#39;s IP address as comprised by the “destination” component of the firewall rule; n-th client IP address as comprised by the “source” component of the firewall rule; m-th UDP port as the IP transport port comprised by the “destination” component of the firewall rule; UDP as the “protocol” component of the firewall rule; and “allow” as the “action” component of the firewall rule unless it is necessary to trigger some additional action (e.g., logging, following a denial of a particular traffic pattern). Any UDP port of computer i may be the IP transport port comprised by the “destination” component of the firewall rule. The netmask for both the “source” and “destination” components of the firewall rule is determined in accordance with the IP protocol definition stated supra. After the first firewall rule is generated, the counter k of the firewall rules is incremented by 1 such that the incremented value of k points to the second firewall rule of the pair to be generated in step  5018 . 
     In step  5018 , the second firewall rule of the pair is generated as firewall rule k in step  5018  by specifying: n-th client IP address as comprised by the “destination” component of the firewall rule, the computer&#39;s IP address as comprised by the “source” component of the firewall rule, m-th UDP port as the IP transport port comprised by the “destination” component of the firewall rule, UDP as the “protocol” component of the firewall rule; and “allow” as the “action” component of the firewall rule unless it is necessary to trigger some additional action (e.g., logging, following a denial of a particular traffic pattern). Any UDP port of computer i may be the IP transport port comprised by the “destination” component of the firewall rule. The netmask for both the “source” and “destination” components of the firewall rule is determined in accordance with the IP protocol definition stated supra. After the second firewall rule is generated, the counter k of the firewall rules is incremented by 1 such that the incremented value of k points to the next firewall rule to be generated, followed by execution of step  5019 . 
     Step  5019  increments counter n of the UDP clients by 1 for the given software component j to point to the next UDP client n. 
     Step  5020  ascertains whether n is less than the number of UDP clients of the j-th software component. If n is less than the number of UDP clients of the j-th software component (i.e., the list of the UDP clients for the given software component j is not yet exhausted), then the method loops back to step  5016 ; otherwise step  5021  increments the port counter m by 1 for the given software component j. 
     Step  5022  determines whether m, which points to the UDP port currently being processed, is less than the number of UDP ports for the given software component j. If m is less than the number of UDP ports for the given software component j, then the method loops back to step  5015 ; otherwise step  5023  is next performed. 
     In step  5023 , the counter j of the software components installed on the i-th computer is incremented by 1. 
     Step  5024  determines if all software components for the computer i have been processed. If all software components installed on computer i have been not been processed, then the method loops back to step  5004  to process the next software component installed on computer i. If all software components installed on computer i have been processed, then step  5025  is next executed. 
     In step  5025 , the counter i of the computers within the given IT structure primitive composition is incremented by 1. 
     Step  5026  determines whether all computers have been processed. The number of computers is determined as the size of the list of computers obtained by subsetting the output of the getPrimitiveComposition( ) method of the IT structure. If all computers have not been processed, then the method loops back to step  5003  to process the next computer as designated from incrementing i in step  5025 . If all computers have been processed, then step  5027  is next executed in  FIG. 31C . 
     The generated firewall rules are stored as an attribute of a Firewall class instance using method setRules( ). 
     In steps  5027 - 5042  of  FIG. 31C , the method iterates through all the firewall rules previously generated in steps  5001 - 5026  of  FIGS. 31A-31B  and assigns each firewall rule to the appropriate firewall based upon IP address of the source and destination components of the firewall rule. 
     The counters k, r, and s in  FIG. 31C  are used as follows. Counter k indexes the firewall rules. Counter r indexes firewalls within the given IT structure primitive composition. Counter s indexes network interfaces of firewall r. 
     Step  5027  initializes counter k (corresponding to firewall rule k) to zero. 
     In step  5028 , the counter r of the firewalls within the given IT structure primitive composition is initialized to zero. The list of firewalls is obtained by subsetting the output of the getPrimitiveComposition( ) method of the IT structure to the list of objects of class Firewall. 
     In step  5029 , the counter s of the network interfaces of firewall r is initialized to zero. The list of network interfaces is obtained by subsetting the output of the getInterfaces( ) method of firewall r to the ConnectsTo subclass list. 
     In step  5030 , Boolean variables DestinationSubnet and SourceSubnet are initialized with FALSE value. Per previous assumption, either no firewall or a single firewall may be placed between a source and a destination. At this point in the method processing, all firewall rules have been generated and are kept together in a single list. It is now necessary to assign each of the generated firewall rules to the appropriate firewall, as performed by the subsequent steps. The method iterates through all firewall rules (index k), all firewalls (index r), and all network interfaces (index s). The method adds a firewall rule k to only those firewalls r where both the “source” and the “destination” portions of firewall rule k are located on the same subnet with the network interface of a single firewall. This is designed by both DestinationSubnet and SourceSubnet having the values of TRUE, and indicates that a firewall for which this firewall rule pertains has been found. If DestinationSubnet and SourceSubnet both have values of FALSE, this indicates that no firewall separates this client from this server (a permissible Conditon). 
     Step  5031  ascertains whether the s-th network interfaces of the r-th firewall and the destination component&#39;s IP address of the k-th firewall rule belong to the same subnet, which is implemented by ascertaining whether the expression (IPAddr1 AND. NetMask1).XOR. (IPAddr2 AND. NetMask2) is equal to 0. For simplicity, the preceding expression does not cover the case of one subnet being a proper substring of the other. Persons skilled in the art will understand that the preceding expression can be expanded to cover subnet mask values of different lengths. 
     If the condition in step  5031  is not satisfied, then the method branches to step  5033 . If the condition in step  5031  is satisfied, then step  5032  is next executed, which sets the Boolean variable DestinationSubnet to the value of TRUE. 
     In step  5033 , the method ascertains whether the s-th network interfaces of the r-th firewall and the source component&#39;s IP address of the k-th firewall rule belong to the same subnet, which is implemented by ascertaining whether the expression (IPAddr1 AND. NetMask1).XOR. (IPAddr2 AND. NetMask2) is equal to 0. 
     If the condition in step  5033  is not satisfied, then the method branches to step  5035 . If the condition in step  5033  is satisfied, then step  5034  is next executed, which sets the Boolean variable SourceSubnet to the value of TRUE. 
     In step  5035 , the counter s of the network interfaces of r-th firewall is incremented by 1. 
     Step  5036  determines whether all network interfaces of the r-th firewall have been processed. If all network interfaces of the r-th firewall have not been processed, then the method loops back to step  5031  to process the next network interface s of the r-th firewall. If all network interfaces of the r-th firewall have been processed, then step  5039  is next executed. 
     In step  5039 , the method ascertains whether both DestinationSubnet and SourceSubnet are TRUE. If both DestinationSubnet and SourceSubnet are not both TRUE, then the methods branches to step  5041 ; otherwise step  5040  is next executed. In step  5040 , the k-th firewall rule is appended to the ruleset of r-th firewall via setRules( ) method as explained supra. 
     In step  5041 , the counter r of firewalls within the given IT structure primitive composition is incremented by 1. 
     Step  5042  determines whether all firewalls have been processed. If all firewall have not been processed, then the method loops back to step  5029  to process the next firewall. If all firewall have been processed, then step  5043  is next executed. 
     In step  5043 , the counter k of firewall rules generated is incremented by 1. 
     Step  5044  determines whether all firewall rules have been processed. If all firewall rules have not been processed, then the method loops back to step  5028  to process the next firewall rule otherwise, the method ends. 
     4.1.3. Firewall Rules Generation Example 
       FIG. 32  depicts a sample configuration illustrating the method of  FIGS. 31A-31C , in accordance with embodiments of the present invention. In  FIG. 32 , the sample configuration comprises: 
     1) a front end (Internet-facing) firewall FW 1  interconnecting the Internet and the presentation tier subnet 12.62.63.80/28; 
     2) a back end (business and data tier firewall) FW 2  interconnecting the presentation tier subnet 12.62.63.80/28 and the business and data tier subnet 12.62.63.96/28; 
     3) two HTTP servers: 12.62.63.84 and 12.62.63.91 connected to the presentation tier subnet; 
     4) two WAS servers: 12.62.63.100 and 12.62.63.102 connected to business and data tier subnet; and 
     5) DB2 server 12.62.63.99 connected to the business and data tier subnet; 
     The relevant software components are running on the servers as follows: 
     1) HTTP Server software component on HTTP Servers 1 and 2; 
     2) WAS Server software component on WAS Servers 1 and 2; and 
     3) DB2 Server software component on DB2 Server Browser clients from any location on the Internet (0.0.0.0) are to be permitted to connect to the HTTP Servers 1 and 2. 
     HTTP Servers 1 and 2 serve any static content and also redirect incoming HTTP requests to WAS Servers 1 and 2 for any dynamic content. No Internet-based browser client is allowed to connect to WAS Servers 1 and 2 directly. Hence, HTTP connections to WAS Servers 1 and 2 are only allowed from HTTP Servers 1 and 2. 
     DB2 client connections to Database Server are only allowed from WAS Servers 1 and 2. 
     For the described sample configuration, the corresponding IT structure would comprise the following objects (only relevant properties of the IT entities are shown for clarity) shown in Tables 4A and 4B. 
     
       
         
           
               
             
               
                 TABLE 4A 
               
             
            
               
                   
               
               
                 Firewalls: 
               
            
           
           
               
               
               
               
            
               
                   
                   
                 IP address of the 
                 IP address of the 
               
               
                   
                 Firewall name 
                 Network Interface 1 
                 Network Interface 2 
               
               
                   
                   
               
               
                   
                 FW1 
                 12.62.63.74 
                 12.62.63.85 
               
               
                   
                 FW2 
                 12.62.63.86 
                 12.62.63.98 
               
               
                   
                   
               
            
           
         
       
     
                     TABLE 4B                  Servers:                             IP address of           Server   the Network   Software Component 1                                     name   Interface   Name   Protocol   Port   Clients                                             HTTP   12.62.63.84   HTTP Server   TCP   443   0.0.0.0       Server 1                           HTTP   12.62.63.91   HTTP Server   TCP   443   0.0.0.0       Server 2                           WAS   12.62.63.102   WAS Server   TCP   80   12.62.63.84,       Server 1                   12.62.63.91       WAS   12.62.63.100   WAS Server   TCP   80   12.62.63.84,       Server 2                   12.62.63.91       DB2   12.62.63.99   DB2 EE   TCP   60000   12.62.63.100,       Server                   12.62.63.102                    
Table 4C depicts the firewall rules that will be produced by the firewall rule generation algorithm:
 
                                         TABLE 4C                      Source   Destination           Assigned                                             Rule No.   IP address   Port   IP address   Port   Protocol   Action   to Firewall                                                     1   0.0.0.0   Any   12.62.63.84   443   TCP   Allow   FW1       2   0.0.0.0   Any   12.62.63.91   443   TCP   Allow   FW1       3   12.62.63.84   Any   12.62.63.102   80   TCP   Allow   FW2       4   12.62.63.91   Any   12.62.63.102   80   TCP   Allow   FW2       5   12.62.63.84   Any   12.62.63.100   80   TCP   Allow   FW2       6   12.62.63.91   Any   12.62.63.100   80   TCP   Allow   FW2                    
4.2 Load Balancing Script Generation
 
     A load balancer distributes software application executions efficiently among a group of servers so that no individual server is overburdened. Each such group of servers is called a “load balance group”. A load balancer may be a commercially available load balancer identified by a make and model. Alternatively, the load balancer may be an in-house load balancer, a customized load balancer, etc. 
     In order to function, the load balancer is provided with load balancing rules comprising: specification of the load balance groups, a load balancing algorithm for each load balancing group, and the input parameters required by the load balancing algorithms being utilized. 
     The present invention discloses automatic generation of the load balancing rules, which may take the form of an executable script in the rule definition language of the load balancer being used. 
     4.2.2 Load Balancing Rule Generation Algorithm 
     The load balancing rule generation algorithm comprises the following high-level steps:
         1) define load balanced groups;   2) for each load balanced group, define load balancing mechanism and its parameters and define session persistence mechanism; and   3) generate the load balancing script in the rule definition language of the load balancer being used.       

     Load balanced groups may be defined, in an embodiment, programmatically by cycling through the ITServers associated with each of Programs in the IT structure primitive composition and returning, as the result, the lists of ITServers running instances of the same Program and located on the same subnet, wherein each of the said lists is then designated as a load balanced group. In another embodiment, the definition of load balanced groups is performed interactively by the user via GUI by clicking on the displayed images of the computers comprising every group to be load balanced, and then selecting the software application, requests to which should be load balanced. Each load balanced group comprises a plurality of computers or servers. 
     For each load balanced group, a load balancing mechanism and its parameters may be defined, based upon the heuristic rules described herein. If the expected server load triggered by a single transaction is high, then the load balancing mechanism to be used is Least Load. If the expected server load triggered by a single transaction is small to medium, then the load balancing mechanism to be used is Round Robin. Finally, if the expected server load triggered by a single transaction is unknown, then Fastest Response load balancing mechanism is to be used. The expected server load triggered by a single transaction is defined by the value of the property ExpectedTxLoad of the class Program. 
     The “Round Robin” load balancing mechanism assigns servers in a looping fashion from a sequential list of servers. The server IP address at the top of the list is assigned to the next new session and then moves to the bottom of the list; the next server IP address at the top of the list is handed out to the next new session and then moves to the bottom of the list; etc. 
     The “Least load” load balancing mechanism assigns to the next new session the server having the minimum load (e.g., CPU utilization, or other appropriate metric). 
     The “Fastest response” load balancing mechanism assigns to the next new session the server having the fastest time of response to the request for service (based on current activity, or as measured by a test request). 
     For each load balanced group, session persistence mechanism may be defined, based upon the heuristic rules described herein. Session persistence is the mechanism guaranteeing that the load balancer would send all the requests pertaining to the same application session to the same server for the duration of the application session. There are several known ways of providing the session persistence, including: 1) source IP/port based (the load balancer forwards IP packets with the same source IP or source IP/protocol/port triplet to the same server); 2) cookie-based (the load balancer inserts a string representing the session ID into a cookie returned to the client with the first HTTP response); and 3) URL-based (the load balancer inserts a string representing the session Id into URL before sending HTTP redirect to the client). 
     If the application program, requests to which should be load balanced, does not support or use user sessions, then no session persistence needs to be provided by the load balancer, and any incoming request should be load balanced according to the load balancing mechanism selected. Otherwise, requests pertaining to the same session need to be forwarded to the same instance of the application. If the clients of the application are not Internet-based nor use NATted or otherwise masqueraded IP addresses, then source IP/port based session persistence mechanism is to be used. Otherwise, if the cookies are allowed in the application, then the cookie-based load balancing mechanism is to be used. Otherwise, URL-based session persistence mechanism is to be used. 
       FIGS. 33A-33B  (collectively,  FIG. 33 ) is a flow chart comprising steps  5101 - 5119  which describe a load balancing rule generation algorithm, in accordance with embodiments of the present invention. 
     In step  5101 , the load balanced groups are selected (either by the user via GUI by clicking on the computers comprising every group, or by iteratively cycling through the ITServers associated with Programs in the IT structure primitive composition running instances of the same Program and located on the same subnet and returning, as the result of every iteration, the list of ITServers belonging to a single load balanced group). The counter I is a load balance group number index. 
     The method iterates through the load balanced groups using the counter I initialized in step  5102 . 
     In steps  5103  through  5109 , the session persistence mechanism is specified. 
     In step  5103 , based on the value of is SessionBased property of the Program object, the decision is made whether session persistence is required for this load balanced group. If the application is not session based, then SessionPersistence variable is assigned the value of None in Step  5104 , and the processing continues at step  5110 . Otherwise, the session persistence mechanism needs to be chosen in Steps  5105 - 5109  below. 
     In Step  5105  the method cycles through the list of the application clients to ascertain whether those are Internet-based or using NATted IP addresses (i.e., IP addresses produced by Network Address Translation). If there are no such clients, then SessionPersistence variable is assigned the value of “Source IP/port-based session persistence” in Step  5106 , and the processing continues at step  5110 . Otherwise, the method ascertains whether the use of cookies is allowed by the load balancer equipments used, as well as by the local policies. If yes, then SessionPersistence variable is assigned the value of “cookie-based” in Step  5109 , and the processing continues at step  5110 . Otherwise, SessionPersistence variable is assigned the value of “URL-based session persistence” in Step  5108 , and the processing continues at step  5110 . 
     In steps  5110  through  5116 , the load balancing mechanism and its parameters are specified. The load balanced mechanism is selected by the method (Fastest Response, Round Robin, Least Load) based upon the expected server load (which is a property of the application to be load balanced). “Server load” is defined as metrics, comprising CPU utilization of the server, RAM utilization of the server, network bandwidth utilization of the server NIC, or a combination thereof computed based on a predetermined formula, or a metric based on some other characteristics of a server execution of workload. A load “range” of server load may be expressed as a percent range or as “unknown” if the server load is unknown. 
     If the expected server load is unknown, then the variable LBmechanism gets assigned the value of “Fastest response” in step  5111 . In step  5114 , the TestRequest variable is assigned the default value based upon the type of the application being load balanced (e.g. “get/index.html” for HTTP servers). 
     If the expected server load is small to medium (e.g., within a range of 30-50%), then the variable LBmechanism gets assigned the value of “Round robin” in step  5112 . In step  5115 , the weight coefficients k 1 , k 2 , . . . , for servers 1, 2, . . . , respectively, are defined by the method as being proportional to the servers&#39; capacity (CPU and RAM). If the expected server load is high (e.g., within a range of greater than 50%), then the variable LBmechanism gets assigned the value of “Least load” in step  5113 . In step  5116 , the LoadMetrics variable gets assigned, in the preferred embodiment, the default value of “% CPU”, or, in another embodiment, “remaining RAM”, or in another embodiment, the network traffic generated by the application, or in yet another embodiment, a linear combination of all or some of the above factors. 
     Although  FIG. 33  illustrates three load balancing mechanisms relating to steps  5111 - 5113 , the present invention generally permits selection of a load balancing mechanism from two or more load balancing mechanisms. The two or more load balancing mechanisms respectively correspond to two or more ranges of server load. The selected load balancing mechanism corresponds to a determined or unknown server load. 
     In step  5117 , a LB group description gets generated based upon the values of the properties of the ITLBGroup object defined supra, in accordance with the load balanced equipment as defined in the IT structure primitive composition. The generated LB group description may be outputted on a tangible medium (e.g., computer screen, printed paper, magnetic storage medium such as a disk or hard drive, an optical storage device, etc.) 
     In step  5118 , the counter I of the load balanced groups gets incremented, and in step  5119  the method loops back to step  5103  if the list of the load balanced groups is not yet exhausted. 
     The load balancing algorithm of  FIG. 33  may be implemented in computer code such as in a load balancing script in the rule definition language of the load balancer being used. 
     4.2.3. Load Balancing Rules Generation Example. 
       FIG. 34  depicts a sample load balancing configuration illustrating the method of  FIG. 33 , in accordance with embodiments of the present invention. In  FIG. 34 , the sample load balancing configuration comprises: 
     1) a front end (Internet-facing) firewall FW 1  interconnecting the Internet and the presentation tier subnet 12.62.63.80/28; 
     2) a load balancer (LB 1 ) 12.62.63.81 connected to the presentation tier subnet 12.62.63.80/28; 
     3) a back end (business and data tier firewall) FW 2  interconnecting the presentation tier subnet 12.62.63.80/28 and the business and data tier subnet 12.62.63.96/28; 
     4) a load balancer (LB 2 ) 12.62.63.97 connected to the business and data tier subnet 12.62.63.96/28; 
     5) six HTTP servers: 12.62.63.84-89 connected to the presentation tier subnet; 
     6) four WAS servers: 12.62.63.100-103 connected to the business and data tier subnet; and 
     7) three Database servers 12.62.63.104-106 connected to the business and data tier subnet. 
     The relevant software components are running on the servers as follows: 
     1) HTTP Server software component on HTTP Servers 1-6; 
     2) WAS Server software component on WAS Servers 1-4; 
     3) DB2 Server software component on DB Servers 1-3. 
     HTTP Servers 1-3 are serving the static content and forwarding the dynamic content requests to an application running on WAS servers 1-4. Thus, the HTTP Servers 1-3 are serving a session-based application with Internet-based browser clients. The expected server load triggered by a single transaction on the HTTP Servers 1-3 is medium (e.g., 30-50%). 
     HTTP Servers 4-6 are only serving static content to Internet-based browser clients. Thus, no user sessions are required or supported. The expected server load triggered by a single transaction on the HTTP Servers 4-6 is unknown. 
     WAS Servers 1-4 are running session-based application, user requests to which are relayed through HTTP Servers 1-3. Thus, the application clients reside on the Internal non-NATted network. The expected server load triggered by a single transaction on the WAS Servers 1-4 is medium (e.g., 30-50%). 
     Database Servers 1-3 are running the database server application whose clients reside on the WAS Servers 1-4. 
     For the described sample configuration, the corresponding IT structure would comprise the following objects (only relevant properties of the IT entities are shown for clarity) in Tables 5A and 5B as a result of a script in the rule definition language of the load balancers LB 1  and LB 2 . 
     
       
         
           
               
             
               
                 TABLE 5A 
               
             
            
               
                   
               
               
                 Load balancers: 
               
            
           
           
               
               
               
            
               
                   
                 Load balancer name 
                 IP address of the Network Interface 
               
               
                   
                   
               
               
                   
                 LB1 
                 12.62.63.81 
               
               
                   
                 LB2 
                 12.62.63.97 
               
               
                   
                   
               
            
           
         
       
     
                     TABLE 5B                  Servers:                                 IP address   Application   Load                                         Server   of the       Session-           balanced       name   Network Interface   Name   based?   Server load   Clients   group               HTTP   12.62.63.84   HTTP   yes   medium   Internet-   0       Server 1       Server           based           HTTP   12.62.63.85   HTTP   yes   medium   Internet-   0       Server 2       Server           based           HTTP   12.62.63.86   HTTP   yes   medium   Internet-   0       Server 3       Server           based           HTTP   12.62.63.87   HTTP   no   unknown   Internet-   1       Server 4       Server           based           HTTP   12.62.63.88   HTTP   no   unknown   Internet-   1       Server 5       Server           based           HTTP   12.62.63.89   HTTP   no   unknown   Internet-   1       Server 6       Server           based           WAS   12.62.63.100   WAS   yes   medium   Internal non-   2       Server 1       Server           NATted           WAS   12.62.63.101   WAS   yes   medium   Internal non-   2       Server 1       Server           NATted           WAS   12.62.63.102   WAS   yes   medium   Internal non-   2       Server 1       Server           NATted           WAS   12.62.63.103   WAS   yes   medium   Internal non-   2       Server 1       Server           NATted           DB2   12.62.63.104   DB2 EE   yes   high   Internal non-   3       Server                   NATted           DB2   12.62.63.105   DB2 EE   yes   high   Internal non-   3       Server                   NATted           DB2   12.62.63.106   DB2 EE   yes   high   Internal non-   3       Server                   NATted                    
Each of the preceding load balance groups is located on the same subnet as may be verified from  FIG. 34 . The following load balancing rules in Table 5C will be produced by the algorithm wherein the LB mechanism is determined by the server load.
 
                                     TABLE 5C                       LB   Session           LB group       mechanism   Persis-   Load balancer       number   Servers   (parameters)   tence   location                  0   HTTP Server 1,   Round robin   Cookie-   12.62.63.80/28           HTTP Server 2,       based           HTTP Server 3       1   HTTP Server 4,   Least load   None   12.62.63.80/28           HTTP Server 5,           HTTP Server 6       2   WAS Server 1,   Round robin   Source   12.62.63.96/28           WAS Server 2,       IP/port           WAS Server 3,           WAS Server 4       3   DB Server 1,   Fastest   Source   12.62.63.96/28           DB Server 2,   response   IP/port           DB Server 3                    
4.3 Generation of Wrappers for Non-Compliant Applications
 
     An application level communication protocol may be non-compliant with the security policy at the transport level. Examples of such transport-level non-compliance include but not limited to the following situations:
         1) the application (TCP server) listens at a TCP port (or a multitude of TCP ports) which is explicitly disallowed by the security policy (e.g. a dynamically assigned port from the automatic range, as in FTP passive mode); and   2) the application (UDP server) accepts UDP datagrams using a UDP port or a port range which is explicitly disallowed by the security policy.       

     The present invention discloses generation of a wrapper around the application adapted to use a non-compliant port in order to cure the transport-level non-compliance, such that the wrapper will exist on the same computer as the application. The wrapper will communicate with the application via the non-compliant port or multitude of ports that the application is adapted to use, but will communicate to the outside world via compliant ports only. Thus, the application may continue to use the non-compliant transport and yet communicate with the outside world. 
     As an example, assume that application A wants to accept incoming connections from its clients at dynamically assigned automatic TCP ports. However, assume that local policy does not permit applications to listen at dynamically assigned automatic ports, but rather permits free static ports from the range of 1 to 5000 to be used for communications by applications. The present invention would generate a wrapper program X that would exist on the same computer as the application A. An external client C of the Application A would talk to the wrapper X at a previously agreed upon or otherwise communicated static TCP port P thinking that it talks to the application A directly, but in fact the wrapper X will accept the incoming connection at the static TCP port P, and will act as a transparent TCP proxy by forwarding the data stream it received from the client C to the application A and vice versa using another TCP connection it establishes to a local dynamic TCP port where the application A listens. 
     The wrapper generation software of the present invention generate the wrapper, adds the wrapper to the IT structure, and establishes a relationship stating that program A communicates through wrapper X. The wrapper would be embedded within the composition of the IT structure. 
     4.3.1 Algorithm For Generating Wrappers for Non-Compliant Applications 
       FIG. 35  is a flow chart comprising steps  5201 - 5220  which describe generation of wrappers for non-compliant applications, in accordance with embodiments of the present invention. 
     The counters i, j, n, and p in  FIG. 35  are used as follows. Counter i indexes the computers within an IT structure primitive composition. Counter j indexes the software components installed on a given computer. Counter n indexes clients of a given software component installed on a given computer. Counter p indexes application level protocols used by a given software component installed on the given computer. 
     The method iterates through all the computers in the given IT structure primitive composition, using the loop over counter i comprising steps  5202 - 5220 . Counter i is initialized to zero in step  5201 . 
     For each computer i, the method iterates through the software components i installed on the computer i, using the loop over counter j comprising steps  5203 - 5218 . Counter j is initialized to zero in step  5202 . 
     For every software component j, assumed to be a server, the method iterates through its clients n installed on the computer i, using the loop over counter n which begins at step  5204  and is terminated at step  5207 . Counter n is initialized to zero in step  5203 . 
     In steps  5204  through  5207 , the method ascertains whether any client of the j-th software component is separated from the i-th computer by a firewall. 
     In step  5204 , the memory variable Client is assigned the value of m-th Client of the j-th software component of the i-th computer of the given IT structure primitive composition. 
     In step  5205 , the method ascertains whether Client is separated from the i-th computer by a firewall (this can be done by analyzing IP addresses of the i-th computer and Client). If yes, step  5208  is executed next; otherwise, in step  5206  the client counter n of the clients for the given software component is incremented by I and step  5207  determines whether all clients have been processed for the given software component j. 
     If all clients have been not processed for the given software component j, then the method loops back to step  5204 ; otherwise step  5217  is executed next. 
     In steps  5208  through  5216 , the method iterates through the application level protocols p used by the j-th software component of the i-th computer, using the loop over counter p comprising steps  5209 - 5216 . Counter p is initialized to zero in step  5208 . 
     In step  5209 , the memory variable Transport is assigned the value of transport protocol (i.e., TCP or UDP) used by the p-th application level protocol of the j-th software component. 
     In step  5210 , the memory variable Ports is assigned the value of list of ports of the transport protocol (i.e., TCP or UDP) used by the p-th application level protocol of the j-th software component. 
     In step  5211 , the method ascertains whether the port or port range used is allowed by the security policy. If no, then the method proceeds to step  5214  for generation of a wrapper, otherwise the method branches to step  5215 . 
     In step  5214 , the method creates a new instance of ITIPTransportWrapper which represents a communication protocol wrapper which opens a single TCP connection from the client to the server and uses the connection for all the transmissions between the two hosts, by “wrapping” all the data connections and datagrams contemplated by the software client and server within the TCP connection. 
     Even though original non-compliant communications may have been performed using either TCP or UDP transport, the generated wrapper will always be using TCP transport (thus, if necessary, wrapping UDP datagrams with a single TCP connection). The reason for this is that it is possible to conceive a security policy which fully prohibits any UDP communications crossing IT structure boundaries. 
     In step  5215 , the counter p of the application level protocols for the given software component j is incremented by 1. 
     Step  5216  determines whether all protocols of the j-th software component have been processed. If all protocols of the j-th software component have not been processed, the method loops back to step  5209 ; otherwise  5217  is executed next. 
     In step  5217 , the counter j of the software components installed on the i-th computer is incremented by 1. 
     In step  5218 , the method determines whether all software components of the i-th computer have been processed. If all software components of the i-th computer have been not processed, then the method branches back to step  5303 ; otherwise step  5219  is executed next. 
     In step  5219 , the counter i of the computers within the given IT structure primitive composition is incremented by 1. 
     In step  5220 , the method determines whether all computers have been processed. If all computers have not been processed, then the method branches back to step  5302 ; otherwise the method ends. 
     5. Verification of Correctness of Aspects of IT Structure 
     Verification of correctness of IT structure comprises software that generates a deliverable (i.e., an end result of a verification activity) from knowledge of IT structures and/or other aspects of an IT development model. 
     This section discloses verification of correctness of an IT structure deployment, detection of unauthorized changes to an operating instance of an IT structure, and verification of conformance of an IT structure to an IT delivery environment. 
     5.1 Verifying Correctness of an IT Structure Deployment 
     The process of verifying correctness of deployment of an IT structure is illustrated in  FIG. 36 , in accordance with embodiments of the present invention. The objective is to verify correctness of real IT structure instance D obtained as a result of deployment of IT structure R (step  6001 ). The process produces a reverse specification RD of IT structure instance D (step  6002 ). The process then performs a comparison of IT structures R and RD (step  6003 ). See supra  FIG. 16  and description thereof for depiction of the reverse specification process, which may comprise: providing information relating to the IT structure instance D; and generating the real IT structure RD from the information relating to the IT structure instance D. Providing information may comprise gathering the information, such as by, inter alia, at least one IT agent. 
     If no differences between RD and R are found (step  6004 ), the process indicates that D is a result of successful deployment of R (step  6005 ). Otherwise, the process indicates an error (step  6006 ) and reports differences (e.g., at least one difference discovered, all differences discovered, etc.) discovered (step  6007 ). 
     5.2 Detecting Unauthorized Changes to the Operating Instance of an IT Structure Instance 
     Unauthorized changes to the operating instance of an IT structure can be detected by continuously or periodically employing the process of verification of deployment described above. It is assumed that any legitimate (authorized) changes to an IT structure are performed by changing the IT structure specification and re-deploying the IT structure. Any other changes, e.g., those performed against the operating instance of an IT structure, are considered illegitimate (unauthorized), be they inadvertent or maliciously intentional. 
     The process of detecting unauthorized changes to an IT structure is illustrated in  FIG. 37 , in accordance with embodiments of the present invention. The goal is to detect unauthorized changes to the operating instance X of IT structure R (step  6008 ). The process performs verification of deployment of X by determining if X is a correctly deployed instance of R (step  6009 ). If discrepancies are detected by the verification of deployment step of the process (step  6010 ) (i.e., if said determining determines that X is not a correctly deployed instance of R then signaling that X is not a correctly deployed instance of R), an unauthorized change is reported (step  6011 ). Depending upon the kind of a particular deviation of the real IT structure from its specification, an appropriate corrective action is triggered, and the appropriate operations personnel are notified by any available communication means (e.g., E-mail, an error message displayed on screen or placed in a report). Assuming no unauthorized changes were detected (step  6010 ), the process waits for an appropriate period of time (step  6012 ), defined by the operational policy. The period of time may be zero (i.e., no delay between verification attempts). The process then checks whether the IT structure R is undergoing an authorized change (step  6013 ), and if so, the process terminates. An authorized change, in this context, may mean that IT structure R is going through a translation/binding process, or is identified as “undergoing change” by the version control function of a development environment. Either one of these authorized changes in R can be detected in step  6013 , and cause a termination of the change detection cycle (i.e., the verification process ends), with the assumption that the verification process may be restarted upon completion of the authorized change. In the absence of an unauthorized change to the IT structure R (step  6013 ), the process repeats the verification by looping back to step  6009 . 
     The determination of whether the IT structure R is undergoing an authorized change is performed based on information obtained from the development environment that is aware of which IT structures are in a process of being changed. 
     In addition to the notification in step  6011  of the process described above, a set of conditions can be formulated for recognition by the process or the party notified about an occurrence of unauthorized change in step  6011 , for which conditions the appropriate mitigating and damage control procedures are initiated, e.g. California SB  1386  notice procedure may be initiated whenever the network infrastructure is compromised to the extent that the service provider would believe that an intruder could have gained access to end users&#39; private information. 
     5.3 Verifying Conformance of an IT Structure to an Exemplary Delivery Environment 
     The following exemplary delivery environment is a data center and is aimed at providing the highly-available branded infrastructure for Internet-accessible IT applications. 
     The data center is a new, state-of-the-art facility. It is built on today&#39;s technology and practices a philosophy of being a security-focused operation. Activities and services are monitored by an experienced technical staff 24×7 from the Network Operations Center (NOC). 
     The facilities include 3,000 square feet of raised floor, a network operations monitoring center, conference rooms, administrative space and coffee room. 
     The physical space of the data center has a secure co-location in a 3,000 square foot room with 18″ raised floor and is ADA (Americans with Disabilities Act)-compliant. The physical space includes 27″×39″×84″ cabinets with internal vertical cable management and vented front and back doors. All hardware must fit into cabinets. No space other than cabinets is provided. 
     The electrical power to the data center from NYSEG (New York State Electric and Gas Company) is delivered by dual redundant feeds. The electric service in the building is connected to a parallel redundant UPS. There is a backup 1000 KW diesel generator with 7-day fuel reserve. 
     Primary Internet access of the data center is via AT&amp;T Gigabit Ethernet over multi-mode fiber to their national fiber network node located in adjacent building. This network node has eight connections to the AT&amp;T network. Alternate internet access is via 100 Mbps Ethernet over single-mode fiber connection to the Cable &amp; Wireless Network. 
     Security for the data center includes access control by Smart Card system issued by NOC personnel staffed 24×7×365 (24 hours, 7 days a week, 365 days a year). Data center floor access is controlled by access card and biometric scan. Visitors are granted access by duly authorized representatives of the data center clients. A biometric scan and surrender of the visitor&#39;s driver&#39;s license for a proxy card is required for visitors to gain access from the lobby to the administrative area. Another biometric scan and use of the access card is required to enter the raised floor area. 
     Every independent IT structure hosted (added to the IT delivery environment) in the exemplary IT delivery environment connects to a firewall, provided and managed by the data center. This firewall is configured to the requirements of the hosted IT structure. The data center does not prohibit IT structures being added to the IT delivery environment from having their own firewalls. 
     The preceding exemplary delivery environment of a data center is merely illustrative and the scope of the present invention is not limited to the preceding exemplary delivery environment. 
       FIG. 38  provides an overview of the verifyConformance( ) method of the described IT delivery environment, in accordance with embodiments of the present invention. The verifyConformance( ) method verifies compliance of the target IT structure to the factors relevant within the context of an IT delivery environment such as the preceding exemplary delivery environment. 
     A set of product standards may be established by a data center, such that for certain types of products only products included in the standard set may be used—e.g., operating systems may be restricted to UNIX, and Windows; e.g., UNIX hardware platforms may be restricted to RS/6000 model F50 or H50 and no other computer may be used to run UNIX. The process examines the IT structure primitive composition (as returned by the getPrimitiveComposition( ) method) and ensures that any non-abstract elements of the primitive composition represent products that are within the established set of standards for the IT delivery environment (step  6014 ). If the verification is successful (no violations found) (step  6015 ), the process continues at step  6016 , otherwise, an error is indicated  6040  and the process terminates. 
     The process then proceeds to verify power requirements (step  6016 ) (i.e., to verify that power consumption requirements of the IT structure are compatible with the power capacity of the IT delivery environment). This may involve, inter alia: 
     1. Verifying that the total peak power consumption of the IT Structure does not exceed the spare electrical capacity of the Data Center. The power consumption determination is performed as a sum of power consumption of all devices comprising the IT structure primitive composition (as returned by the getPrimitiveComposition( ) method, the output of which is subset to hardware devices only). The power consumption of the IT structure is a sum of outputs of PeakPowerConsumption( ) method of each of the devices in the IT structure primitive composition.
 
2. If the High Availability is required, verify that the spare backup generator capacity does not exceed the total peak power consumption of the IT structure in power-saving mode (e.g., with monitors and other non-critical devices switched off). To perform this determination, the power consumption of the IT structure in power-saving mode is calculated using the same approach as described above, but including in the power consumption computation only the power consumption of critical (in the context of the IT structure) devices. A critical device is a device used by the normal operation of an IT structure, as opposed of any auxiliary activities, including but not limited to error handling, logging, tracing, accountability, monitoring, etc. For example, a printer attached to a computer used by a system programmer to print captured error logs is non-critical, a monitor attached to a computer running the application server, and used by a system programmer to start and stop the application server, is non-critical, while the computer running the application server is critical.
 
     If the verification is successful (no violations found) (step  6017 ), the process continues at step  6018 , otherwise, an error is indicated  6040  and the process terminates. 
     The process then proceeds to verify availability of required space (step  6018 ). This may involve verifying that the number of rack slots required by the IT Structure hardware devices (the device list is determined from the IT structure primitive composition, subset to devices, then the method is RackMounted( ) is used to determine whether the device is rack mounted, followed by the use of the requiredSpace( ) method of each device to determine the number of rack slots required to house the device, and/or the amount of floor space required to place the device on the raised floor) does not exceed the number of available rack slots in the Data Center. If the verification is successful (no violations found) (step  6019 ), the process continues at step  6020 , otherwise, an error is indicated  6040  and the process terminates. 
     The process then proceeds to verify the ability of the IT structure to use required software and to ensure that no forbidden software is being introduced by the IT structure into the IT delivery environment (step  6020 ). The process iterates through the Data Center&#39;s list of the software packages that are not allowed for deployment in it, and verifies that the IT structure primitive composition does not contain any of these forbidden software packages (based on the set of software entities (class Program) returned by the getPrimitiveComposition( ) method). If the verification is successful (no violations found) (step  6021 ), the process continues at step  6022 , otherwise, an error is indicated (step  6040 ) and the process terminates. Each of the software products required for use by the IT delivery environment is defined as an IT structure, which implies definitions of its dependencies and prerequisites. The process, in step  6020 , verifies that the IT structure being checked for compliance with this IT delivery environment indeed satisfies all these dependencies and prerequisites, i.e., the primitive composition of the IT structure being verified (as obtained from the method getPrimitiveComposition( )) contains all the required elements to satisfy the dependencies and prerequisites of the IT delivery environment product set. 
     The process then proceeds to verify physical network compliance (step  6022 ). This may involve verifying that the IT structure uses only physical network interfaces explicitly supported by Data Center (e.g., if phone/modem connections are required, the phone lines must be available in the Data Center). This is performed by examining the CommunicationITRelationship entities in the list of IT relationships of the IT structure, as returned by the getPrimitiveRelationships( ) method, and examining the &lt;connection type&gt; property of each CommunicationITRelationship thus obtained. If the verification is successful (no violations found) (step  6023 ), the process continues at step  6024 , otherwise, an error is indicated (step  6040 ) and the process terminates. 
     The process then proceeds to verify network bandwidth requirements (step  6024 ). This may involve verifying that the total peak network bandwidth requirement of the software elements of an IT primitive composition of the IT structure does not exceed the total spare network capacity of the Data Center (i.e., IT delivery environment). The total peak network bandwidth requirement of the IT structure is determined as a sum of peak network bandwidth requirements of entities of class Program in the IT structure primitive composition, as returned by method getPeakBandwidthRequirement( ) of each such entity. However, the list of programs contained in the IT structure primitive composition will be subset to only those programs that communicate externally, i.e., to external entities (as determined by the examination of CommunicationITRelationship objects obtained from getPrimitiveRelationships( ) method of the IT structure). For example, if there are four entities of class Program in the IT structure primitive composition, communicating externally, and having the peak bandwidth requirements of 1, 0.5, 2.5, and 4 Mbps, then the resulting total peak bandwidth requirement will be 8 Mbps. If the verification is successful (no violations found) (step  6025 ), the process continues at step  6026 , otherwise, an error is indicated (step  6040 ) and the process terminates. 
     The process then proceeds to verify Internet availability requirements (step  6026 ) (i.e., Internet availability provided by the IT delivery environment to satisfy Internet connectivity requirements of the IT structure). This may involve: 
     1. If the Internet connectivity is required by the IT structure (as indicated by the presence of at least one CommunicationITRelationship entity in the IT structure set of primitive IT relationships (method getPrimitiveRelationships( ) that involves an external IT structure), verifying that the Data Center has at least one Internet hookup.
 
2. If the High Availability (as evidenced by getOperationalCharacteristics( ) method of the IT structure) is required and the Internet connectivity is required, verifying that the Data Center has at least two Internet hookups through different providers.
 
     If the verification is successful (no violations found) (step  6027 ), the process continues at step  6030 , otherwise, an error is indicated (step  6040 ) and the process terminates. 
     The process then proceeds to verify network traffic requirements (step  6030 ). This may involve: 
     1. If the Data Center (i.e., IT delivery environment) forbids certain protocols (UDP, ICMP, X), verifying that these protocols are not used by the IT Structure. The verification is performed by examining the properties of ConnectsTo IT interfaces comprising CommunicationITRelationship objects in the list obtained from the getPrimitiveRelationships( ) method.
 
2. If the Data Center (i.e., IT delivery environment) forbids incoming connections to certain ports, verifying that the IT Structure doesn&#39;t have interfaces on those ports that need to be accessed from outside the data center network (i.e., the IT structure does not comprise an interface on any port forbidden by the IT delivery environment from accessing external data flow into the IT delivery environment from outside of the IT delivery environment). Port usage is evidenced from properties of ConnectsTo IT interfaces comprising CommunicationITRelationship objects, contained in the set returned by getPrimitiveRelationships( ), subset to CommunicationITRelationship objects involving external IT structures.
 
3. If the Data Center (i.e., IT delivery environment) forbids outgoing connections to certain ports, verifying that the IT Structure doesn&#39;t have interfaces on these ports that need to access the interfaces outside the Data Center network (i.e., the IT structure does not comprise an interface on any port forbidden by the IT delivery environment from facilitating outward data flow from within the IT delivery environment to outside of the IT delivery environment). Port usage is evidenced from properties of ConnectsTo IT interfaces comprising CommunicationITRelationship objects contained in the set returned by getPrimitiveRelationships( ), subset to CommunicationITRelationship objects involving external IT structures.
 
     If the verification is successful (no violations found) (step  6031 ), the process continues at step  6032 , otherwise, an error is indicated (step  6040 ) and the process terminates. 
     The process then proceeds to verify against software application type limitations (step  6032 ). This may involve: 
     1. If the Data Center (i.e., IT delivery environment) policies forbid certain types of software applications, verifying that IT Structure does not include such software applications (e.g., Data Center policies may forbid using FTP servers for security reasons). This determination is performed by examining subclasses of Program objects contained in the IT structure primitive composition, as returned by the getPrimitiveComposition( ) method.
 
2. If the Data Center (i.e., IT delivery environment) policies forbid certain communication modes of applications, verifying that IT Structure does not include software applications running in that mode (e.g., Data Center may forbid originating SMTP emails from its hosts for fear of being blocked by anti-spamming engines if it is abused). This determination is performed by examining subclasses of ConnectsTo ITInterface comprising ITRelationships (obtained from getPrimitiveITRelationships( ) method) involving external IT structures, these ConnectsTo subclasses using port  25  (SMTP).
 
     If the verification is successful (no violations found) (step  6033 ), the process continues at step  6034 , otherwise, an error is indicated (step  6040 ) and the process terminates. 
     The process then proceeds to verify required security level against the provided one (step  6034 ). This may involve: 
     1. Verifying physical security requirements. This may be performed as a manual step of the method, involving comparison of security operational characteristics obtained from getOperationalCharacteristics( ) method of the IT structure to the actual physical security policy of the data center, or as an automated (program) comparison of security operational characteristics of the IT structure to the data center security policy represented as a set of operational characteristic expressions. If a manual activity is performed, the process continues upon manual entry of the result of the physical security check. For example, the IT structure being verified may include a wireless access point. This wireless access point must be protected against physical theft and tampering by being mounted inside a locked cabinet. The IT delivery environment then must have the ability to mount wireless access points inside a locked cabinet, as a part of its physical security policy. If the IT delivery environment has a less restrictive physical security policy for wireless access point mounting (e.g., wireless access points must be mounted within the ceiling space or at least 8′ above the floor), then this may be insufficient to satisfy the more restrictive requirement of the IT structure, and therefore the check in step  6034  would fail.
 
2. Verifying anti-virus protection. This involves obtaining the list of objects of class Program from the IT structure primitive composition (as returned by the getPrimitiveComposition( ) method), and making sure that every object of class Program representing Windows OS has installed (the corresponding InstallationITRelationship object is present in the IT structure set of IT relationships as provided by the getPrimitiveRelationships( ) method) on it an object of class Program representing an Anti-Virus program (as evidenced by the appropriate subclass).
 
     If the verification is successful (no violations found) (step  6035 ), the process continues at step  6036 , otherwise, an error is indicated (step  6040 ) and the process terminates. 
     The process then proceeds to verify monitoring and administrative access compliance (step  6036 ). This may involve verifying that IT Structure has all of the necessary interfaces (network or other) to provide access to the IT structure by monitoring systems of the Data Center (i.e., IT delivery environment). A particular subclass of Manageable ITInterface may be required to be present in all IT structures deployed in this IT delivery environment, in which case the determination may be performed by examining the list of Manageable ITInterfaces as comprising the IT relationships returned by the getPrimitiveRelationships( ) method. For example, a separate network segment may be required by the IT delivery environment for administrative access and, in this step, verification could include a check for the presence of a NIC connecting to the administrative segment in the IT structure being verified. 
     If the verification is successful (no violations found) (step  6037 ), the process continues at step  6038 , otherwise, an error is indicated (step  6040 ) and the process terminates. 
     The process then proceeds to verify required service levels against delivery environment commitments (step  6038 ). This may involve: 
     1. Verifying that the Data Center incident response time does not exceed the response time claimed in the IT Structure (as evidenced by the appropriate operational characteristic of the IT structure, contained in the list of operational characteristics returned by the getOperationalCharacteristics( ) method). For example, operational characteristic INCIDENT_RESPONSE_TIME(&lt;time&gt;) may be defined. The IT structure may have the INCIDENT_RESPONSE_TIME operational characteristic with the value of 5 min, indicating that an error incident must be handled no slower than 5 minutes from its occurrence. The IT delivery environment may have a standard policy of handling incidents, with the rule being that error incident handling will not exceed 30 minutes from the time of occurrence. In this case, the IT structure imposes a more stringent incident handling requirement than the IT delivery environment can provide and the verification test of step  6038  will accordingly fail.
 
2. Verifying that the expected monthly number of incidents in the IT Structure multiplied by Data Center incident response time does not exceed the maximum permitted monthly down time (as evidenced by the appropriate operational characteristic of the IT structure, contained in the list of operational characteristics returned by the getOperationalCharacteristics( ) method). For example, the IT structure being verified may have the operational characteristics AVAILABILITY (99.9%) and MAX_NUMBER_OF_INCIDENTS (5/month). The IT delivery environment has the operational characteristic INCIDENT_RESPONSE_TIME (5 min). Assuming that any incident equates to downtime (or unavailability), this means that the number of incidents per month cannot exceed 8 (i.e., (1.000−0.999)×30 days/month×1440 minutes/day÷5 minutes/incident), and the IT structure complies with the IT delivery environment. If, however, the IT delivery environment had the INCIDENT_RESPONSE_TIME operational characteristic value of 30 minutes, then the IT structure being verified would not be able to maintain 99.9% availability and the maximum expected number of incidents of 5 per month, resulting in failure of the test of step  6038 .
 
     Thus, step  6038  verifies that the IT structure does not have incident response requirements that cannot be fulfilled by the IT delivery environment. If the verification of step  6038  is successful (i.e., no violations found) as determined in step  6039 , the process terminates successfully (indicating that the IT structure is compliant with the IT delivery environment), otherwise, an error is indicated (step  6040 ) and the process terminates. 
     6. Relationship of Component Business Model and IT Model and Its Applications 
     6.1 Component Business Model 
     The Component Business Model (CBM) Methodology provides business practitioners a unique opportunity to examine the organizational, structural and operational aspects of an entire business. Its initial goal is to construct a straightforward and simplified view of a business, decomposing key business areas into Business Components that represent discrete and partitioned business units. 
     A business component is a group of cohesive business activities supported by processes, appropriate information systems, organization structure and associated performance measures. Each component serves a unique purpose and collaborates with other components within the business model, using agreed cost and service levels. Thus, Component Based Model accomplishes:
         Find sensible groupings of tightly coupled activities that can be optimized as a unit (business components).   Understand and optimize how these business components work together through a network of information exchange and control, to collectively meet the needs of the business.       

     Business components are laid across a matrix consisting of three rows and N columns, forming what is called a CBM map. The rows represent three Accountability Levels: (direct, control and execute); while the columns represent Business Competencies—large areas or slices of a business&#39;s function. The business components within a column aggregate to provide services that support the business competency. An illustration and definition of the basic elements of a business component map are provided in  FIG. 39 . 
     A CBM analysis map can reveal many insights into a business. By comparing a CBM map to an existing organization, a business can easily identify areas where business activities are duplicated and where areas of activity are missing and required. Eliminating duplicated components the enterprise can lead to significant improvements in efficiency, performance and differentiation. From a business competency point of view, the CBM map can identify where functional groups are discordant and poorly organized. 
     The structure of a CBM Map, with its organized matrix of business components, holds potential for a deeper level of business analysis that can reveal conditions about the business that can yield significant improvement of the business, over and above its basic organization. To accomplish this, various evaluation criteria may be applied to the components of an established CBM map, which can highlight areas of business comfort or concern. By mapping these evaluative criteria against the framework of a known CBM map, the evaluation is visually apparent in a context that is clearly understood by business managers and executives. These values can be distinguished as color attributes of components within the CBM map, making it easy to identify areas and patterns of concern. For example, evaluation of components based on target competencies of base, competitive and differentiated can reveal key components that significantly contribute business value, while other components can be identified as having to have less value, inefficiently draining recourses and attention form the primary pursuits of the business. These components may be suitable for outsourcing, elimination, or modification.  FIG. 40  illustrates application of evaluation criteria to CBM map. 
     CBM enables various analytic techniques that facilitate an understanding of the business on a per component basis. These results are used to make critical business decisions and can provide information and evaluative criteria on the management of the IT infrastructure and portfolio. This information includes: 
     Total Cost of Ownership (TCO or C): The total cost of ownership of a given business component is essentially the sum of all costs and expenses, in monetary units, the business must pay to keep the component operational. This includes a wide range of operational activities and costs such as: labor, maintenance, facilitates overhead, utilities, hardware and software expenses, licensing and so on. Costs may be obtained by extracting data from various human, application and database sources and correlating them to business components, and more granularly, to specific elements within the component that perform work, such as hardware and software. 
     Business Value (V) of Business Components: The value of the business component is the calculated economic benefit that the business component delivers to the enterprise, expressed in monetary units. This can include: direct revenue, indirect or drag revenues, efficiency savings, value-added benefits and goodwill. Business value may be obtained by extracting data from various human, application and database sources and correlating them to business components. 
     Functional and Operational Characteristics from Business Components: Each component within a CBM provides some of the business value that is enabled by human or automated resources. These resources possess various operational characteristics and must meet the functional objectives that are set by the business. Evaluative techniques employed by CBM gather and measure information on the functional and operational characteristics, such as performance, availability, usability, maturity levels, etc. This is achieved by extracting data from various human, application and database sources and correlating them to business components. 
     6.2 Relating CBM and IT Model 
     CBM presents means of business modeling and optimization at the business structure level. Establishment of a relationship between CBM and the IT model described supra, presents several advantages described below. 
     Because CBM operates purely within the realm of business structures, and because IT modeling is agnostic of business processes, the following problems arise: 
     1. CBM has no way of relating business benefit to associated IT expenses, while IT has no way of relating its expenses to business benefit 
     2. CBM has no way of assessing impact of changes in the business model on IT 
     3. IT optimization outside of business context may lead to overextension of IT constructs, resulting in reduced business flexibility of IT. 
     Establishment of a relationship between CBM and IT model, and thus gaining an understanding of which IT structures in the IT model support which business entities in CBM, as illustrated in  FIG. 41 , makes it possible to overcome the problems stated above. 
     A Component Business Model map ( 7001 ) represents a business enterprise as a collection of business components. A business component ( 7004 ) is a part of an enterprise that has the potential to operate independently, in the extreme, as a separate company, or as a part of another company. Thus, business components are autonomous, self contained pieces of the business, encapsulating the people, processes and technology needed to accomplish their purposes. Business competencies ( 7003 ), represented as the vertical columns, are defined as significant business areas with characteristic functions, skills, capabilities and resources that are organizationally related. Accountability levels ( 7002 ), represented as the horizontal rows, crossing business competencies, embody the operational responsibility (direct, control and execute). Business components are placed within the juncture of appropriate competency and accountability level. 
     The analytic techniques and methods of the Component Business Model enable the identification and specification of various capabilities and aspects of the business. CBM analysis provides information on business costs, value and functional and operational requirements of business components. 
     The IT Model (7005) is a collection of IT structures ( 7007 ) and their operational instances and a set of IT relationships and IT dependencies ( 7008 ) among these IT structures, existing in support of 
     Relationships ( 7006 ) between business components and IT structures within the IT model can be established using the business classes described below. 
     6.2.1 businessComponent and Business Classes 
     A business component is a part of an enterprise that has the potential to operate independently, in the extreme, as a separate company, or as a part of another company. Class businessComponent is defined, representing a business component, and characterized, in addition to any other characteristics, by Level of Accountability and Business Competency, as defined in CBM. Thus, a CBM is a collection of businessComponent objects representing all business components of an enterprise. 
     Class businessComponent, among its other properties and methods, includes methods: 
     1) setITStructures(Vector ITS)—sets the list of IT structures supporting this business component. 
     2) Vector getITStructures( )—returns the list of IT structures supporting this business component. 
     3) Int getBusinessValue( )—returns the business value of a business component, expressed in monetary units (e.g., U.S. dollars) per time period (e.g., one year). 
     4) Vector getFunctions(ITStructure S)—returns functional characteristics. for ITStructure S, as required by this businessComponent. 
     5) setFunctions(ITStructure S, Vector F)—sets functional characteristics for ITStructure S, as required by this businessComponent; Vector F contains the list of functional characteristics. 
     6) Vector getOperationalCharacteristics(ITStructure S)—returns operational characteristics for ITStructure S, as required by this businessComponent. 
     7) setOperationalCharacteristics(ITStructure S, Vector C)—sets operational characteristics for ITStructure S as required by this businessComponent; Vector C contains the list of operational characteristics. 
     8) Vector getResolutionValues(ITStructure S)—returns resolution values for ITStructure S, as required by this businessComponent. 
     9) setResolutionValues(ITStructure S, Vector T)—sets resolution values for ITStructure S, as required by this businessComponent; Vector T contains resolution values. 
     Class Business is defined, comprising a Vector of businessComponents, in addition to any other properties and methods. 
     6.3 Relating Business Value to IT Costs 
     Business value of businessComponent instances is known. TCO (total cost of ownership) of ITStructure instances supporting businessComponent instances by CBM is either known (measured) or can be calculated. 
     Thus, for every pair P=(businessComponent, &lt;list of supporting ITStructure instances&gt;), where the list of supporting ITStructure instances is obtained using the businessComponent method getITStructures( ), the pair of values (business value, cost) is known. In the case of a single IT structure instance supporting multiple businessComponent instances, the TCO apportionment to each businessComponent supported is accomplished either by measurements (based on actual usage of this ITStructure instance by each businessComponent instance), qualitatively (i.e., by observation of IT structure usage), or prorated in a particular proportion, e.g., in proportion of businessComponent business value, as returned by the getBusinessValue( ) method. 
     This permits: 
     1. Identification of P with cost (C) exceeding value (V), i.e., C/V&gt;1. 
     2. Temporal trend analysis of cost/value (C/V) ratio of P and prevention of C/V&gt;1. 
     People skilled in the art will understand that instead of the ratio C/V, a ratio V/C, a difference C-V, or a difference V-C may be considered to obtain the same results. 
     The present invention generally discloses a method for managing a business. The method determines at least one relationship between N business components (B 1 , B 2 , . . . , B N ) and respective N costs (C 1 , C 2 , . . . , C N ) and respective N values (V 1 , V 2 , . . . , V N ) pertaining to the N business components. The N business components are a subset of M business components (B 1 , B 2 , . . . , B M ) of a Component Based Model (CBM) of the M business components subject to M≧2 and N≦M. In one embodiment, M&lt;N. In another embodiment, M=N. Determining the at least one relationship comprises relating business components of the CBM with an IT model of an IT system, wherein the IT model comprises IT structures selected from the group consisting of abstract IT structures, virtual IT structures, real IT structures, and combinations thereof. 
     Determining at least one relationship may comprise determining the N costs and the N values existing at a specified time or at specified K sequentially ordered times (T 1 , T 2 , . . . , T K ) subject to K≧2. Said relating business components of the CBM with the IT model may comprise at least one of: generating a list of IT structures supporting the N business components, generating a list of business components supported by IT structures in the list of IT structures, and determining the N values at the specified time or at the specified K sequentially ordered times including identifying the value of each business component of the N business components. 
     The determined at least one relationship may be displayed, such as on a computer screen, by being printed, etc. In addition, the determined at least one relationship may be stored in at least one defined IT structure of the IT system. 
     Next described are embodiments for determining said at least one relationship in accordance with the present invention. 
     6.3.1 Identification of Business Components with C/V&gt;1 
       FIG. 42  provides an example of determining the N costs and the N values existing at a specified time for the purpose of computing and analyzing C/V for the N business components. 
       FIG. 42  is a flow chart comprising steps  7010 - 7024  of a process which describe identification of business components with C/V&gt;1 at a specified time. Step  7010  initiates the process for the given business B. 
     Steps  7011 - 7023  loop over the business components b of the business B. In step  7011 , the process takes the next business component b from the list of business components comprised by B. Next, step  7012  retrieves the list S of IT structures supporting the business component b, using method getITStructures( ) of the businessComponent class. Variable C is used to accumulate the TCO value for IT structures supporting business component b. C is initially set to zero in step  7013 . 
     Steps  7014 - 7019  loop over the IT structures s in the list S of IT structures obtained in step  7012 . Step  7014  takes the next IT structure s from the list S of IT structures supporting business component b. In step  7015 , variable c is set to the TCO of s, using the method getTCO( ) of ITStructure class. 
     Step  7016  determines if IT structure s supports more than one business component (i.e., s supports business components other than b), as ascertained by reviewing the size of the Vector returned by the getBusinessComponents( ) method of s. If it is determined in step  7016  that IT structure s does not support more than one business component, then step  7018  is next executed. 
     If it is determined in step  7016  that IT structure s supports more than one business component, then c is reduced to include only the pertinent portion of TCO attributed to b  7017 . This reduction can be performed either by prorating the value of c based on the number of business components supported by IT structure s, or by retrieving appropriate value from a business system keeping track of cost data (assuming such system has a way of attributing tracked cost data of IT structure s to a particular business component s supports), or by some other qualitative method. For example, a convention may be established in which TCO of an IT structure supporting multiple business components is attributed to each component in proportion to the amount of investment in development of that IT structure on behalf of each business component supported. 
     In step  7018 , the process then adds c (which is the TCO of s or pertinent portion thereof) to the TCO accumulator C. Step  7019  determines if the list S contains more elements (i.e., there are more IT structures supporting b). If step  7019  determines if the list S contains more elements, then the process loops back to step  7014  to process the next IT structure in the list S. Otherwise, step  7020  is next executed. 
     In step  7020 , the process retrieves the value V of b, representing the business value of business component b to the business B, as obtained from the method getBusinessValue( ) of businessComponent class. It is assumed that the value V is &gt;0, as each business component is assumed to have a value for the business. People skilled in the art will understand that, in reality, some business components may have a 0 or even negative business value, representing a cost of doing business (e.g., a business component performing tax computation brings no value to the business itself, but is a necessity or is carried nonetheless), and the described method can be extended to account for such values of V. 
     Step  7021  determines if the ratio C/V is greater than 1 (i.e., business component b value is less than the TCO of its IT support). If step  7021  determines that C/V is greater than 1, then step  7023  is next executed. Otherwise, step  7022  adds the business component (and, for convenience, associated information, including the list of supporting IT structures S, the value C, the value V, and the ratio C/V) to the list of business components with cost exceeding value (i.e., with C/V&gt;1). 
     Step  7023  determines if there are more elements in B to process (i.e., more business components exist). If step  7021  determines that there are more elements in B to process, then the process loops back to step  7011  to process the next business component b of the business B. Otherwise, the process completes in step  7024  by returning the list of business components with cost exceeding value (i.e., C/V&gt;1), which may be formatted in a report. 
     Once identified, each business component with cost exceeding value may be analyzed (analysis may include both business and IT aspects), and appropriate actions may be taken to improve the C/V ratio of said each business component having C/V&gt;1 as well as of any other business component. 
     The preceding description of  FIG. 42  provides an example of determining the N costs and the N values existing at a specified time for the purpose of computing and analyzing C/V for the N business components, namely for determining those business components characterized by C/V=1 at a specified time. More generally, the present invention discloses a method for determining selected business components of the N business components subject to satisfying a condition at the specified time. The condition may be C&gt;|R MIN *V| such that R MIN  is a real positive number.  FIG. 42  embodies the preceding condition such that R MIN =1. The condition may alternatively be C&lt;|R MAX *V| such that R MAX  is a real positive number. The condition may alternatively be |R MIN *V|&lt;C ≦|R MAX *V| subject to R MIN &lt;R MAX . 
     6.3.2 Identification of Business Components with C/V Increasing 
       FIG. 43  provides an example of determining the N costs and the N values existing at specified K sequentially ordered times including identifying the value of each business component of the N business components. 
       FIG. 43  is a flow chart comprising steps  7025 - 7032  of a process which identifies business components having increasing cost-to-value (C/V) ratio. Step  7025  initiates the process for given business component b. In step  7026 , the process determines the C/V ratio for the business component b in a manner analogous to that described in  FIG. 42 . Step  7026  also stores the C/V value for b as R 1 . 
     In step  7027 , the process then waits for a predetermined time period (usually, corresponding to a financial cycle of the business—e.g., a quarter, a year), during which time a new value for the C/V ratio is obtained and stored as R 2 . Step  7029  compares the values R 1  and R 2 , and if R 2  is not greater than R 1 , then step  7032  is next executed. If R 2  is greater than R 1 , then step  7030  adds b to the list of business components with increasing C/V ratio, and this list will be included in the corresponding report in step  7031 . Step  7032  sets R 2  to R 1  and loops back to step  7027 . 
     People skilled in the art will understand that not only the fact of the increase of the C/V ratio, but also the rate (speed) of the increase of the C/V ratio may be determined, thus permitting to extrapolate the time of the C/V ratio reaching or passing the value of 1. People skilled in the art will also understand that a composite C/V ratio of the whole business, rather than that of its components, may be considered. 
     Early identification of business components with increasing C/V ratio permits proactive management of IT expenses, e.g., as a part of IT investment prioritization. 
     The preceding description of  FIG. 43  provides an example of determining the N costs and the N values existing at specified K sequentially ordered times (T 1 , T 2 , . . . , T K ) subject to K&gt;2 for the purpose of computing and analyzing the time dependence of C/V for the N business components in relation to the specified K sequentially ordered times.  FIG. 43  describes an embodiment for identifying business component having increasing C/V between two successive times. More generally, the present invention discloses a method for determining business components of the N business components for which C/V increases from T k  to T k+1  for k=1, 2, . . . , K−1. The present invention also discloses a method for determining business components of the N business components for which C/V decreases from T k  to T k+1  for k=1, 2, . . . , K−1. The present invention also discloses a method for determining business components of the N business components for which C and V satisfy R MIN *V|≦C≦|R MAX *V| at each time of the K sequentially ordered times, and wherein R MIN  and R MAX  are specified positive real numbers subject to R MIN ≦R MAX . 
     6.4 Impact of Changes in the Business Model on IT 
     Once changes in the business model are performed, the impact of these changes on supporting IT structures, including cost of change, and resulting change in IT structure TCO, can be derived by: 
     1. Removing now superfluous IT structure(s) when business model no longer requires a particular IT function 
     2. Adding new IT structure(s) in support of functions required by the business model 
     3. Changing functional, operational, or other characteristics (resolution values) of IT structure(s) supporting changing elements of the business model 
     while in all cases assessing the IT cost impact. Thus, assessment of C/V ratio value and its change for each P becomes possible from the model, and the impact of change from P 1  to P 2 , resulting in change from C 1 /V 1  to C 2 /V 2 , can be assessed. 
       FIG. 44  is a flow chart of a process which describe assessment of impact and implementation of a business change in supporting IT. Step  7033  initiates the process for given business B that is changing. The pertinent possibilities for change in the business B are: a business component has been removed (beginning at step  7035 ), a business component has been added (beginning at step  7036 ), or a characteristic (functional, operational, etc.) of an existing business component has changed (beginning at step  7043 ). 
     In accordance with the first possibility of a change occurring in the business B, step  7034  determines whether a business component b is being removed. If step  7034  determines that a business component b is not being removed, then step  7038  is next executed. Otherwise, step  7035  is next executed to initiate implementation of removal of the business component b. 
     In step  7035 , the process obtains the list S of IT structures supporting the business component b, using the getITStructures( ) method. Step  7037  then takes the next IT structure s from list S, and step  7040  removes the business component b from the list of supported businessComponents of s, using the getBusinessComponents( ) and setBusinessComponents( ) methods of the IT structure s. 
     Now that b has been removed from the list of business components that IT structure s supports, step  7042  checks whether the IT structure s supports any business component. If step  7042  determines that s does not support any business component (i.e., getBusinessComponents( ) returns a null value), then s is assumed to be no longer necessary and is slated for sunset (decomissioning) in step  7045 , followed by execution of step  7049 . If step  7042  determines that s supports at least one business component, then step  7054  is next executed. 
     Step  7054  obtains functional and operational characteristics, and resolution values of IT structure s required by business component b (using getFunctions( ), getOperationalCharacteristics( ). Step  7055  uses getResolutionValues( ) methods of businessComponent b to remove any functional or operational characteristics, or resolution values requirements that are unique to b (i.e., not required by any other business components supported by IT structure s) from the lists of functional and operational characteristics and resolution values of IT structure s. This may involve retrieving functional and operational characteristics and resolution values required by other business components supported by s and comparison of those retrieved retrieving functional and operational characteristics and resolution values with the corresponding characteristics required by b—not shown in  FIG. 44 ). 
     Step  7056  determines if any functional or operational characteristics or resolution values of IT structure s have changed as a result of removal of characteristics requirements unique to business component b. If step  7056  that any functional or operational characteristics or resolution values of IT structure s have not so changed, then step  7049  is next executed. Otherwise, IT structure s is translated and delivery bound in step  7057 , using the processes described supra, resulting in changes to the operating instance of s. The reason for translating IT structure s is that since some characteristics (functional, operational, or other) of IT structure s have changed as a result of removal of requirements unique to business component b, it is reasonable to expect that translation of IT structure s will result in TCO being not greater than the TCO of the previous instance of IT structure s. Note that because functional and/or operational characteristics and/or resolution values of IT structure are being removed or relaxed, but not added or made more stringent, no development of s will be required, and the changes are going to always be technically feasible. Therefore no checks for success of translation and delivery binding are performed. For example, assume that IT structure s 1  supports business components c 1  and c 2 , and business component c 1  is being eliminated. Assume that business component c 1  requires high availability, while business component c 2  does not. As a result of the high availability requirement for business component c 1 , IT structure s 1  includes in its composition a number of redundant components, which will no longer be required if the support of c 1  is removed. As a result, translation of IT structure s 1  with removed high availability operational characteristics will produce a cheaper virtual or real IT structure than the currently existing virtual or real IT structure, This cheaper virtual or real IT structure no longer includes IT structure composition elements that support redundancy for high availability. 
     Step  7049  determines if the list S of IT structures supporting business component b comprises more elements. If step  7049  determines that the list S of IT structures supporting business component b comprises more elements, then the process loops back to step  7037  to process the next IT structure from the list S. Otherwise, the process step  7053  assesses the impact of this change on C/V (in this case, of the whole business B, since business component b has been removed from B), followed by completion of the process. 
     In accordance with the second possibility of a change occurring in the business B, step  7038  determines whether a business component b is being added. If step  7038  determines that a business component b is not being added, then step  7039  is next executed. Otherwise, step  7036  is next executed. 
     Step  7036  obtains IT functional and operational characteristics, and resolution values newly added business component b, using methods getFunctions( ), getOperationalCharacteristics( ), and getResolutionValues( ) of b. Step  7041  then creates an abstract IT structure A, providing abstract IT structure A with the previously obtained functional and operational characteristics and resolution values by means of setFunctions( ), setOperationalCharacteristics( ), and setResolutionValues( ) methods of A. Step  7044  translates and delivery-binds Abstract IT structure A, using the processes described supra, which eventually results (possibly, after manual intervention by an IT developer) in a real IT structure s being deployed in the appropriate IT delivery environment. For example, assume that the new business component b is Customer Relationship Management (CRM). Then IT structure A would be an abstract IT structure with the appropriate operational characteristics, and with the functional characteristics of CRM, resulting in, e.g., translation of abstract IT structure A into a Siebel CRM solution. 
     Step  7058  determines if translation and delivery binding of IT structure A in step  7044  was unsuccessful. A determination by step  7058  that translation and delivery binding of IT structure A was not unsuccessful may mean that, while technically feasible, extensive development of novel IT structures and/or software is required in support of the addition of business component b (as inferred by an IT developer from error messages resulting from the translation or delivery binding attempt). Then with the translation and delivery binding of IT structure A not being successful, step  7060  assesses the development effort cost and duration, and step  7061  estimates the TCO of A based on the best possible translation (although A may not have been fully translated or delivery bound, it is possible that an intermediate level of abstraction for A was derived, and, if so, it could be grounds for TCO estimation). Then step  7053  reviews the business case for the introduction of business component b, which includes review of the cost and time of technical implementation determined in step  7060 , estimated TCO determined in step  7061 , as well as some enterprise-specific criteria for determination of acceptable return-on-investment (ROI). For example, an enterprise may impose a rule requiring that any enhancement benefit must be realized in the first three years of exploitation, or, alternatively, within three years since commencement of investment. Once a business case is constructed via step  7053 , the process completes. 
     As an example, assume the new business component b is CRM, and multiple readily available CRM solutions exist on the market, of which the translator is unaware (because IT structures for these products are not in its library). The IT developer would have to obtain IT structure sources for these products or perform technical investigation of the characteristics of the available CRM solutions and produce IT structure specifications for them, which may, possibly, involve hands on testing effort and performance benchmarks of different solutions, in order to select the appropriate one. The effort of selecting the appropriate CRM solution may be sizeable and require several months of time to complete. The cost and duration of this effort would have to be considered as a part of the business case. For example, the new business component b is CRM, but no readily available CRM solutions exist on the market, or any solutions that exist do not satisfy the unique needs of this enterprise (which is likely also determined as a result of a technical investigation). The only possibility is implementation of a CRM solution in-house, which is estimated to require a team of 11 programmers and testers, and a project manager, and take 12-14 months to implement. The cost and duration of the in-house implementation effort for CRM would have to be considered as a part of the business case. 
     Alternatively, if based on examining error messages from translation or delivery binding, then step  7059  determines (e.g., by the IT developer) that no amount of development will result in a technically workable IT support of business component b, then the IT support of business component b would be deemed technically unfeasible in step  7062 , and the process terminates. Determination of technical unfeasibility of IT support of business component b would result in review of business assumptions and, possibly, a negotiation between the appropriate business and technical personnel about functionality and/or operational characteristics and/or resolution values required by business component b. For example, assume the new business component b is CRM, and Siebel CRM is readily available on the market, and would satisfy all but one (requirement R) functional requirements of business component b. The one functional requirement R not satisfied by Siebel CRM is such that no modification or customization of the Siebel CRM software package will satisfy R, as stated in the list of restrictions in the Siebel CRM software package documentation. The IT developer would inform the business owner of b about this, and present a choice of: abandoning requirement R, relaxing requirement R (assuming it is possible) to bring it within the realm of technical feasibility, or investing in a highly expensive effort of a custom implementation of CRM that would satisfy the requirement R and all the other functional and operational requirements of business component b. 
     If step  7058  determines that translation and delivery binding of A was successful in step 7044 , then step  7046  adds IT structure s to the list of IT structure instances supporting businessComponent b, using the setITStructures( ) method of b, and step  7050  adds business component b to the list of business components supported by IT structure s, using the setBusinessComponents( ) method of s. Then step  7053  assesses the first impact of this change on the C/V of the business component b on the business B, followed by completion of the process. 
     In accordance with the third possibility of a change occurring in the business B, a change to business B may mean not an addition or removal of a business component, but a change to an existing business component b included in B, as inferred by default from a determination in steps  7034  and  7038  that a business component b has not been removed or added. For implementation of this third possibility of change to an existing business component b included in B, step  7039  checks whether any of the functional or operational characteristics, or resolution values required by b have changed, using the getFunctions( ), getOperationalCharacteristics( ), and getResolutionValues( ) methods of businessComponent b. If step  7039  determines that none of the functional or operational characteristics, or resolution values required by business component b have changed, then the process assumes that the change to business component b has no impact on IT support of b and terminates. Otherwise, step  7043  is next executed. 
     Step  7043  retrieves the list S of IT structures supporting business component b  7043 . Step  7047  takes the next IT structure s from the list S. Step  7048  retrieves the list of functional and operational characteristics and resolution values required by business component b of IT structure s  7048 , by means of getFunctions(s), getOperationalCharacteristics(s), and getResolutionValues(s) methods, specifying s as the input parameter to the method in every case. Step  7051  translates and delivery-binds IT structure s, using the processes described supra, resulting (possibly, after a manual intervention by an IT developer) in a changed operating instance of IT structure s in the appropriate IT delivery environment. 
     Step  7063  determines if translation and delivery binding of IT structure s in step  7051  was successful If step  7063  determines that and delivery binding of IT structure s was successful, then step  7052  is next executed. 
     If step  7063  determines that and delivery binding of IT structure s was unsuccessful, this may mean that, while technically feasible, extensive development of novel IT structures and/or software is required in support of the addition of business component b (as inferred by an IT developer from error messages resulting from the translation or delivery binding attempt). If technically feasible as determined in step  7064 , the development effort cost and duration would be assessed in step  7065  and the TCO of s would be estimated based on the best possible translation in step  7066  (although s may not have been fully translated or delivery bound, it is likely that an intermediate level of abstraction for was derived, and, if so, it could be grounds for TCO estimation). Then step  7052  is executed. 
     Alternatively, if based on examining error messages from translation or delivery binding, the IT developer determines in step  7064  that no amount of development will result in a technically workable IT support of changed functional and/or operational characteristics or resolution values required by business component b, then the IT support of this change to business component b would be deemed technically unfeasible in step  7062 , and the process terminates. Determination of technical unfeasibility of IT support of the changes to business component b would result in review of business assumptions and, possibly, a negotiation between the appropriate business and technical personnel about functionality and/or operational characteristics and/or resolution values required by business component b. 
     Step  7052  determines if there are more IT structures in list S supporting business component b, and if so the process loops back to step  7047 . Otherwise, step  7053  assesses C/V impact of this change or construction of the business case, if development is required, followed by completion of the process. Note that translation and delivery binding of IT structure s with changed functional and operational characteristics and resolution values is performed under the assumption that IT structure s is not overextended, and only supports the single business component b. If s supports other business components, it may be necessary to either consolidate the required functional and operational characteristics and resolution values of business component b with the corresponding characteristics of other business components prior to translating and delivery binding of s, or, alternatively, create a separate operating instance of s which is no longer overextended, and only supports business component b. 
     The above process of  FIG. 44  may or may not include actual deployment of changed IT structures. If deployment is not performed, the above process is restricted to assessment of impact of changes to a business model on supporting IT. If deployment is performed, the above process includes both the assessment of impact of changes to a business model on supporting IT, and enactment of these changes in IT. 
     6.5 Identifying and Preventing Overextension of IT Structures 
     An IT structure is overextended if it supports multiple business components. For example, overextension occurs when a system that was created to serve a specific business purpose is extended to support other, perhaps related, business purposes. For example, a system designed to adjudicate healthcare insurance claims may be extended to support the processing of medical encounters which cover aspects of care management. Thus, the system spans two business components—Claims Adjudication and Care Management. An overextended system becomes less flexible and eventually becomes prohibitively expensive to modify beyond a point. Therefore, it is advantageous to the business to identify and eliminate cases of overextension. 
     Overextension of IT structures is identified by examining the number of entries in the Vector of supported business components returned by the IT structure method getBusinessComponents( ). If the Vector of business components returned by the getBusinessComponents( ) method contains more than a single element (i.e., more than one business component is supported by this IT structure), the IT structure is overextended. 
     Overextension of IT structures can be prevented by the translation process described supra. In order to accomplish it, the translation process, prior to commencement, will check whether the IT structure provided it as input is overextended, and if so, will issue a warning message to the IT developer. 
     Further, assume the translation process detects that IT structure A is overextended and supports two business components —C and C 1 . Upon detecting overextension, the translation process may create a separate instance of the IT structure A, called A 1 , and adjust the IT structures A and newly created IT structure A 1  to support business components C and C 1  respectively (also, possibly, adjusting the list of supporting IT structures of business components C and C 1  using the getITStructures( ) and setITStructures( ) methods of business components C and C 1 ). The translation process would then adjust functional and operational characteristics and resolution values of IT structures A and A 1  to correspond to unique functional and operational characteristics and resolution value requirements of business components C and C 1  (as determined by using methods getFunctions( ), getOperationalCharacteristics( ), and getResolutionValues( ) of business components C and C 1 ), and alert the IT developer by an appropriate message. 
     7. Optimization of Aspects of IT Structures 
     This section relates to optimization of aspects of an IT structure. The “target IT structure” is the IT structure having one or more aspects to be optimized by the methodology described in this section. The target IT structure may be a real IT structure or a virtual IT structure. An IT structure element, or an element of an IT structure, is defined herein as an element of an IT structure primitive composition. The target IT structure may comprise a plurality of IT structure elements. For embodiments in which aspects of an IT structure are optimized, each IT structure element may independently be a hardware element, a software element, or a combination of a hardware element and a software element. An aspect of the target IT structure may be optimized with respect to at least one control parameter, each control parameter having a value that is specific to each element of the target IT structure. 
     If the elements of the target IT structure are software elements (i.e., software programs), the response time of the target IT structure is the weighted sum of the response times of the software programs included in the IT structure along a selected transaction path. The response time of a software program is the average time of a request for processing by the program (e.g., the average time elapsed between the request and the corresponding response, as measured by the request&#39;s originator). Any protocol-specific communications taking place at the protocol level below the application-level protocol, are not included into the response time (e.g. response to a handshake is not a “response” for the purposes of response time calculation). 
     A transaction path is a sequential series of requests and responses from one IT structure element to another, with alternate parallel paths allowable. The sequential series of requests and responses transaction defining the transaction path may be triggered by a user request. For example, for a simple IT structure comprising a front end firewall, a web server, a business tier firewall, an application server, a data tier firewall, and a database server. The transaction path traverses all of the preceding IT structure elements in the above listed order. More specifically, the transaction path for this example encompasses the following six steps: 
     Step 1: an http request R 1  is coming in over the network from the end user&#39;s browser, through the front end firewall to the web server; 
     Step 2: the web server parses the request R 1  and forwards the parsed request R 1  over the network, through the business tier firewall to the application server; 
     Step 3: the application server processes the parsed request R 1  and generates another request R 2  which it sends over the network through the data tier firewall to the database server; 
     Step 4: the database server processes the request R 2 , generates a response Rsp 2  and sends the response Rsp 2  over the network through the data tier firewall to the application server; 
     Step 5: the application server receives the response Rsp 2 , generates. a response Rsp 1  and sends the response Rsp 1  over the network through the business tier firewall to the web server; and 
     Step 6: the web server forwards the response Rsp 1  over the network through the front end firewall to the end user&#39;s browser. 
     The response time of the preceding IT structure with respect to the indicated transaction path includes the following five response times. The first response time is from the beginning of step  1  to the forwarding of the parsed request R 1  in step  2 . The second response time is from the forwarding of the parsed request R 1  in step  2  to the sending of the request R 2  in step  3 . The third response time is from the sending of the request R 2  in step  3  to the sending of the response Rsp 2  in step  4 . The fourth response time is from the sending of the response Rsp 2  in step  4  to the sending of the response Rsp 1  in step  5 . The fifth response time is from the sending of the response Rsp 1  in step  5  to the receiving of the response Rsp 1  in the end user&#39;s browser. 
     Since more than one type of transaction is possible for any given IT structure, the IT developer must select the transaction path among the possible transaction paths, for the purpose of optimizing the target IT structure. The selected transaction path for the target IT structure may be, inter alia, a typical or frequently used transaction path. 
     Response time is not defined for some classes of IT structure elements (e.g. uninterruptible power supply device). Elements of such classes are not normally to be included into the transaction path selected for the target IT structure, but if elements of such classes are included, the elements are assumed to have zero response time. 
     Availability of an IT structure is the product of the availabilities of the operants (i.e., elements, fragments, or a group of functionally equivalent fragments as defined infra) of the IT structure along the transaction path that has been selected. Availability of an IT element is the percentage of time that the element is up and operational, capable of performing its intended function. Any dependencies upon other IT elements should be ignored in calculating a single IT structure element&#39;s availability, since those dependencies will be accounted for in calculating availability of the IT structure comprising all the elements of the IT structure. 
     The weight coefficients applied to the response time of the software IT structure elements may be introduced to reflect the presence of load balanced group of servers (as explained infra) and other IT structure fragments (i.e., other sets of IT structure elements) where the selected transaction path for the IT structure can be varied at run time, since the transaction path can traverse any one of the equivalent IT structure fragments, e.g. a user request can be routed by a load balancer to one of the several load balanced servers, based upon the actual load on the servers. Alternatively, the weight coefficients for the response time may be chosen to selectively reflect differences in the IT structure elements (e.g., the frequency of use of the IT structure elements, the dependencies upon the IT structure elements, the TCOs of the IT structure elements, etc.). 
     Optimization of the target IT structures may be with respect to Total Cost of Ownership (TCO), response time, or availability, or with respect to any other aspect of the target IT structure. The TCO of an IT structure instance may be expressed as the sum of TCOs of all the elements comprising the IT structure instance, including hardware, software, and labor (operations and support). The TCO, response time, and availability may independently be optimized, be included in a constraint affecting the optimization, or have no effect on the optimization. 
     Class ITOptimizer embodies an optimize( ) function that optimizes an aspect of the target IT structure and could be applied to a virtual or real IT structure, and further embodies properties and methods described herein. Class ITOptimizer includes the following methods and properties with respect to the target IT structure (i.e., the IT structure being optimized): 
     ITStructure s—returns the IT structure being optimized 
     ITStructure getITStructure( )—returns the IT structure being optimized 
     unsigned int getTCO( )—returns TCO of IT structure being optimized as an unsigned integer 
     unsigned int getResponseTime( )—returns response time of IT structure being optimized as an unsigned integer (response time is defined in the context of the IT structure being optimized) 
     double getAvailability( )—returns availability of IT structure being optimized (availability is defined in the context of the IT structure being optimized) 
     setTargetTCO(unsigned int t)—sets the target TCO value for IT structure being optimized 
     setTargetResponseTime(unsigned int seconds)—sets the target response time value for IT structure being optimized 
     setTargetAvailabilitu(double availability)—sets the target availability value for IT structure being optimized 
     virtual double getOptimtzationF(Vector p)—returns the value of the optimization goal function 
     protected Boolean IsSuccessful(void)—returns true if the optimization is successful and the optimization procedure should terminate 
     optimize( )—perform optimization of the target IT structure 
     7.1 Goal Function 
     public virtual double getOptimizationF(Vector p) calculates the value of the functional expression to be optimized (‘goal function’), which is defined on the instance of the target IT structure that has been previously specified (e.g., as the argument of the class constructor). The returned value of the goal function by getOptimizationF( ) is meaningful in the context of the goal function defined; i.e. cost in monetary units, application response time in seconds, dimensionless reliability, dimensionless availability, dimensionless synthetic value, etc. 
     Selection of the transaction path affects the response time of the IT structure, and hence may affect either the goal function (if the response time is part of the goal function; e.g., when the IT structure response time is being minimized), or optimization constraints (e.g., when the IT structure total cost of ownership is being minimized, provided that the response time remains better than a given value). 
     The goal function may be defined by the IT developer. Since, customarily, an optimzation problem is formulated so that the goal function is to be minimized, the optimizes method will seek to minimize the goal function. Hence, if a particular characteristic which is additively included into the goal function needs to be maximized rather than minimized in order to improve some aspects of the IT structure, then the corresponding addend should be multiplied by −1. For example, if the IT structure availability needs to be optimized, then the availability of the IT structure elements will be included into the goal function expression as their availability multiplied by −1 and the availability of the IT structure elements may each be optionally multiplied by a weight coefficient. 
     If the goal function is not defined on a particular instance of the target IT structure, then either NaN (“not a number” as defined in http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Double.html) value must be returned by the method or ITExceptionParametersOutsideDomain exception must be thrown (e.g., in a situation when a particular application cannot run on a computer platform specified, or local security policy gets violated by change in the connectivity diagram). 
     getOptimizationF( ) method is a callback method that will be invoked in the optimization procedure (e.g., in the optimization procedure of optimizes described infra in section 7.4) to calculate the value of the goal function. 
     To assist the IT developer in defining the expression to be minimized, the following helper methods are implemented within ITOptimizer class: 
     public unsigned int TCO getTCO(ITStructure s); 
     public unsigned int getResponseTime(ITStructure s); 
     public double getAvailability(ITStructure s); 
     In one embodiment, TCO of the IT structure will be optimized, e.g.: 
     public double getOptimizationF(Vector p) { 
     . . . 
     return(getTCO(s)); 
     } 
     The IT developer can use any combination of the values returned by the helper methods together with any other functional expressions defined for the target ITStructure, to build the goal function in order to define the implementation of getOptimizationF( ) method. 
       FIG. 46  is a flow chart comprising steps  8010 - 8016  to implement getOptimizationF( ) for determining the value of the goal function, which is defined on the instance of the target IT Structure (e.g., the target IT Structure that has been previously specified as the argument of the class constructor), with the values of the parameters of the goal function specified by the invoker. 
     Step  8010  of  FIG. 46  ascertains that all the parameter values are within their permissible values. If that is not true, then an appropriate exception is thrown in step  8011 . 
     Step  8012  assigns the parameter value to the appropriate elements of the IT Structure being minimized. 
     Steps  8013 - 8015  recalculate availability, response time, and TCO for every operant of the IT Structure being optimized, since the availability, response time and TCO of every operant of the IT Structure could have changed as the result of performing step  8012 . For some embodiments, response time, and TCO may not all be utilized for determining the value of the goal function in which case not all of steps  8013 - 8015  will be required to be executed. 
     Step  8016  calculates and returns to the invoker the value of the goal function. 
     7.2. Optimization Parameters 
     At least one optimization control parameter must be specified (e.g., by the IT developer). Each control parameter has a value that is specific to each element of the target IT structure. One or more optimization control parameters are selected from the set of externally modifiable properties of the elements comprised by the IT Structure being optimized. 
     For every parameter, its permissible values are specified. 
     Example: 
     
       
         
           
               
               
             
               
                   
               
             
            
               
                 public double getOptimizationF(Vector p) { 
                   
               
               
                 if( 
                   
               
               
                 (ITOptimizationParameter)p[0].min &gt; ITOptimizationParameter)p[0].value) || 
                 // line 3 
               
               
                 (ITOptimizationParameter)p[0].max &lt; ITOptimizationParameter)p[0].value) ) 
                 // line 4 
               
               
                 throw ITExceptionParametersOutsideDomain(“Invalid p[0] value”); 
                 // line 5 
               
               
                 s.Server[5].OS = (ITOptimizationParameter)p[0].value; 
                   
               
               
                 return(getTCO(s)); 
                   
               
               
                 } 
               
               
                   
               
            
           
         
       
     
     In this example, a single parameter is passed to the getOptimnizationF method as the first and only element of the parameters&#39; vector p. The parameter has the meaning of the operating system of Server5 within the IT structure being minimized. The getOptimizationF method substitutes the value supplied as the first element of the parameters&#39; vector p, for the operating system of Server5, and then calculates the IT structure&#39;s TCO using getTCO helper( ) method. Before performing any calculations, the parameters are ascertained to be within their allowed values (see lines 3-4 of getOptimizationF) and the appropriate exception is thrown if the verification was not successful (see line 5 in getOptimizationF). 
     In one embodiment, all the optimization control parameters are discrete. In one embodiment, all the optimization control parameters are continuous. In one embodiment, some of the optimization control parameters are discrete and some of the optimization control parameters are continuous. 
     7.3. Optimization Constraints 
     The optimization constraints are to be specified as “hard” or “soft” optimization constraints as follows. 
     Hard optimization constraints may be set by using one or more of the following setter functions (only those properties which are not used in the goal function definition can be assigned target values): 
     public void setTargetTCO(TCO maxTCO); 
     public void setTargetResponseTime(unsigned int maxSeconds); 
     public void setTargetAvailability(double minAvailability); 
     Example: setTargetAvailability(0.995); 
     Hard optimization constraints are those constraints which must be met under any circumstances even if the resulting value of the goal function would suffer significantly as a result of satisfying one or more hard constraints. 
     Soft optimization constraints may be implemented by incorporating the soft constraints into the goal function by adding to the goal function the difference between an expression and its desirable value, optionally multiplied by a weight factor; for example: 
                                public double getOptimizationF( ) {          return(getTCO(this-&gt;s)+(getAvailability(this-&gt;s)−0.95)*10.{circumflex over ( )}6);       }.                    
For optimization subject to at least one soft constraint, the at least one soft constraint may comprise a first soft constraint expressed in terms of a first parameter (P 1 ) and a specified desired value (P 01 ) of P 1 , wherein said optimizing comprises minimizing a goal function that comprises a sum of the aspect of the IT structure and the first soft constraint, and wherein the first soft constraint is a product of (P 1 -P 01 ) and a specified first weight coefficient. The at least one soft constraint may further comprises a second soft constraint expressed in terms of a second parameter (P 2 ) and a specified desired value (P 02 ) of P 2 , wherein the goal function comprises the second soft constraint added to the sum of the aspect of the IT structure and the first soft constraint, and wherein the second soft constraint is a product of (P 2 -P 02 ) and a specified second weight coefficient.
 
     The getOptimizationF method provides the means for specifying “soft” optimization constraints. In other words, where the optimization goal function would suffer significantly if a constraint were to be satisfied, a soft optimization constraint would instead produce a compromise with a better value of the optimization goal function, resulting in the goal function would not suffer significantly), but where the constraint value (i.e., the value of the expression embodying the constraint) is further from the specified target value (i.e., the desired value of the expression embodying the constraint). 
     In one embodiment, the choice of “soft” vs “hard” constraints is performed by the IT developer. Both approaches would work in most of the situations. A “hard” constraint will not work, in a situation when the specified target value cannot be reached (e.g. IT structure availability of 99.5% cannot be reached since the IT structure must include a hardware IT structure element with 99% availability which is unattainable). However, a “soft” constraint approach will still work in such a situation. Another example of a situation where a “soft” constraint approach is preferable is where the target value can be reached, but the corresponding value of the goal function is far from being optimal and can be significantly improved by a slight compromise in the target value of the constraint. For example, the TCO of an IT structure is being minimized with the constraint on availability required to be better than 99.5%. With 99.5% availability, however, the TCO of the IT structure would be $100,000. In contrast with 99.2% availability, a less expensive firewall device can be deployed thus reducing the TCO by $10,000 or 10%, thus making the “soft” constraint approach being preferable in this situation, unless the 99.5% or better availability is a requirement which must be satisfied literally at all costs. 
     The “softness” of the constraint can be adjusted by the weight factor. In the preceding example of public double getOptimizationF( ) {(getTCO(this-&gt;s)+(getAvailability(this-&gt;s) 0.95)*10.^6);}, the 10^6 weigh coefficient effectively prices each availability percent above 95% at $1, assuming that the IT structure TCO is in the million dollar range; i.e., $1 of TCO is traded for 1% of availability above 95% and vice versa. 
     7.4 Method Optimize( ) 
     public void optimizes, which is described in steps  8001 - 8006  of the flow chart of  FIG. 45  described infra, performs the optimization against the targetIT structure instance that has been previously specified (e.g., as the parameter of the class constructor). Method protected boolean isSuccessful(void) which can optionally be re-defined by the IT developer, returns true when the optimization procedure should be stopped (e.g., an acceptable value of the goal function has been reached) in step  8006 . If the is Successful method has not been overridden in the child class, the optimization procedure will rely upon its intrinsic (e.g., default) success criteria as defined in step  8005 . 
       FIG. 45  is a flow chart comprising steps  8001 - 8006  for determining values of control parameters to optimize the value of the goal function, in accordance with embodiments of the present invention. 
     Step  8001  of  FIG. 45  selects at least one control parameter from the set of the externally modifiable properties of the elements comprised by the IT Structure being optimized. 
     Step  8002  specifies permissible values for each control parameter of the at least one control parameter. The permissible values for each control parameter may independently be: a discrete set of values, at least one continuous range of values, or a combination thereof. 
     Step  8003  defines the optimization goal function as a function of the control parameters, optionally using one or more of the helper methods described infra. 
     Step  8004  defines zero or more optimization constraints, optionally using one or more of the helper methods described infra. 
     Step  8005  defines the optimization success criteria as a Boolean function which returns true if the optimization is successful and the optimization procedure should terminate. 
     Step  8006  determines the control parameters set which optimizes the goal function and may invoke the getOptimizationF( ) method. Alternative methods may be employed to implement step  8006  for determining the control parameters set which optimizes the goal function; e.g. the method described in Chou, C. I. et al., “Guided Simulated Annealing Method For Optimization Problems”, Physical Review E, 67, 066704-1 to 066704-6 (2003). In one embodiment wherein the permissible values of control parameters are discrete sets of values, a brute force method may be used in which the variable to be optimized (e.g., TCO) is computed for all combinations of control parameters with respect to said discrete sets of values, to determine which combination of such combinations triggers the optimum value of the variable to be optimized. See the example of Section 7.6 in which this brute force method is used. People skilled in the art will appreciate the fact that other known or new discrete optimization methods can be used to minimize the above function. 
     7.5 Helper Methods 
     7.5.1 getTCO 
     public unsigned int TCO getTCO(ITStructure s) returns the total cost of ownership (TCO) of a delivery-bound IT Structure s. 
     TCO of a delivery-bound IT Structure instance is calculated as a sum of TCOs of all the elements comprised by the IT Structure instance, including hardware, software, and labor (operations and support). 
     In the preferred embodiment, TCO of an IT structure element is expressed as sum of one-time charge (‘OTC’), and monthly recurring charge (‘MRC’) multiplied by some constant reflecting the application lifetime (e.g. 36 months):
 
TCO=OTC+ C *MRC
 
7.5.2 getResponseTime
 
     Class Program, included in the IT class hierarchy, in addition to all the other properties and methods inherited or specific to class Program, possesses the property reponseTime which contains the average responseTime of the software program described by a particular instance of the class Program in the context of a particular IT structure instance. Please note that the abstraction level of the IT structure instance must be such that would allow for estimating the software program response time. 
     The IT structure response time (T) is calculated as a sum of the response times of IT structure operants (i.e., elements, fragments, groups of functionally equivalent fragments) of the target IT structure along the selected transaction path:
 
 T=Σ   i   t   i  
 
wherein t i  is i-th operant response time such that the i-th operant is an element, a fragment, or a group of functionally equivalent fragments of the target IT structure. The summation over i is from 1 to n, wherein n is the number of IT structure operants on the selected transaction path, and wherein the response time T is in units of time (e.g., in seconds). If the index “i” refers to a group of functionally equivalent fragments, then the associated response time t Gi  of the group i (i.e., t i =t Gi ) is a weighted average of the response times of the fragments of the group:
 
 t   Gi =Σ j   k   j   t   ij  
 
wherein t ij  is the response time of the j-th fragment of the group representing operant i on the selected transaction path. The summation over j is from 1 to J, wherein J is the number of fragments in the group, and wherein k j  is a weight coefficient for fragment j. The weight coefficients k j  are normalized such that the summation over the weight coefficients is 1.
 
     The following example of a particular software program executed on a hardware server of a load balanced group of hardware servers illustrates calculation of the response time a group of functionally equivalent fragments, wherein each fragment is a server of the load balanced group of hardware servers. The weight coefficient for each server may be assigned a value proportional to the load balanced hardware server&#39;s processor speed (measured in such units as MHz). The weight coefficients are normalized such that the sum of all the weight coefficients for a single load balanced group is 1. For example, if a load balanced group comprises four servers of equal processor speed, then the weight coefficients are 0.25. In another example, if a load balanced group comprises a hardware server with 4×2048 MHz CPUs, and a server with 2×2048 MHz CPUs, and a server with a single 1024 MHz CPU, then the weight coefficients are 0.62, 0.31 and 0.07, respectively. 
     Generally, the weight coefficients for the fragments of a group of functionally equivalent fragments are configured on a case-dependent basis in light of the specific functionality of the fragments. For example, the weight coefficients are proportional to hardware server processor speed in the preceding illustrative example. 
     7.5.3 getAvailability 
     Class Program, included in the IT class hierarchy, in addition to all the other properties and methods inherited or specific to class Program, possesses the property availability which contains the average availability of the software program described by a particular instance of the class Program in the context of a particular IT structure instance. Please note that the abstraction level of the IT structure instance must be such that would allow for estimating the software program availability. 
     The IT structure average availability (A) is calculated as the product of the availabilities of the sequentially ordered elements and fragments and group of functionally equivalent fragments of the IT structure along the selected transaction path.
 
 A=π   i   a   i  
 
wherein the multiplication over i is from 1 to n, wherein a; is the availability of the i-th operant, and wherein n is the sum of the number of said sequentially ordered IT structure elements and fragments and groups of functionally equivalent fragments on the selected transaction path.
 
     A fragment of an IT structure is a set of IT structure elements. Two or more fragments of an IT structure are functionally equivalent if each fragment of the two or more fragments would yield the same output responding to an input request, so that a transaction path can include a request/response functionality of any one of the equivalent fragments. Load balanced servers or redundant firewalls are examples of functionally equivalent fragments of an IT structure. 
     The availability (A G ) of a group of functionally equivalent fragments (e.g. load balanced servers) of an IT structure along the selected transaction path is calculated as
 
 A   G =1−π i (1− a   i )
 
wherein the multiplication over i is from 1 to m, wherein a li  is availability of fragment i, and wherein m is the number of functionally equivalent fragments within the group G. For example, the availability of a group of two functionally equivalent fragments consisting of two functionally equivalent load-balanced servers, wherein the two functionally equivalent load-balanced servers have 0.9 and 0.8 availability, is 1−((1−0.9)(1−0.8))=0.98. Thus, the capability of alternatively using any one of the functionally equivalent fragments in the selected transaction path serves as a mechanism for increasing or optimizing the availability of the IT structure along the selected transaction path.
 
7.5.4 Server Consolidation
 
     Server consolidation is a special type of IT structure optimization which can be applied only to IT structures including software programs. The number of servers in an IT structure can be determined by examining the results of the IT structure&#39;s getPrimitiveComposition( ) method. 
     Class Program, included in the IT class hierarchy, in addition to all the other properties and methods inherited or specific to class Program, possesses the property serverNum which contains the number of the hardware server within the IT structure where the software program described by a particular instance of the class Program, is running. To perform the server consolidation, serverNum property must be declared an optimization control parameter. More generally, an identifier of a hardware server may be an optimization control parameter, wherein serverNum is a special case of said identifier. Thus the optimization procedure by changing the parameter serverNum (or the identifier of the hardware server) will change the allocation of the software programs to the hardware servers, and will finally produce the optimal allocation. To preserve the consistency of the IT structure, getOptimizationF( ) method must verify that an attempted allocation is allowed in terms of platform compatibility and co-existence with other software programs running on a particular hardware server. If the attempted allocation is not allowed, the method throws an appropriate exception: ITExceptionIncompatiblePlatform, ITExceptionIncompatiblePrograms, or ITExceptionInvalidProgramAllocation. 
     The getOptimizationF( ) method, as applied to server reallocation, recalculates parameters that may have changes as a result of the server reallocation, such as:
         the CPU and RAM capacity on the hardware servers affected by the move of a software program from one hardware server to another; and   the response time, availability and TCO of all the elements.
 
The servers with no software programs installed are removed from the configuration.
 
7.5.5 Load Balanced Groups and Redundant Hardware
       

     Another special type of IT structure optimization deals with load balanced groups and multiple hardware devices of the same type connected to the same subnet(s), e.g. firewalls, load balancers. Since the redundancy is not needed in order to provide the functionality of redundant hardware devices (e.g. IP packet filtering for firewalls, or IP packet routing for load balancers), it is assumed that the devices can only be made redundant to satisfy either availability or response time requirements. The same applies to the load balanced groups of hardware servers. 
     To allow for the optimization of load balanced groups and redundant hardware, the absence or presence of each redundant hardware device or load balanced hardware server being described by a binary variable such as an is Present property of 0 or 1 if not present or present, respectively. Thus, the binary variable (e.g., the is Present property) is an optimization control parameter. The binary variable may be initialized to being not present or present (e.g., the is Present property may be initialized with the value of 1) for all the servers and devices in the initial configuration. The optimization procedure determines the optimal value of the binary variable (e.g., whether 0 or 1 is optimal for isPresent) in conjunction with the optimal values of the other control parameters. 
     getOptimizationF( ) method removes from the IT structure those hardware devices and servers for which the is Present property is equal to 0 (i.e., the binary variable indicates that such hardware device(s) are not present). 
     In one embodiment, the binary variable (e.g., the is Present property) may be assigned to any element of the target IT structure and serve as an optimization control parameter to permit the optimization procedure to delete said any element if the optimal value of the binary variable denotes that said any element is not present (e.g., the is Present property of said any element is 0). 
     In one embodiment, the binary variable (e.g., the is Present property) may be assigned to any hardware (e.g., a CPU of a hardware server) that is utilized by the elements of the target IT structure and serve as an optimization control parameter to permit the optimization procedure to delete said any hardware if the optimal value of the binary variable denotes that said any hardware is not present (e.g., the is Present property of said any element is 0). 
     7.6 Example 
       FIG. 47  is a network diagram depicting the IT structure used as an example for illustrating the optimization algorithm. The sample IT structure comprises the elements in  FIG. 48 , in accordance with embodiments of the present invention. 
     The task is to optimize TCO of the IT Structure while subject to the constraints of having response time better than 4 sec and availability better than 99%. 
     The goal function is calculated as the sum of TCOs of all the elements comprising the IT structure instance. 
     Control parameters and their corresponding domains are listed in  FIG. 49 , in accordance with embodiments of the present invention. In this example, all the characteristics of hardware servers listed for the initial IT structure, are selected as the control parameters, namely model, CPU, RAM. The allowed values for those control parameters are defined from either inventory of available hardware servers and/or from manufacturers documentation describing possible hardware configurations for a given hardware model. 
     Please note that derivative characteristics (e.g. response time) or characteristics which can not be directly changed by reconfiguring the hardware (e.g. availability) can not be used as control parameters. Nonetheless, the constraints in this example comprise the response time and availability. 
     In addition, software program placement on hardware server is also chosen as a control parameter in this example, by assigning to every software program a property containing an ID of the hardware server where this software program is installed. The allowed domain for this property includes all the hardware servers within the same subnet of the IT structure as the hardware server where the software program resides initially in the target IT structure. 
     Alternative methods may be employed to implement step  8006  of  FIG. 45  for determining the control parameters set which minimizes the goal function; e.g. the specific combination of the control parameter values that minimizes TCO may be determined by brute force; i.e., by calculating TCO for each possible combination of the parameter values listed in  FIG. 49 . 
     The resulting optimized IT structure is shown in  FIG. 50 , in accordance with embodiments of the present invention. The optimization was performed by listing all the possible combinations of control parameter values and selecting the IT structure with the minimal TCO resulted in: 
     1) removing extra firewall and load balancer, since all the constraints (in particular—availability) are still satisfied without redundant fireballs and load balancers, while TCO is reduced; 
     2) collocating HTTP server and Application server, since all the constraints (in particular—response time) are still satisfied without extra hardware servers dedicated to HTTP server program, while TCO is further reduced; and 
     3) removing 2 CPUs from Application Servers, since all the constraints (in particular—response time) are still satisfied with 2 CPUs, while TCO is yet further reduced. 
     8.0 Computer System 
       FIG. 20  illustrates a computer system  90  used for implementing an IT Entity Model and associated processes, for visualizing configurations relating to IT structures, for generation of IT configuration elements (e.g., firewall rules, load balancing scripts, wrappers for non-compliant applications), for automating verification of correctness of aspects of an IT system, for determining relationships between business components of a Component Based Model (CBM) of a business and an IT model of an IT system, and for optimization of aspects of an IT structure, including any subset of the algorithms and methods described herein, in accordance with embodiments of the present invention. The computer system  90  comprises a processor  91 , an input device  92  coupled to the processor  91 , an output device  93  coupled to the processor  91 , and memory devices  94  and  95  each coupled to the processor  91 . The input device  92  may be, inter alia, a keyboard, a mouse, etc. The output device  93  may be, inter alia, a printer, a plotter, a computer screen, a magnetic tape, a removable hard disk, a floppy disk, etc. The memory devices  94  and  95  may be, inter alia, a hard disk, a floppy disk, a magnetic tape, an optical storage such as a compact disc (CD) or a digital video disc (DVD), a dynamic random access memory (DRAM), a read-only memory (ROM), etc. The memory device  95  includes a computer code  97 . The computer code  97  includes one or more algorithms for implementing an IT Entity Model and associated processes, for visualizing configurations relating to IT structures, for generation of IT configuration elements (e.g., firewall rules, load balancing scripts, wrappers for non-compliant applications), for automating verification of correctness of aspects of an IT system, for determining relationships between business components of a Component Based Model (CBM) of a business and an IT model of an IT system, and for optimization of aspects of an IT structure, including any subset of the algorithms and methods described herein. The processor  91  executes the computer code  97 . The memory device  94  includes input data  96 . The input data  96  includes input required by the computer code  97 . The output device  93  displays output from the computer code  97 . Either or both memory devices  94  and  95  (or one or more additional memory devices not shown in  FIG. 20 ) may be used as a computer usable medium (or a computer readable medium or a program storage device) having a computer readable program code embodied therein and/or having other data stored therein, wherein the computer readable program code comprises the computer code  97 . Generally, a computer program product (or, alternatively, an article of manufacture) of the computer system  90  may comprise said computer usable medium (or said program storage device). 
     Thus the present invention discloses a process for deploying or integrating computing infrastructure, comprising integrating computer-readable code into the computer system  90 , wherein the code in combination with the computer system  90  is capable of performing a method for implementing an IT Entity Model and associated processes, for visualizing configurations relating to IT structures, for generation of IT configuration elements (e.g., firewall rules, load balancing scripts, wrappers for non-compliant applications), for automating verification of correctness of aspects of an IT system, for determining relationships between business components of a Component Based Model (CBM) of a business and an IT model of an IT system, and for optimization of aspects of an IT structure, including any subset of the algorithms and methods described herein. 
     While  FIG. 20  shows the computer system  90  as a particular configuration of hardware and software, any configuration of hardware and software, as would be known to a person of ordinary skill in the art, may be utilized for the purposes stated supra in conjunction with the particular computer system  90  of  FIG. 20 . For example, the memory devices  94  and  95  may be portions of a single memory device rather than separate memory devices. 
     While embodiments of the present invention have been described herein for purposes of illustration, many modifications and changes will become apparent to those skilled in the art. Accordingly, the appended claims are intended to encompass all such modifications and changes as fall within the true spirit and scope of this invention.