RepositoryCreationService is the service which is used to create repositories in runtime. The service can be used in a standalone or cluster environment.
RepositoryConfigurationService depends on the next components:
DBCreator which is used to create new database for each unbinded datasource.
BackupManager which is used to create repository from backup.
RPCService which is used for communicating between cluster-nodes.
RPCService may not be configured. In this case, RepositoryService will work as a standalone service.
The user executes reserveRepositoryName(String repositoryName) -
        client-node calls coordinator-node to reserve repositoryName. If this
        name is already reserved or repository with this name exists,
        client-node will fetch RepositoryCreationException. If not, Client will
        get token string.
Instead of executing createRepository(String backupId,
        RepositoryEntry rEntry, String token), Coordinator-node checks the
        token, and creates Repository.
When the repository has been created, the user-node broadcasts a message to
        all clusterNodes with RepositoryEntry, so each cluster node starts new
        Repository.
There are two ways to create a repository: make it in single step - just
    call createRepository(String backupId, RepositoryEntry); or reserve
    repositoryName at first (reserveRepositoryName(String repositoryName),
    then create the reserved repository (createRepository(String backupId,
    RepositoryEntry rEntry, String token).
Each datasource in RepositoryEntry of a new Repository must have
        unbinded datasources. This means such a datasource must not have database behind it.
        This restriction is to avoid corruption with existing
        repositories data.
RPCService is an optional component, but
        RepositoryCreatorService cannot communicate with other cluster-nodes
        without it.