package net.jsunit; import net.jsunit.configuration.RemoteConfiguration; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; public class RemoteConfigurationCacheUpdater extends Thread { private static final long THREE_MINUTE_MILLIS = 1000 * 60 * 3; private static final Logger logger = Logger.getLogger("net.jsunit"); private RemoteConfigurationCache cache; private List<URL> remoteMachineURLs; private RemoteServerHitter hitter; private boolean running; public RemoteConfigurationCacheUpdater(RemoteConfigurationCache cache, List<URL> remoteMachineURLs, RemoteServerHitter hitter) { this.cache = cache; this.remoteMachineURLs = remoteMachineURLs; this.hitter = hitter; setDaemon(true); } public synchronized void start() { running = true; super.start(); } public void run() { while (running) { try { Thread.sleep(THREE_MINUTE_MILLIS); } catch (InterruptedException e) { e.printStackTrace(); } fetch(); } } public void fetch() { logger.info("Fetching remote machine configurations (" + remoteMachineURLs.size() + " remote servers)"); List<RemoteConfiguration> result = new ArrayList<RemoteConfiguration>(); for (URL remoteMachineURL : remoteMachineURLs) { RemoteConfigurationFetcher fetcher = new RemoteConfigurationFetcher(hitter, remoteMachineURL); try { fetcher.fetch(); } catch (IOException e) { logger.severe("Could not fetch remote configuration for URL " + remoteMachineURL.toString()); } RemoteConfiguration retrievedRemoteConfiguration = fetcher.getRetrievedRemoteConfiguration(); if (retrievedRemoteConfiguration != null) result.add(retrievedRemoteConfiguration); } cache.setCachedRemoteConfigurations(result); logger.info("Done fetching remote machine configurations"); } public void stopFetching() { running = false; } }