You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by rw...@apache.org on 2011/04/21 11:18:24 UTC

svn commit: r1095634 - /geronimo/server/trunk/plugins/hotdeploy/geronimo-hot-deploy/src/main/java/org/apache/geronimo/deployment/hot/DirectoryMonitor.java

Author: rwonly
Date: Thu Apr 21 09:18:24 2011
New Revision: 1095634

URL: http://svn.apache.org/viewvc?rev=1095634&view=rev
Log:
GERONIMO-5832 Error message repeatedly show on server console when deployed web application twice 

Modified:
    geronimo/server/trunk/plugins/hotdeploy/geronimo-hot-deploy/src/main/java/org/apache/geronimo/deployment/hot/DirectoryMonitor.java

Modified: geronimo/server/trunk/plugins/hotdeploy/geronimo-hot-deploy/src/main/java/org/apache/geronimo/deployment/hot/DirectoryMonitor.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/hotdeploy/geronimo-hot-deploy/src/main/java/org/apache/geronimo/deployment/hot/DirectoryMonitor.java?rev=1095634&r1=1095633&r2=1095634&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/hotdeploy/geronimo-hot-deploy/src/main/java/org/apache/geronimo/deployment/hot/DirectoryMonitor.java (original)
+++ geronimo/server/trunk/plugins/hotdeploy/geronimo-hot-deploy/src/main/java/org/apache/geronimo/deployment/hot/DirectoryMonitor.java Thu Apr 21 09:18:24 2011
@@ -31,6 +31,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 import org.apache.geronimo.deployment.cli.DeployUtils;
 import org.apache.geronimo.kernel.repository.Artifact;
@@ -122,7 +123,7 @@ public class DirectoryMonitor implements
     private boolean done = false;
     private Listener listener; // a little cheesy, but do we really need multiple listeners?
     private final Map<String, FileInfo> files;
-    private final List<Artifact> toRemove = new ArrayList<Artifact>();
+    private final CopyOnWriteArrayList <Artifact> toRemove = new CopyOnWriteArrayList <Artifact>();
     private File monitorFile;
 
     public DirectoryMonitor(File directory, Listener listener, int pollIntervalMillis) {
@@ -180,28 +181,25 @@ public class DirectoryMonitor implements
 
     public void removeModuleId(Artifact id) {
         log.info("Hot deployer notified that an artifact was removed: "+id);
-        synchronized (toRemove) {
-            toRemove.add(id);
-        }
+        toRemove.add(id);
     }
 
     private void doRemoves() {
-        synchronized (toRemove) {
-            synchronized(files) {
-                for (Artifact id: toRemove) {
-                    for (Iterator<String> it = files.keySet().iterator(); it.hasNext();) {
-                        String path = it.next();
-                        FileInfo info = files.get(path);
-                        Artifact target = Artifact.create(info.getConfigId());
-                        if(id.matches(target)) { // need to remove record & delete file
-                            File file = new File(path);
-                            if(file.exists()) { // if not, probably it's deletion kicked off this whole process
-                                log.info("Hot deployer deleting "+id);
-                                if(!FileUtils.recursiveDelete(file)) {
-                                    log.error("Hot deployer unable to delete "+path);
-                                }
-                                it.remove();
+        synchronized (files) {
+            for (Artifact id : toRemove) {
+                for (Iterator<String> filesItr = files.keySet().iterator(); filesItr.hasNext();) {
+                    String path = filesItr.next();
+                    FileInfo info = files.get(path);
+                    Artifact target = Artifact.create(info.getConfigId());
+                    if (id.matches(target)) { // need to remove record & delete file
+                        File file = new File(path);
+                        if (file.exists()) { // if not, probably it's deletion kicked off this whole process
+                            log.info("Hot deployer deleting " + id);
+                            if (!FileUtils.recursiveDelete(file)) {
+                                log.error("Hot deployer unable to delete " + path);
                             }
+                            filesItr.remove();
+                            toRemove.remove(id);
                         }
                     }
                 }