Abstract:
A method for automated process distribution includes selecting a process definition; identifying a first process portion and at least one second process portion in the process definition; generating a first further process definition for the first process portion; generating a second further process definition for each the second process portion; generating a corresponding service definition for each the second further process definition. In the method, generating the first further process definition includes generating a process definition element configured to invoke at least one service of the service definitions, and generating the second further process definition includes generating a process definition element configured to offer a service of the service definition corresponding to that second further process definition.

Description:
CROSS-REFERENCE TO RELATED APPLICATIONS 
       [0001]    The present application is a continuation of U.S. patent application Ser. No. 11/758,707 filed on Jun. 6, 2007, now U.S. Pat. No. 8,904,369. 
     
    
     FIELD OF THE INVENTION 
       [0002]    The invention relates to a method for automated process distribution, and a computing device, data processing program, and computer program product. 
       BACKGROUND 
       [0003]    In order to effectively carry out a computing process on a multiplicity of processors or computers, systems have been developed that provide for the distributed execution of such a computing process. Thus, overall system performance can be scaled up for handling large and resource-intensive processes. 
         [0004]    One application of such technology is the distributed execution of programmed business processes via workflow management systems. Such programmed business processes (in this entire document: business processes) are generally carried out on one single workflow management system. However, some workflow management systems are known that provide for distributed execution of a business process, where each of the subcomponents carrying out a certain part of an overall business process has its own computing and storage means. 
         [0005]    In order to split an overall process into parts that are distributable to an execution subcomponent, such systems comprise a flow analyzer that generates appropriate process portions and communicates these to various subcomponents for execution. 
         [0006]    For doing so, current process distribution systems require all components to be homogenous and operate using a single, generally proprietary, type of process execution platform (workflow management system). 
         [0007]    Furthermore, systems are known that optimize the allocation of workload to subcomponents for overall system performance. One example is shown in U.S. Pat. No. 6,507,844 B1, in which it is proposed to analyze network traffic induced by accessing distributed database tables and redistribute these tables to minimize traffic. 
         [0008]    Consequently, it is an object of the present invention to provide a method and system for automated process distribution in a platform-independent manner to enable distributed process execution across a combination of various different process execution subcomponents. 
       SUMMARY 
       [0009]    According to one aspect of the invention, a method for automated process distribution includes: selecting a process definition; identifying a first process portion and at least one second process portion in the process definition; generating a first further process definition for the first process portion; generating a second further process definition for each second process portion; generating a corresponding service definition for each second further process definition, wherein generating the first further process definition comprises generating a process definition element configured to invoke at least one service of the service definitions, and wherein generating the second further process definition comprises generating a process definition element configured to offer a service of the service definition corresponding to that second further process definition, and wherein further the first and second further process definitions are distributed for concurrent execution. 
         [0010]    By selecting a process definition, a platform-independent description of a process to be distributed and executed is chosen. This process definition, for instance expressed in a process definition computer language, such as BPEL, can be automatically processed and includes instructions (activities) that are further specified in an implementation-independent manner by corresponding service definitions, for instance expressed in a service definition computer language, such as WSDL. In this regard, process definitions enable to orchestrate services within an overall process and service definitions describe the functionality of a service. 
         [0011]    By identifying a first process portion and at least one second process portion in the process definition, portions of the process to be distributed are selected. For identifying appropriate portions, a number of selection algorithms can be used, for instance minimizing a function relating to network communication load and communication capacity, or relating to criticality and system availability of subcomponents, or relating to computational load and computation capacity of subcomponents, etc. Process portions can be identified to suit a hierarchical pattern as well as a sequential pattern. 
         [0012]    By generating a first further process definition for the first process portion and generating a second further process definition for each second process portion, all portions of the process to be prepared for distributed execution are turned into fully-fledged separate and independent processes that can be distributed individually. By generating a corresponding service definition for each of the second further process definitions, a linking mechanism between the separate processes is provided in a platform-independent manner. 
         [0013]    By making a generated fully-fledged (further) business process contain a process definition element (activity, &lt;invoke&gt; in the case of BPEL) configured to invoke a service definition corresponding to another generated business process, a process can have the services relating to one or more of the other processes executed. 
         [0014]    Further, by making a generated fully-fledged (further) business process contain a process definition element (activity, &lt;receive&gt; in the case of BPEL) configured to offer a service of the service definition that corresponds to that same business process, such a process makes the functionality encapsulated in that service available to be invoked by another of the fully-fledged (further) business processes. 
         [0015]    Since the first and second further process definitions are finally distributed for concurrent execution, the business processes are made available for the systems that actually perform the processes according to the process definitions using accordingly offered services and their invokes. 
         [0016]    A computing device for executing the method according to the present invention includes: a process definition analyzer configured to select a process definition and identify a first process portion and at least one second process portion in the process definition; a service definition generator configured to generate service definitions; a process definition generator configured to generate a first further process definition for the first process portion, comprising generating a process definition element configured to invoke at least one service of the service definitions, the process definition generator being further configured to generate a second further process definition ( 12   b ) for each the second process portion, comprising generating a process definition element configured to offer a service of the service definitions. 
         [0017]    By providing a process definition analyzer, a service definition generator, and a process definition generator, appropriate means are provided to carry out the method of present invention. These means may be realized using any combination of properly programmed standard processors, memory, disk and network elements. 
         [0018]    In an embodiment of the method, service definitions corresponding to the first and second further process definitions can be distributed for concurrent execution. 
         [0019]    In a further embodiment, process definitions are expressed using BPEL. In this case, generating a process definition element configured to invoke a service can comprise generating an &lt;invoke&gt; statement and/or specifying a partnerLink. 
         [0020]    Further, in a BPEL-based implementation, generating a process definition element configured to offer a service can comprise generating a &lt;receive&gt; statement, in which the service and/or a partnerLink may be specified. 
         [0021]    In an embodiment of the method, at least one of the process portions is identified comprising calculating the computational effort of this process portion and/or comprising calculating the computational effort produced by this process portion and/or comprising calculating the effort of database access produced by this process portion. 
         [0022]    A further embodiment of the method comprises generating a corresponding service definition for the first further process definition to enable additional distribution patterns. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0023]      FIG. 1  is a block diagram showing a system overview comprising a possible configuration in use and illustrates the distribution of processes; and  FIG. 2  is a flow diagram giving an overview of an embodiment of the invention. 
       
    
    
     DETAILED DESCRIPTION 
       [0024]      FIG. 1  is a block diagram showing a system overview comprising the configuration of a typical embodiment in use. A distributed workflow management system  1 ,  5 ,  6  consists of a distributing workflow system  1  and further workflow systems  5  and  6 . 
         [0025]    Distributing workflow system  1  is a computing system comprising a process definition analyzer  2 , service definition generator  3 , and process definition generator  4 . 
         [0026]    Process definition analyzer  2  is configured to select a process definition  10  expressed in the Business Process Execution Language (BPEL), and is further configured to identify separable portions within the BPEL process  10 . Analyzer  2  also selects the service definition  11  associated with the process definition  10 . Analyzer  2  is configured to apply a number of selection algorithms, for instance minimizing a function relating to network communication load and communication capacity, or relating to criticality and system availability of subcomponents, or relating to computational load and computation capacity of subcomponents, etc. Process portions can be identified to suit sequential patterns of distribution, parallel patterns of distribution, or mixtures thereof, such as hierarchical patterns. 
         [0027]    Process definition generator  4  is configured to generate BPEL process definitions  12   a  and  12   b  for the identified portions of BPEL process  10 , comprising generating &lt;invoke&gt; and &lt;receive&gt; BPEL activities to provide an interface to services contained in service definitions  13   a,    13   b  in order to connect the various distributed processes and communicate context data, as will be described in more detail below with respect to  FIG. 2 . 
         [0028]    Service definition generator  3  is configured to generate a service definition  13   a,  and particularly  13   b,  expressed in the Web Services Description Language (WSDL). Service definitions  13   a,    13   b  correspond to BPEL process definitions  12   a,    12   b  and each provide the WSDL web services orchestrated by the BPEL process definitions. Further, a first BPEL process can invoke services related to another BPEL process, thus providing a “connection” between the separate generated process definitions. 
         [0029]    Process execution components  5  and  6 , computer systems as well, provide means to interpret and execute process definitions  12   a,    12   b  and service definitions  13   a,    13   b.  Systems  1 ,  5 , and  6  each may be different systems with different BPEL/WSDL implementations by different vendors. 
         [0030]    Also, components  1 ,  5 , and  6  may also be implemented as computing components within any computing system with decentralized computing resources. 
         [0031]    The mode of operation according to  FIG. 2  is described using a brief example given in the following listings. Consider computer  1  selects the following business process  10 , defined in BPEL, in step  100 : 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;process name=”twoInvokes”&gt; 
               
               
                   
                  &lt;variables&gt; 
               
               
                   
                   &lt;variable name=″inputMsg″ messageType=″inputMsg″/&gt; 
               
               
                   
                   &lt;variable name=″msgA″ messageType=″msgA″/&gt; 
               
               
                   
                   &lt;variable name=″msgB″ messageType=″msgB″/&gt; 
               
               
                   
                  &lt;/variables&gt; 
               
               
                   
                  &lt;partnerLinks&gt; 
               
               
                   
                   &lt;partnerLink name=″client″ 
               
               
                   
                      partnerLinkType=″clientLT″ 
               
               
                   
                      myRole=″server 
               
               
                   
                   &lt;partnerLink name=″serviceA″ 
               
               
                   
                      partnerLinkType=″serviceALT″ 
               
               
                   
                      partnerRole=″server″/&gt; 
               
               
                   
                   &lt;partnerLink name=″serviceB″ 
               
               
                   
                      partnerLinkType=″serviceBLT″ 
               
               
                   
                      partnerRole=″server″/&gt; 
               
               
                   
                  &lt;/partnerLinks&gt; 
               
               
                   
                    &lt;sequence&gt; 
               
               
                   
                      &lt;receive partnerLink=″client″ 
               
               
                   
                     portType=″requestPT″ 
               
               
                   
                     operation=″request″ 
               
               
                   
                     variable=″inputMsg″/&gt; 
               
               
                   
                   &lt;assign&gt; 
               
               
                   
                    &lt;copy&gt; 
               
               
                   
                     &lt;from variable=″inputMsg.msgA″/&gt; 
               
               
                   
                     &lt;to variable=″msgA″/&gt; 
               
               
                   
                    &lt;/copy&gt; 
               
               
                   
                    &lt;copy&gt; 
               
               
                   
                     &lt;from variable=″inputMsg.msgB″/&gt; 
               
               
                   
                     &lt;to variable=″msgB″/&gt; 
               
               
                   
                    &lt;/copy&gt; 
               
               
                   
                   &lt;/assign&gt; 
               
               
                   
                      &lt;invoke name=”A” 
               
               
                   
                     partnerLink=″serverA″ 
               
               
                   
                     portType=″requestPT″ 
               
               
                   
                     operation=″request″ 
               
               
                   
                     variable=″msgA″/&gt; 
               
               
                   
                      &lt;invoke name=”B” 
               
               
                   
                     partnerLink=″serverB″ 
               
               
                   
                     portType=″requestPT″ 
               
               
                   
                     operation=″request″ 
               
               
                   
                     variable=″msgB″/&gt; 
               
               
                   
                    &lt;/sequence&gt; 
               
               
                   
                 &lt;/process&gt; 
               
               
                   
                   
               
             
          
         
       
     
         [0032]    In this case, the process contains two activities, A and B, each further specified in a corresponding web service definition  11 . 
         [0033]    The WSDL definition for the Web Service invoked in activity A is as follows: 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;definitions&gt; 
               
               
                   
                  &lt;message name=“msgA” messageType=“msgA”&gt; 
               
               
                   
                  &lt;portType name=“requestPT”&gt; 
               
               
                   
                   &lt;operation name=“request”&gt; 
               
               
                   
                    &lt;input message=“msgA”/&gt; 
               
               
                   
                   &lt;/operation&gt; 
               
               
                   
                  &lt;/portType&gt; 
               
               
                   
                  &lt;partnerLinkType name=“serviceALT”&gt; 
               
               
                   
                   &lt;role name=“server”&gt; 
               
               
                   
                    &lt;portType=“requestPT”/&gt; 
               
               
                   
                   &lt;/role&gt; 
               
               
                   
                  &lt;/partnerLinkType&gt; 
               
               
                   
                 &lt;/definitions&gt; 
               
               
                   
                   
               
             
          
         
       
     
         [0034]    A similar definition is available for the service invoked in activity B. The business process itself is represented as a Web Service through the following definition: 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;definitions&gt; 
               
               
                   
                  &lt;message name=“inputMsg”/&gt; 
               
               
                   
                   &lt;part name=“msgA” messageType“msgA”/&gt; 
               
               
                   
                   &lt;part name=“msgB” messageType=“msgB”/&gt; 
               
               
                   
                  &lt;/message&gt; 
               
               
                   
                  &lt;portType name=“requestPT”&gt; 
               
               
                   
                   &lt;operation name=“request”&gt; 
               
               
                   
                    &lt;input message=“inputMsg”/&gt; 
               
               
                   
                   &lt;/operation&gt; 
               
               
                   
                  &lt;/portType&gt; 
               
               
                   
                  &lt;partnerLinkType name=“clientLT”&gt; 
               
               
                   
                   &lt;role name=“server”&gt; 
               
               
                   
                    &lt;portType=“requestPT”/&gt; 
               
               
                   
                   &lt;/role&gt; 
               
               
                   
                  &lt;/partnerLinkType&gt; 
               
               
                   
                 &lt;/definitions&gt; 
               
               
                   
                   
               
             
          
         
       
     
         [0035]    In step  110 , process definition analyzer  2  now identifies both activities as process portions to be distributed and executed separately on computers  5  and  6 , respectively. 
         [0036]    Now, process definition generator  4  generates a full BPEL process definition  12   a  for the first of the portions, namely activity A, in step  120  as in the listing below. Further, with the help of WSDL service definition  11 , the corresponding WSDL service definition  13   a  is generated by service definition generator  3 . Depending on the chosen distribution pattern, the service definition  13   a  may or may not be identical to the service definition  11 . In the shown example, there would be no need to generate a new service definition, since the interaction with the caller/client remains the same. In an alternative scenario, however, wherein the second process answers the caller/client, service definition  13   a  differs. 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;process name=”twoInvokes”&gt; 
               
               
                   
                  &lt;variables&gt; 
               
               
                   
                   &lt;variable name=″inputMsg″ messageType=″inputMsg″/&gt; 
               
               
                   
                   &lt;variable name=″msgA″ messageType=″msgA″/&gt; 
               
               
                   
                   &lt;variable name=″msgB″ messageType=″msgB″/&gt; 
               
               
                   
                  &lt;/variables&gt; 
               
               
                   
                  &lt;partnerLinks&gt; 
               
               
                   
                   &lt;partnerLink name=″client″ 
               
               
                   
                      partnerLinkType=″clientLT″ 
               
               
                   
                      myRole=″server″/&gt; 
               
               
                   
                   &lt;partnerLink name=″serviceA″ 
               
               
                   
                      partnerLinkType=″serviceALT″ 
               
               
                   
                      partnerRole=″server″/&gt; 
               
               
                   
                   &lt;partnerLink name=″twoInvokesPortion2″ 
               
               
                   
                      partnerLinkType=″twoInvokesPortion2LT″ 
               
               
                   
                      partnerRole=″server″/&gt; 
               
               
                   
                  &lt;/partnerLinks&gt; 
               
               
                   
                    &lt;sequence&gt; 
               
               
                   
                   &lt;receive partnerLink=″client″ 
               
               
                   
                     portType=″requestPT″ 
               
               
                   
                     operation=″request″ 
               
               
                   
                     variable=″inputMsg″/&gt; 
               
               
                   
                   &lt;assign&gt; 
               
               
                   
                    &lt;copy&gt; 
               
               
                   
                     &lt;from variable=″inputMsg″ 
               
               
                   
                       Part=″msgA″/&gt; 
               
               
                   
                     &lt;to variable=″msgA″/&gt; 
               
               
                   
                    &lt;/copy&gt; 
               
               
                   
                    &lt;copy&gt; 
               
               
                   
                     &lt;from variable=″inputMsg″ 
               
               
                   
                       Part=″msgB″″/&gt; 
               
               
                   
                      &lt;to variable=″msgB″/&gt; 
               
               
                   
                     &lt;/copy&gt; 
               
               
                   
                   &lt;/assign&gt; 
               
               
                   
                   &lt;invoke name=”A” 
               
               
                   
                     partnerLink=″serverA″ 
               
               
                   
                     portType=″requestPT″ 
               
               
                   
                     request=″request″ 
               
               
                   
                     variable=″msgA″/&gt; 
               
               
                   
                   &lt;invoke name=”twoInvokesPortion2” 
               
               
                   
                     partnerLink=″twoInvokesPortion2″ 
               
               
                   
                     portType=″executePT″ 
               
               
                   
                     operation=″execute″ 
               
               
                   
                     variable=″msgB″/&gt; 
               
               
                   
                   &lt;/sequence&gt; 
               
               
                   
                 &lt;/process&gt; 
               
               
                   
                   
               
             
          
         
       
     
         [0037]    As can be seen from the listing above, this process definition is generated such that it first invokes the activity (A) as defined by WSDL service definition  13   a  and then invokes the web service as defined in a service definition  13   b  and made available (offered) by a corresponding &lt;receive&gt; statement in process definition  12   b,  which will be described further below. In this way, when executed in step  160 , process  12   a  first has service A executed and then has the service relating to process  12   b  invoked. 
         [0038]    Respectively, process definition generator  4  generates a full BPEL process definition  12   b  for the second of the portions, namely activity B, in step  130  as in the listing below. Further, the corresponding WSDL service definition  13   b  is generated by service definition generator  3 . 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;process name=”twoInvokesPortion2”&gt; 
               
               
                   
                  &lt;variables&gt; 
               
               
                   
                   &lt;variable name=″msgB″ messageType=″msgB″/&gt; 
               
               
                   
                  &lt;/variables&gt; 
               
               
                   
                  &lt;partnerLinks&gt; 
               
               
                   
                   &lt;partnerLink name=″twoInvokesPortion2″ 
               
               
                   
                      partnerLinkType=″twoInvokesPortion2LT″ 
               
               
                   
                      myRole=″server″/&gt; 
               
               
                   
                   &lt;partnerLink name=″serviceB″ 
               
               
                   
                      partnerLinkType=″serviceBLT″ 
               
               
                   
                      partnerRole=″server″/&gt; 
               
               
                   
                  &lt;/partnerLinks&gt; 
               
               
                   
                    &lt;sequence&gt; 
               
               
                   
                      &lt;receive name=”FromTwoInvokesPortion1” 
               
               
                   
                           partnerLink=”twoInvokesPortion2” 
               
               
                   
                           portType=″twoInvokesPortion2PT″ 
               
               
                   
                           operation=”execute” 
               
               
                   
                           variable=”msgB”/&gt; 
               
               
                   
                      &lt;invoke name=”B” 
               
               
                   
                     partnerLink=″serverB″ 
               
               
                   
                     portType=″requestPT″ 
               
               
                   
                     operation=″request″ 
               
               
                   
                     variable=″msgB″/&gt; 
               
               
                   
                    &lt;/sequence&gt; 
               
               
                   
                 &lt;/process&gt; 
               
               
                   
                   
               
             
          
         
       
     
         [0039]    As can be seen from the listing above, this process definition is generated such that, with the help of the &lt;receive&gt; statement, it makes the web service as defined in service definition  13   b  available for being called, and invokes the activity (B) as defined by WSDL service definition  13   b.    
         [0040]    The appropriate WSDL service definition  13   b,  that enables the “linking” of processes  12   a  and  12   b,  and that is generated by service definition generator  3  for the generated process  12   b,  looks like the following: 
         [0000]    
       
         
               
               
             
           
               
                   
                   
               
             
             
               
                   
                 &lt;definitions&gt; 
               
               
                   
                  &lt;message name=“msgB” messageType=“msgB”/&gt; 
               
               
                   
                  &lt;portType name=“twoInvokesPortion2PT”&gt; 
               
               
                   
                   &lt;operation name=“execute”&gt; 
               
               
                   
                    &lt;input message=“msgB”/&gt; 
               
               
                   
                   &lt;/operation&gt; 
               
               
                   
                  &lt;/portType&gt; 
               
               
                   
                  &lt;partnerLinkType name=“twoInvokesPortion2LT”&gt; 
               
               
                   
                   &lt;role name=“server”&gt; 
               
               
                   
                    &lt;portType=“executePT”/&gt; 
               
               
                   
                   &lt;/role&gt; 
               
               
                   
                  &lt;/partnerLinkType&gt; 
               
               
                   
                 &lt;/definitions&gt; 
               
               
                   
                   
               
             
          
         
       
     
         [0041]    Before execution in step  160 , computer  1  communicates BPEL process definitions  12   a ,  12   b  and WSDL service definitions  13   a,    13   b  to process execution computer systems  5  and  6 , respectively. 
         [0042]    The invention can take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment containing both hardware and software elements. In an embodiment, the invention is implemented in software, which includes but is not limited to firmware, resident software, microcode, etc. 
         [0043]    Furthermore, the invention can take the form of a computer program product accessible from a computer-usable or computer-readable medium providing program code for use by or in connection with a computer or any instruction execution system. For the purposes of this description, a computer-usable or computer readable medium can be any apparatus that can contain, store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device. 
         [0044]    The medium can be an electronic, magnetic, optical, electromagnetic, infrared, or semiconductor system (or apparatus or device) or a propagation medium. Examples of a computer-readable medium include a semiconductor or solid state memory, magnetic tape, a removable computer diskette, a random access memory (RAM), a read-only memory (ROM), a rigid magnetic disk and an optical disk. Current examples of optical disks include compact disk-read only memory (CD-ROM), compact disk-read/write (CD-R/W) and DVD. 
         [0045]    A data processing system suitable for storing and/or executing program code will include at least one processor coupled directly or indirectly to memory elements through a system bus. The memory elements can include local memory employed during actual execution of the program code, bulk storage, and cache memories which provide temporary storage of at least some program code in order to reduce the number of times code must be retrieved from bulk storage during execution. 
         [0046]    Input/output or I/O devices (including but not limited to keyboards, displays, pointing devices, etc.) can be coupled to the system either directly or through intervening I/O controllers. 
         [0047]    Network adapters may also be coupled to the system to enable the data processing system to become coupled to other data processing systems or remote printers or storage devices through intervening private or public networks. Modems, cable modem and Ethernet cards are just a few of the currently available types of network adapters. 
         [0048]    To avoid unnecessary repetitions, explanations given for one of the various embodiments are intended to refer to the other embodiments as well, where applicable. In and between all embodiments, identical reference signs refer to elements of the same kind Moreover, reference signs in the claims shall not be construed as limiting the scope. The use of “comprising” in this application does not mean to exclude other elements or steps and the use of “a” or “an” does not exclude a plurality. A single unit or element may fulfill the functions of a plurality of means recited in the claims.