Repository: incubator-tamaya-extensions Updated Branches: refs/heads/master a5ced9419 -> ee00d2ef2
TAMAYA-361 Replaced file observer with timer based variant. Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/d1364a41 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/d1364a41 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/d1364a41 Branch: refs/heads/master Commit: d1364a417d536e637c7e5511ba9ff35d2b493b06 Parents: a5ced94 Author: Anatole Tresch <[email protected]> Authored: Tue Nov 20 07:56:33 2018 +0100 Committer: Anatole Tresch <[email protected]> Committed: Tue Nov 20 07:56:33 2018 +0100 ---------------------------------------------------------------------- .../folderobserver/FileChangeListener.java | 42 +++++++------------- .../ObservingPropertySourceProvider.java | 22 ++++------ 2 files changed, 21 insertions(+), 43 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/d1364a41/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java ---------------------------------------------------------------------- diff --git a/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java b/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java index 9b6b93a..af8b05e 100644 --- a/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java +++ b/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/FileChangeListener.java @@ -28,6 +28,7 @@ import java.nio.file.StandardWatchEventKinds; import java.nio.file.WatchEvent; import java.nio.file.WatchKey; import java.nio.file.WatchService; +import java.util.TimerTask; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; @@ -42,7 +43,7 @@ import java.util.logging.Logger; * <p>If a file was removed then the listener will load using all files left.</p> * @author otaviojava */ -class FileChangeListener implements Runnable { +class FileChangeListener extends TimerTask { private static final Logger LOGGER = Logger.getLogger(FileChangeListener.class.getName()); @@ -71,42 +72,27 @@ class FileChangeListener implements Runnable { } } - /** - * Stops the listener service from observing the target directory. - */ - public void stopListener(){ - running = false; - } - @Override public void run() { if (watchService!=null || directory!=null) { return; } - while (running) { - watchFolder(); - } - } - - /** - * Start watching the current folder. - */ - private void watchFolder() { try { - WatchKey watckKey = watchService.take(); - for (WatchEvent<?> event : watckKey.pollEvents()) { - Path filePath = (Path) watckKey.watchable(); - if(event.kind().equals(StandardWatchEventKinds.ENTRY_CREATE)|| - event.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY) || - event.kind().equals(StandardWatchEventKinds.ENTRY_DELETE)){ - LOGGER.info("File change detected in: " + filePath.getFileName()); - observer.directoryChanged(filePath); + WatchKey watckKey = watchService.poll(); + if(watckKey!=null) { + for (WatchEvent<?> event : watckKey.pollEvents()) { + Path filePath = (Path) watckKey.watchable(); + if (event.kind().equals(StandardWatchEventKinds.ENTRY_CREATE) || + event.kind().equals(StandardWatchEventKinds.ENTRY_MODIFY) || + event.kind().equals(StandardWatchEventKinds.ENTRY_DELETE)) { + LOGGER.info("File change detected in: " + filePath.getFileName()); + observer.directoryChanged(filePath); + } } + watckKey.reset(); } - watckKey.reset(); - TimeUnit.SECONDS.sleep(1); } catch (Exception e) { - throw new FileChangeListenerException("An error happened when you tried to register to watch the folder", e); + throw new FileChangeListenerException("An error happened listening to watch the folder", e); } } http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/d1364a41/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java ---------------------------------------------------------------------- diff --git a/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java b/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java index c1393ad..727aaa8 100644 --- a/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java +++ b/modules/events/src/test/java/org/apache/tamaya/events/folderobserver/ObservingPropertySourceProvider.java @@ -25,15 +25,7 @@ import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Properties; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; @@ -65,7 +57,9 @@ public class ObservingPropertySourceProvider implements PropertySourceProvider, /** * The thread pool used. */ - private final ExecutorService executor = Executors.newSingleThreadExecutor(); + private final static Timer timer = new Timer("ObservingPropertySources", true); + + private FileChangeListener changeListener; /** * Constructor using an explicit directory, ignoring all kind of configuration, if setCurrent. @@ -76,14 +70,12 @@ public class ObservingPropertySourceProvider implements PropertySourceProvider, if (directory == null) { directory = getDirectory(); } - if (directory!=null){ + if (directory!=null) { synchronized (this.propertySources) { this.propertySources.addAll(readConfiguration(directory)); } - final Runnable runnable = new FileChangeListener(directory, this); - executor.execute(runnable); - } else { - executor.shutdown(); + changeListener = new FileChangeListener(directory, this); + timer.schedule(changeListener, 30000L, 30000L); } }
