docs: public Future<JcrRepository> update( final String repositoryName,
                                           final Changes changes )
          throws ConfigurationException, NoSuchRepositoryException, RepositoryException {
  
          final Lock lock = this.lock.writeLock();
          try {
              lock.lock();
              // Get the repository ...
              final JcrRepository repository = this.repositories.get(repositoryName);
              if (repository == null) {
                  // There is no repository with this name ...
                  throw new NoSuchRepositoryException(JcrI18n.repositoryDoesNotExist.text(repositoryName));
              }
  
              // Determine if the changes would result in a valid repository configuration ...
              RepositoryConfiguration config = repository.getConfiguration();
              Problems problems = config.validate(changes);
              repository.setConfigurationProblems(problems);
              if (problems.hasErrors()) {
                  throw new ConfigurationException(problems, JcrI18n.repositoryConfigurationIsNotValid.text(repositoryName,
                                                                                                            problems.toString()));
              }
  
              // Apply the changes immediately (synchronously) ...
              try {
                  repository.apply(changes);
              } catch (Exception e) {
                  throw new ConfigurationException(problems, JcrI18n.repositoryConfigurationIsNotValid.text(repositoryName,
                                                                                                            e.getMessage()), e);
              }
              return new ImmediateFuture<JcrRepository>(repository);
          } finally {
              lock.unlock();
          }
      }