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);
         }
     }
 

Reply via email to