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