You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ge...@apache.org on 2007/07/16 13:53:30 UTC

svn commit: r556595 - /incubator/servicemix/branches/servicemix-3.1/deployables/bindingcomponents/servicemix-file/src/main/java/org/apache/servicemix/file/FilePollerEndpoint.java

Author: gertv
Date: Mon Jul 16 04:53:29 2007
New Revision: 556595

URL: http://svn.apache.org/viewvc?view=rev&rev=556595
Log:
Fix for SM-1004: File poller deletes files, even if errors occur while processing

Modified:
    incubator/servicemix/branches/servicemix-3.1/deployables/bindingcomponents/servicemix-file/src/main/java/org/apache/servicemix/file/FilePollerEndpoint.java

Modified: incubator/servicemix/branches/servicemix-3.1/deployables/bindingcomponents/servicemix-file/src/main/java/org/apache/servicemix/file/FilePollerEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/deployables/bindingcomponents/servicemix-file/src/main/java/org/apache/servicemix/file/FilePollerEndpoint.java?view=diff&rev=556595&r1=556594&r2=556595
==============================================================================
--- incubator/servicemix/branches/servicemix-3.1/deployables/bindingcomponents/servicemix-file/src/main/java/org/apache/servicemix/file/FilePollerEndpoint.java (original)
+++ incubator/servicemix/branches/servicemix-3.1/deployables/bindingcomponents/servicemix-file/src/main/java/org/apache/servicemix/file/FilePollerEndpoint.java Mon Jul 16 04:53:29 2007
@@ -23,7 +23,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import javax.jbi.JBIException;
 import javax.jbi.management.DeploymentException;
+import javax.jbi.messaging.ExchangeStatus;
 import javax.jbi.messaging.InOnly;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
@@ -200,11 +202,14 @@
                 String uri = file.toURI().relativize(aFile.toURI()).toString();
                 Lock lock = lockManager.getLock(uri);
                 if (lock.tryLock()) {
+                    boolean unlock = true;
                     try {
-                        processFileAndDelete(aFile);
+                        unlock = processFileAndDelete(aFile);
                     }
                     finally {
-                        lock.unlock();
+                        if (unlock) {
+                            lock.unlock();
+                        }
                     }
                 } else {
                     if (logger.isDebugEnabled()) {
@@ -215,23 +220,27 @@
         });
     }
 
-    protected void processFileAndDelete(File aFile) {
+    protected boolean processFileAndDelete(File aFile) {
+        boolean unlock = true;
         try {
             if (logger.isDebugEnabled()) {
                 logger.debug("Processing file " + aFile);
             }
             if (aFile.exists()) {
                 processFile(aFile);
+                unlock = false;
                 if (isDeleteFile()) {
                     if (!aFile.delete()) {
                         throw new IOException("Could not delete file " + aFile);
                     }
+                    unlock = true;
                 }
             }
         }
         catch (Exception e) {
             logger.error("Failed to process file: " + aFile + ". Reason: " + e, e);
         }
+        return unlock;
     }
 
     protected void processFile(File aFile) throws Exception {
@@ -244,6 +253,13 @@
         marshaler.readMessage(exchange, message, in, name);
         sendSync(exchange);
         in.close();
+        if (exchange.getStatus() == ExchangeStatus.ERROR) {
+            Exception e = exchange.getError();
+            if (e == null) {
+                e = new JBIException("Unkown error");
+            }
+            throw e;
+        }
     }
 
     public String getLocationURI() {