code: def execute(correlation_id, components, args = None):
          
          results = []
  
          if components == None:
              return
  
          args = args if args != None else Parameters()
          for component in components:
              result = Executor.execute_one(correlation_id, component, args)
              results.append(result)
  
          return results
docs: Executes multiple components.
  
          To be executed components must implement [[IExecutable]] interface.
          If they don't the call to this method has no effect.
  
          :param correlation_id: (optional) transaction id to trace execution through call chain.
  
          :param components: a list of components that are to be executed.
  
          :param args: execution arguments.
  
          :return: execution result