code: @Override
      public void init(final CONFIG config) throws InitializationException, InterruptedException {
          synchronized (CONFIG_LOCK) {
              try {
                  if (config == null) {
                      throw new NotAvailableException("config");
                  }
                  currentScope = detectScope(config);
                  try {
                      applyConfigUpdate(config);
                  } catch (CouldNotPerformException ex) {
                      ExceptionPrinter.printHistory("Could not apply config update for " + this, ex, logger);
                      try {
                          if (JPService.getProperty(JPTestMode.class).getValue()) {
                              throw new FatalImplementationErrorException("Could not apply config update for " + this, this, ex);
                          }
                      } catch (JPNotAvailableException ex1) {
                          // to nothing if property could not be resovled.
                      }
                  }
                  super.init(currentScope);
              } catch (CouldNotPerformException ex) {
                  throw new InitializationException(this, ex);
              }
          }
      }
docs: {@inheritDoc}
  
  @param config {@inheritDoc}
  @throws InitializationException {@inheritDoc}
  @throws InterruptedException {@inheritDoc}