code: public void commandsForDomainModel(final CommandsForDomainModelCallback callback) {
          if (this.root == null) {
              topology.onError(
                      new SynchronizeFXException("Request to create necessary commands to reproduce the domain model "
                              + " but the root object of the domain model is not set."));
              return;
          }
          try {
              modelWalkingSynchronizer.startModelWalking();
              creator.commandsForDomainModel(this.root, callback);
              modelWalkingSynchronizer.finishedModelWalking();
          } catch (final SynchronizeFXException e) {
              topology.onError(e);
          }
      }
docs: This method creates the commands necessary to reproduce the entire domain model.
  
  <p>
  The API of this method may looks a bit odd as the commands produced are returned via a callback instead of
  return but this is necessary to ensure that no updated are lost for newly connecting peers.
  </p>
  
  <p>
  Make sure that commands you receive via {@link TopologyLayerCallback#sendCommands(List)} are not send to the
  peer you've requested this initial set of commands for before your callback is called. Make also sure that
  future calls of {@link TopologyLayerCallback#sendCommands(List)} will send the changes to this new peer before
  your callback returns.
  </p>
  
  <p>
  It is guaranteed that your callback is only called once and that this call happens before
  {@link MetaModel#commandsForDomainModel(CommandsForDomainModelCallback)} returns.
  </p>
  
  @param callback The callback that takes the commands.