Author: chathura_ce
Date: Wed Mar 7 04:28:57 2007
New Revision: 515549
URL: http://svn.apache.org/viewvc?view=rev&rev=515549
Log:
Improved the failover behavior of endpoints according to the FaultHandler stack
model.
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/RoundRobin.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/FailoverEndpoint.java
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/LoadbalanceEndpoint.java
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/RoundRobin.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/RoundRobin.java?view=diff&rev=515549&r1=515548&r2=515549
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/RoundRobin.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/algorithms/RoundRobin.java
Wed Mar 7 04:28:57 2007
@@ -35,7 +35,8 @@
}
/**
- * Choose an active endpoint using the round robin algorithm.
+ * Choose an active endpoint using the round robin algorithm. If there are
no active endpoints
+ * available, returns null.
*
* @param synapseMessageContext
* @return endpoint to send the next message
@@ -56,7 +57,7 @@
attempts++;
if (attempts > endpoints.size()) {
- throw new SynapseException("All endpoints have failed.");
+ return null;
}
} while (!nextEndpoint.isActive());
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/FailoverEndpoint.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/FailoverEndpoint.java?view=diff&rev=515549&r1=515548&r2=515549
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/FailoverEndpoint.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/FailoverEndpoint.java
Wed Mar 7 04:28:57 2007
@@ -20,9 +20,18 @@
package org.apache.synapse.mediators.builtin.send.endpoints;
import org.apache.synapse.MessageContext;
+import org.apache.synapse.FaultHandler;
import java.util.ArrayList;
+/**
+ * FailoverEndpoint can have multiple child endpoints. It will always try to
send messages to current
+ * endpoint. If the current endpoint is failing, it gets another active
endpoint from the list and
+ * make it the current endpoint. Then the message is sent to the current
endpoint and if it fails, above
+ * procedure repeats until there are no active endpoints. If all endpoints are
failing and parent
+ * endpoint is available, this will delegate the problem to the parent
endpoint. If parent endpoint
+ * is not available it will pop the next FaultHandler and delegate the problem
to that.
+ */
public class FailoverEndpoint implements Endpoint {
private String name = null;
@@ -52,6 +61,11 @@
if (!foundEndpoint) {
if (parentEndpoint != null) {
parentEndpoint.onChildEndpointFail(this,
synMessageContext);
+ } else {
+ Object o = synMessageContext.getFaultStack().pop();
+ if (o != null) {
+ ((FaultHandler) o).handleFault(synMessageContext);
+ }
}
}
}
Modified:
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/LoadbalanceEndpoint.java
URL:
http://svn.apache.org/viewvc/webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/LoadbalanceEndpoint.java?view=diff&rev=515549&r1=515548&r2=515549
==============================================================================
---
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/LoadbalanceEndpoint.java
(original)
+++
webservices/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/builtin/send/endpoints/LoadbalanceEndpoint.java
Wed Mar 7 04:28:57 2007
@@ -20,10 +20,20 @@
package org.apache.synapse.mediators.builtin.send.endpoints;
import org.apache.synapse.MessageContext;
+import org.apache.synapse.FaultHandler;
import
org.apache.synapse.mediators.builtin.send.algorithms.LoadbalanceAlgorithm;
import java.util.ArrayList;
+/**
+ * Load balance endpoint can have multiple endpoints. It will route messages
according to the
+ * specified loadbalance algorithm. This will assume that all immediate child
endpoints are identical
+ * in state (state is replicated) or state is not maintained at those
endpoints. If an endpoint is
+ * failing, the failed endpoint is marked as inactive and the message to the
next endpoint obtained
+ * using the loadbalance algorithm. If all the endpoints have failed and the
parent endpoint is
+ * available, onChildEndpointFail(...) methos of parent endpoint is called. If
parent is not
+ * avialable, this will call next FaultHandler for the message context.
+ */
public class LoadbalanceEndpoint implements Endpoint {
private ArrayList endpoints = null;
@@ -38,7 +48,16 @@
public void send(MessageContext synMessageContext) {
Endpoint endpoint = algorithm.getNextEndpoint(synMessageContext);
- endpoint.send(synMessageContext);
+ if (endpoint != null) {
+ endpoint.send(synMessageContext);
+ } else {
+ if (parentEndpoint != null) {
+ parentEndpoint.onChildEndpointFail(this, synMessageContext);
+ } else {
+ Object o = synMessageContext.getFaultStack().pop();
+ ((FaultHandler) o).handleFault(synMessageContext);
+ }
+ }
}
public String getName() {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]