You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by up...@apache.org on 2007/12/14 12:23:35 UTC
svn commit: r604168 - in
/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs:
PollTableEntry.java VFSConstants.java VFSOutTransportInfo.java
VFSTransportListener.java VFSTransportSender.java VFSUtils.java
Author: upul
Date: Fri Dec 14 03:23:05 2007
New Revision: 604168
URL: http://svn.apache.org/viewvc?rev=604168&view=rev
Log:
added timeout and retry for vfs transport
Modified:
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/PollTableEntry.java
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSConstants.java
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSOutTransportInfo.java
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportSender.java
webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSUtils.java
Modified: webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/PollTableEntry.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/PollTableEntry.java?rev=604168&r1=604167&r2=604168&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/PollTableEntry.java (original)
+++ webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/PollTableEntry.java Fri Dec 14 03:23:05 2007
@@ -65,6 +65,8 @@
/** where to move the file after total failure */
private String moveAfterFailure;
+ private int maxRetryCount;
+ private long reconnectTimeout;
public String getServiceName() {
return serviceName;
@@ -201,4 +203,21 @@
this.moveAfterFailure = moveAfterFailure;
}
}
+
+ public int getMaxRetryCount() {
+ return maxRetryCount;
+ }
+
+ public void setMaxRetryCount(int maxRetryCount) {
+ this.maxRetryCount = maxRetryCount;
+ }
+
+ public long getReconnectTimeout() {
+ return reconnectTimeout;
+ }
+
+ public void setReconnectTimeout(long reconnectTimeout) {
+ this.reconnectTimeout = reconnectTimeout;
+ }
+
}
Modified: webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSConstants.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSConstants.java?rev=604168&r1=604167&r2=604168&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSConstants.java (original)
+++ webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSConstants.java Fri Dec 14 03:23:05 2007
@@ -39,7 +39,12 @@
public static final String REPLY_FILE_NAME = "transport.vfs.ReplyFileName";
public static final String DEFAULT_RESPONSE_FILE = "response.xml";
-
+
+ public static final String MAX_RETRY_COUNT = "transport.vfs.MaxRetryCount";
+ public static final String RECONNECT_TIMEOUT = "transport.vfs.ReconnectTimeout";
+ public static final int DEFAULT_MAX_RETRY_COUNT = 3;
+ public static final long DEFAULT_RECONNECT_TIMEOUT = 30000;
+
// transport header property names used by the VFS transport
public static final String FILE_PATH = "FILE_PATH";
public static final String FILE_NAME = "FILE_NAME";
Modified: webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSOutTransportInfo.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSOutTransportInfo.java?rev=604168&r1=604167&r2=604168&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSOutTransportInfo.java (original)
+++ webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSOutTransportInfo.java Fri Dec 14 03:23:05 2007
@@ -19,10 +19,17 @@
package org.apache.synapse.transport.vfs;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.StringTokenizer;
+
import org.apache.axis2.transport.OutTransportInfo;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import com.sun.net.ssl.internal.www.protocol.https.Handler;
+
/**
* The VFS OutTransportInfo is a holder of information to send an outgoing message
* (e.g. a Response) to a VFS destination. Thus at a minimum a reference to a
@@ -35,6 +42,8 @@
private String outFileURI = null;
private String outFileName = null;
private String contentType = null;
+ private int maxRetryCount = 3;
+ private long reconnectTimeout = 30000;
VFSOutTransportInfo(String outFileURI) {
if (outFileURI.startsWith(VFSConstants.VFS_PREFIX)) {
@@ -42,6 +51,16 @@
} else {
this.outFileURI = outFileURI;
}
+
+ Map properties = getProperties(outFileURI);
+ if(properties.containsKey(VFSConstants.MAX_RETRY_COUNT)) {
+ String strMaxRetryCount = (String) properties.get(VFSConstants.MAX_RETRY_COUNT);
+ maxRetryCount = Integer.parseInt(strMaxRetryCount);
+ }
+ if(properties.containsKey(VFSConstants.RECONNECT_TIMEOUT)) {
+ String strReconnectTimeout = (String) properties.get(VFSConstants.RECONNECT_TIMEOUT);
+ reconnectTimeout = Long.parseLong(strReconnectTimeout) * 1000;
+ }
}
public void setContentType(String contentType) {
@@ -55,4 +74,38 @@
public String getOutFileName() {
return outFileName;
}
-}
+
+ public int getMaxRetryCount() {
+ return maxRetryCount;
+ }
+
+ public void setMaxRetryCount(int maxRetryCount) {
+ this.maxRetryCount = maxRetryCount;
+ }
+
+ public long getReconnectTimeout() {
+ return reconnectTimeout;
+ }
+
+ public void setReconnectTimeout(long reconnectTimeout) {
+ this.reconnectTimeout = reconnectTimeout;
+ }
+
+ public static Map getProperties(String url) {
+ Map h = new HashMap();
+ int propPos = url.indexOf("?");
+ if (propPos != -1) {
+ StringTokenizer st = new StringTokenizer(url.substring(propPos + 1), "&");
+ while (st.hasMoreTokens()) {
+ String token = st.nextToken();
+ int sep = token.indexOf("=");
+ if (sep != -1) {
+ h.put(token.substring(0, sep), token.substring(sep + 1));
+ } else {
+ continue; // ignore, what else can we do?
+ }
+ }
+ }
+ return h;
+ }
+}
\ No newline at end of file
Modified: webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java?rev=604168&r1=604167&r2=604168&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java (original)
+++ webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportListener.java Fri Dec 14 03:23:05 2007
@@ -145,21 +145,43 @@
private void scanFileOrDirectory(final PollTableEntry entry, String fileURI) {
FileObject fileObject = null;
- try {
- if (log.isDebugEnabled()) {
- log.debug("Scanning directory or file : " + fileURI);
- }
- fileObject = fsManager.resolveFile(fileURI);
-
- } catch (FileSystemException e) {
- processFailure("Unable to resolve file or directory : " + fileURI, e, entry);
- return;
- }
- if(fileObject == null) {
- processFailure("Failed to resolve file " + fileURI, null, entry);
- return;
+ if (log.isDebugEnabled()) {
+ log.debug("Scanning directory or file : " + fileURI);
}
+
+ boolean wasError = true;
+ int retryCount = 0;
+ int maxRetryCount = entry.getMaxRetryCount();
+ long reconnectionTimeout = entry.getReconnectTimeout();
+
+ while(wasError == true) {
+ try {
+ retryCount++;
+ fileObject = fsManager.resolveFile(fileURI);
+
+ if(fileObject == null) {
+ log.error("fileObject is null");
+ throw new FileSystemException("fileObject is null");
+ }
+
+ wasError = false;
+
+ } catch(FileSystemException e) {
+ log.error("cannot resolve fileObject", e);
+ if(maxRetryCount <= retryCount)
+ processFailure("cannot resolve fileObject repeatedly: " + e.getMessage(), e, entry);
+ return;
+ }
+
+ if(wasError == true) {
+ try {
+ Thread.sleep(reconnectionTimeout);
+ } catch (InterruptedException e2) {
+ e2.printStackTrace();
+ }
+ }
+ }
try {
if (fileObject.exists() && fileObject.isReadable()) {
@@ -486,6 +508,16 @@
service, VFSConstants.TRANSPORT_FILE_MOVE_AFTER_FAILURE);
entry.setMoveAfterFailure(moveDirectoryAfterFailure);
+ String strMaxRetryCount = BaseUtils.getOptionalServiceParam(
+ service, VFSConstants.MAX_RETRY_COUNT);
+ if(strMaxRetryCount != null)
+ entry.setMaxRetryCount(Integer.parseInt(strMaxRetryCount));
+
+ String strReconnectTimeout = BaseUtils.getOptionalServiceParam(
+ service, VFSConstants.RECONNECT_TIMEOUT);
+ if(strReconnectTimeout != null)
+ entry.setReconnectTimeout(Integer.parseInt(strReconnectTimeout) * 1000);
+
entry.setServiceName(service.getName());
schedulePoll(service, pollInterval);
pollTable.add(entry);
Modified: webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportSender.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportSender.java?rev=604168&r1=604167&r2=604168&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportSender.java (original)
+++ webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSTransportSender.java Fri Dec 14 03:23:05 2007
@@ -102,7 +102,39 @@
if (vfsOutInfo != null) {
FileObject replyFile = null;
try {
- replyFile = fsManager.resolveFile(vfsOutInfo.getOutFileURI());
+
+ boolean wasError = true;
+ int retryCount = 0;
+ int maxRetryCount = VFSUtils.getMaxRetryCount(msgCtx, vfsOutInfo);
+ long reconnectionTimeout = VFSUtils.getReconnectTimout(msgCtx, vfsOutInfo);
+
+ while(wasError == true) {
+ try {
+ retryCount++;
+ replyFile = fsManager.resolveFile(vfsOutInfo.getOutFileURI());
+
+ if(replyFile == null) {
+ log.error("replyFile is null");
+ throw new FileSystemException("replyFile is null");
+ }
+
+ wasError = false;
+
+ } catch(FileSystemException e) {
+ log.error("cannot resolve replyFile", e);
+ if(maxRetryCount <= retryCount)
+ handleException("cannot resolve replyFile repeatedly: " + e.getMessage(), e);
+ }
+
+ if(wasError == true) {
+ try {
+ Thread.sleep(reconnectionTimeout);
+ } catch (InterruptedException e2) {
+ e2.printStackTrace();
+ }
+ }
+ }
+
if (replyFile.exists()) {
if (replyFile.getType() == FileType.FOLDER) {
Modified: webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSUtils.java
URL: http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSUtils.java?rev=604168&r1=604167&r2=604168&view=diff
==============================================================================
--- webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSUtils.java (original)
+++ webservices/synapse/trunk/java/modules/transports/src/main/java/org/apache/synapse/transport/vfs/VFSUtils.java Fri Dec 14 03:23:05 2007
@@ -120,7 +120,23 @@
}
return fileName;
}
+
+ public static int getMaxRetryCount(MessageContext msgCtx, VFSOutTransportInfo vfsOutInfo) {
+ if(vfsOutInfo.getMaxRetryCount() != 0) {
+ return vfsOutInfo.getMaxRetryCount();
+ }
+
+ return VFSConstants.DEFAULT_MAX_RETRY_COUNT;
+ }
+ public static long getReconnectTimout(MessageContext msgCtx, VFSOutTransportInfo vfsOutInfo) {
+ if(vfsOutInfo.getReconnectTimeout() != 0) {
+ return vfsOutInfo.getReconnectTimeout();
+ }
+
+ return VFSConstants.DEFAULT_RECONNECT_TIMEOUT;
+ }
+
public static byte[] getBytesFromInputStream(InputStream is, int length) throws IOException {
byte[] bytes = new byte[length];
---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org