this.config = checkNotNull(config);
this.localContentDiscoverer = checkNotNull(localContentDiscoverer);
this.remoteContentDiscoverer = checkNotNull(remoteContentDiscoverer);
this.quickRemoteStrategy = checkNotNull(quickRemoteStrategy);
final ScheduledThreadPoolExecutor target =
new ScheduledThreadPoolExecutor(5, new NexusThreadFactory("ar", "AR-Updater"),
new ThreadPoolExecutor.AbortPolicy());
this.executor = NexusScheduledExecutorService.forFixedSubject(target, FakeAlmightySubject.TASK_SUBJECT);
this.constrainedExecutor = new ConstrainedExecutorImpl(executor);
// register event dispatcher
this.eventDispatcher = new EventDispatcher(this);