blob: f70cfa2ae1482b23c60ee093e38546fa888d5bf5 [file] [log] [blame]
package org.eclipse.virgo.nano.deployer.hot;
import java.io.File;
import org.eclipse.virgo.util.io.FileSystemChecker;
import org.eclipse.virgo.util.io.FileSystemListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Task that monitors a given directory and notifies configured {@link FileSystemListener FileSystemListeners}.
* <p/>
*
* <strong>Concurrent Semantics</strong><br />
*
* Threadsafe.
*
*/
final class WatchTask implements Runnable {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private final int scanIntervalMillis = 1000;
private final FileSystemChecker checker;
private final File watchDir;
WatchTask(FileSystemChecker checker, File watchDir) {
this.checker = checker;
this.watchDir = watchDir;
}
/**
* Watches the configured directory for modifications.
*/
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
Thread.sleep(this.scanIntervalMillis);
} catch (InterruptedException e) {
break;
}
try {
this.checker.check();
} catch (Throwable e) {
this.logger.error("Error watching directory '{}'", e, this.watchDir.getAbsolutePath());
}
}
}
}