You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2008/08/01 01:19:42 UTC

svn commit: r681542 - /servicemix/components/bindings/servicemix-ftp/trunk/src/main/java/org/apache/servicemix/ftp/FtpPollerEndpoint.java

Author: gnodet
Date: Thu Jul 31 16:19:42 2008
New Revision: 681542

URL: http://svn.apache.org/viewvc?rev=681542&view=rev
Log:
SM-1491: Allow the ftp poller to be stateless and not maintain a map of all pending exchanges

Modified:
    servicemix/components/bindings/servicemix-ftp/trunk/src/main/java/org/apache/servicemix/ftp/FtpPollerEndpoint.java

Modified: servicemix/components/bindings/servicemix-ftp/trunk/src/main/java/org/apache/servicemix/ftp/FtpPollerEndpoint.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-ftp/trunk/src/main/java/org/apache/servicemix/ftp/FtpPollerEndpoint.java?rev=681542&r1=681541&r2=681542&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-ftp/trunk/src/main/java/org/apache/servicemix/ftp/FtpPollerEndpoint.java (original)
+++ servicemix/components/bindings/servicemix-ftp/trunk/src/main/java/org/apache/servicemix/ftp/FtpPollerEndpoint.java Thu Jul 31 16:19:42 2008
@@ -65,6 +65,7 @@
     private ConcurrentMap<String, FtpData> openExchanges = new ConcurrentHashMap<String, FtpData>();
     private QName targetOperation;
     private URI uri;
+    private boolean stateless = true;
 
     protected class FtpData {
         final String file;
@@ -209,14 +210,26 @@
         this.marshaler = marshaler;
     }
 
-    public QName getTargetOperation() { return targetOperation; }
+    public QName getTargetOperation() {
+        return targetOperation;
+    }
 
-    public void setTargetOperation(QName targetOperation) { this.targetOperation = targetOperation; }
+    public void setTargetOperation(QName targetOperation) {
+        this.targetOperation = targetOperation;
+    }
 
     public void setChangeWorkingDirectory(boolean changeWorkingDirectory) {
         this.changeWorkingDirectory = changeWorkingDirectory;
     }
 
+    public boolean isStateless() {
+        return stateless;
+    }
+
+    public void setStateless(boolean stateless) {
+        this.stateless = stateless;
+    }
+
     // Implementation methods
     //-------------------------------------------------------------------------
 
@@ -316,7 +329,11 @@
         }
 
         marshaler.readMessage(exchange, message, in, file);
-        this.openExchanges.put(exchange.getExchangeId(), new FtpData(file, ftp, in));
+        if (stateless) {
+            exchange.setProperty(FtpData.class.getName(), new FtpData(file, ftp, in));
+        } else {
+            this.openExchanges.put(exchange.getExchangeId(), new FtpData(file, ftp, in));
+        }
         send(exchange);
     }
 
@@ -325,9 +342,14 @@
     }
 
     public void process(MessageExchange exchange) throws Exception {
+        FtpData data;
+        if (stateless) {
+            data = (FtpData) exchange.getProperty(FtpData.class.getName());
+        } else {
+            data = this.openExchanges.remove(exchange.getExchangeId());
+        }
         // check for done or error
-        if (this.openExchanges.containsKey(exchange.getExchangeId())) {
-            FtpData data = this.openExchanges.get(exchange.getExchangeId());
+        if (data != null) {
             logger.debug("Releasing " + data.file);
             try {
                 // Close ftp related stuff
@@ -348,8 +370,6 @@
                     throw e;
                 }
             } finally {
-                // remove the open exchange
-                openExchanges.remove(exchange.getExchangeId());
                 // unlock the file
                 unlockAsyncFile(data.file);
                 // release ftp client