code: public void waitUntilReady() throws InterruptedException, CouldNotPerformException {
          try {
              while (true) {
                  try {
                      waitUntilReadyFuture().get((JPService.testMode() ? 4 : 300), TimeUnit.SECONDS);
                      break;
                  } catch (final TimeoutException ex) {
                      logger.warn("Still waiting for " + getName());
                      continue;
                  }
              }
          } catch (final ExecutionException | CancellationException ex) {
              throw new CouldNotPerformException("Could not wait until " + getName() + " is ready.", ex);
          }
      }
docs: Method blocks until the referred registry is not handling any tasks and is currently consistent.
  <p>
  Note: If you have just modified the registry this method can maybe return immediately if the task is not yet received by the registry controller.
  So you should prefer the futures of the modification methods for synchronization tasks.
  
  @throws InterruptedException                                is thrown in case the thread was externally interrupted.
  @throws org.openbase.jul.exception.CouldNotPerformException is thrown if the wait could not be performed.