cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From serg...@apache.org
Subject svn commit: r1154900 - /cxf/trunk/rt/core/src/main/java/org/apache/cxf/clustering/RetryStrategy.java
Date Mon, 08 Aug 2011 10:11:42 GMT
Author: sergeyb
Date: Mon Aug  8 10:11:42 2011
New Revision: 1154900

URL: http://svn.apache.org/viewvc?rev=1154900&view=rev
Log:
[CXF-3596] Updating RetryStrategy to optionally move to the next address after specific number
of retries

Modified:
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/clustering/RetryStrategy.java

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/clustering/RetryStrategy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/clustering/RetryStrategy.java?rev=1154900&r1=1154899&r2=1154900&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/clustering/RetryStrategy.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/clustering/RetryStrategy.java Mon Aug 
8 10:11:42 2011
@@ -32,13 +32,46 @@ import org.apache.cxf.message.Exchange;
  */
 public class RetryStrategy extends SequentialStrategy {
 
+    private int maxNumberOfRetries;
+    private int counter;
+    
     /* (non-Javadoc)
      * @see org.apache.cxf.clustering.AbstractStaticFailoverStrategy#getAlternateEndpoints(
      * org.apache.cxf.message.Exchange)
      */
     @Override
     public List<Endpoint> getAlternateEndpoints(Exchange exchange) {
-        return getEndpoints(exchange, true);
+        return getEndpoints(exchange, stillTheSameAddress());
+    }
+
+    protected boolean stillTheSameAddress() {
+        if (maxNumberOfRetries == 0) {
+            return true;
+        }
+        // let the target selector move to the next address
+        // and then stay on the same address for maxNumberOfRetries
+        synchronized (this) {
+            if (++counter <= maxNumberOfRetries) {
+                return true;    
+            } else {
+                counter = 0;
+                return false;
+            }
+        }
+        
+    }
+    
+
+    public void setMaxNumberOfRetries(int maxNumberOfRetries) {
+        if (maxNumberOfRetries < 0) {
+            throw new IllegalArgumentException();
+        }
+        this.maxNumberOfRetries = maxNumberOfRetries;
+    }
+
+
+    public int getMaxNumberOfRetries() {
+        return maxNumberOfRetries;
     }
 
 }
\ No newline at end of file



Mime
View raw message