Author: ruwan
Date: Mon Oct 20 07:25:09 2008
New Revision: 706305
URL: http://svn.apache.org/viewvc?rev=706305&view=rev
Log:
Resolving the dynamic loadbalancing issues, which has been commented after
asnkha's commit to improve endpoints
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/LoadBalanceMembershipHandler.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2LoadBalanceMembershipHandler.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/AlgorithmContext.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/LoadbalanceAlgorithm.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/RoundRobin.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/DynamicLoadbalanceEndpointFactory.java
Mon Oct 20 07:25:09 2008
@@ -49,85 +49,85 @@
* </endpoint>
* </pre>
*/
-//public class DynamicLoadbalanceEndpointFactory extends EndpointFactory {
-// TODO FIX-RUWAN
-// private static final Log log =
LogFactory.getLog(DynamicLoadbalanceEndpointFactory.class);
-// private static DynamicLoadbalanceEndpointFactory instance =
-// new DynamicLoadbalanceEndpointFactory();
-//
-// private DynamicLoadbalanceEndpointFactory() {
-// }
-//
-// public static DynamicLoadbalanceEndpointFactory getInstance() {
-// return instance;
-// }
-//
-// protected Endpoint createEndpoint(OMElement epConfig, boolean
anonymousEndpoint) {
-//
-// OMElement loadbalanceElement =
-// epConfig.getFirstChildWithName(new
QName(SynapseConstants.SYNAPSE_NAMESPACE,
-//
"dynamicLoadbalance"));
-//
-// if (loadbalanceElement != null) {
-//
-// DynamicLoadbalanceEndpoint loadbalanceEndpoint = new
DynamicLoadbalanceEndpoint();
-//
-// // set endpoint name
-// OMAttribute name =
-// epConfig.getAttribute(new
QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
-//
-// if (name != null) {
-// loadbalanceEndpoint.setName(name.getAttributeValue());
-// }
-//
-// //TODO: Handle session affinity
-//
-// // set if failover is turned off
-// String failover = loadbalanceElement.getAttributeValue(new
QName("failover"));
-// if (failover != null && failover.equalsIgnoreCase("false")) {
-// loadbalanceEndpoint.setFailover(false);
-// }
-//
-// OMElement eventHandler =
-// loadbalanceElement.
-// getFirstChildWithName(new
QName(SynapseConstants.SYNAPSE_NAMESPACE,
-//
"membershipHandler"));
-// if (eventHandler != null) {
-// String clazz =
-// eventHandler.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE,
-//
"class")).trim();
-// try {
-// LoadBalanceMembershipHandler lbMembershipHandler =
-// (LoadBalanceMembershipHandler)
Class.forName(clazz).newInstance();
-// Properties properties = new Properties();
-// for (Iterator props =
eventHandler.getChildrenWithName(new QName(
-// SynapseConstants.SYNAPSE_NAMESPACE,
"property")); props.hasNext();) {
-// OMElement prop = (OMElement) props.next();
-// String propName =
-// prop.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE,
-//
"name")).trim();
-// String propValue =
-// prop.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE,
-//
"value")).trim();
-// properties.put(propName, propValue);
-// }
-//
-// // Set load balance algorithm
-// LoadbalanceAlgorithm algorithm =
-// LoadbalanceAlgorithmFactory.
-//
createLoadbalanceAlgorithm(loadbalanceElement);
-// lbMembershipHandler.init(properties, algorithm);
-//
loadbalanceEndpoint.setLoadBalanceMembershipHandler(lbMembershipHandler);
-// } catch (Exception e) {
-// String msg = "Could not instantiate " +
-// "LoadBalanceMembershipHandler implementation " +
clazz;
-// log.error(msg, e);
-// throw new SynapseException(msg, e);
-// }
-// }
-//
-// return loadbalanceEndpoint;
-// }
-// return null;
-// }
-//}
+public class DynamicLoadbalanceEndpointFactory extends EndpointFactory {
+
+ private static final Log log =
LogFactory.getLog(DynamicLoadbalanceEndpointFactory.class);
+ private static DynamicLoadbalanceEndpointFactory instance =
+ new DynamicLoadbalanceEndpointFactory();
+
+ private DynamicLoadbalanceEndpointFactory() {
+ }
+
+ public static DynamicLoadbalanceEndpointFactory getInstance() {
+ return instance;
+ }
+
+ protected Endpoint createEndpoint(OMElement epConfig, boolean
anonymousEndpoint) {
+
+ OMElement loadbalanceElement =
+ epConfig.getFirstChildWithName(new
QName(SynapseConstants.SYNAPSE_NAMESPACE,
+
"dynamicLoadbalance"));
+
+ if (loadbalanceElement != null) {
+
+ DynamicLoadbalanceEndpoint loadbalanceEndpoint = new
DynamicLoadbalanceEndpoint();
+
+ // set endpoint name
+ OMAttribute name =
+ epConfig.getAttribute(new
QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
+
+ if (name != null) {
+ loadbalanceEndpoint.setName(name.getAttributeValue());
+ }
+
+ //TODO: Handle session affinity
+
+ // set if failover is turned off
+ String failover = loadbalanceElement.getAttributeValue(new
QName("failover"));
+ if (failover != null && failover.equalsIgnoreCase("false")) {
+ loadbalanceEndpoint.setFailover(false);
+ }
+
+ OMElement eventHandler =
+ loadbalanceElement.
+ getFirstChildWithName(new
QName(SynapseConstants.SYNAPSE_NAMESPACE,
+
"membershipHandler"));
+ if (eventHandler != null) {
+ String clazz =
+ eventHandler.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE,
+
"class")).trim();
+ try {
+ LoadBalanceMembershipHandler lbMembershipHandler =
+ (LoadBalanceMembershipHandler)
Class.forName(clazz).newInstance();
+ Properties properties = new Properties();
+ for (Iterator props = eventHandler.getChildrenWithName(new
QName(
+ SynapseConstants.SYNAPSE_NAMESPACE, "property"));
props.hasNext();) {
+ OMElement prop = (OMElement) props.next();
+ String propName =
+ prop.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE,
+
"name")).trim();
+ String propValue =
+ prop.getAttributeValue(new
QName(XMLConfigConstants.NULL_NAMESPACE,
+
"value")).trim();
+ properties.put(propName, propValue);
+ }
+
+ // Set load balance algorithm
+ LoadbalanceAlgorithm algorithm =
+ LoadbalanceAlgorithmFactory.
+
createLoadbalanceAlgorithm(loadbalanceElement, null);
+ lbMembershipHandler.init(properties, algorithm);
+
loadbalanceEndpoint.setLoadBalanceMembershipHandler(lbMembershipHandler);
+ } catch (Exception e) {
+ String msg = "Could not instantiate " +
+ "LoadBalanceMembershipHandler implementation " +
clazz;
+ log.error(msg, e);
+ throw new SynapseException(msg, e);
+ }
+ }
+
+ return loadbalanceEndpoint;
+ }
+ return null;
+ }
+}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/EndpointFactory.java
Mon Oct 20 07:25:09 2008
@@ -427,8 +427,7 @@
(new QName(SynapseConstants.SYNAPSE_NAMESPACE,
"dynamicLoadbalance"));
if (dlbElement != null) {
//TODO: Handle Session affinitiy & failover
-// TODO FIX-RUWAN
-// return DynamicLoadbalanceEndpointFactory.getInstance();
+ return DynamicLoadbalanceEndpointFactory.getInstance();
}
OMElement foElement = configElement.getFirstChildWithName
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/LoadBalanceMembershipHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/LoadBalanceMembershipHandler.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/LoadBalanceMembershipHandler.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/LoadBalanceMembershipHandler.java
Mon Oct 20 07:25:09 2008
@@ -30,35 +30,35 @@
* Generally, this interface will work with a GCF or other membership
discovery mechanism
*/
public interface LoadBalanceMembershipHandler {
-// TODO FIX-RUWAN
-// /**
-// * Initialize this
-// *
-// * @param properties The properties specific to this
LoadBalanceMembershipHandler
-// * @param algorithm The load balancing algorithm
-// */
-// void init(Properties properties, LoadbalanceAlgorithm algorithm);
-//
-// /**
-// * Set the Axis2 ConfigurationContext
-// *
-// * @param configCtx Axis2 ConfigurationContext
-// */
-// void setConfigurationContext(ConfigurationContext configCtx);
-//
-// /**
-// * Get the Axis2 ConfigurationContext
-// *
-// * @return Axis2 ConfigurationContext
-// */
-// ConfigurationContext getConfigurationContext();
-//
-// /**
-// * Get the next application member to whom the message has to be sent to
-// *
-// * @param context The AlgorithmContext which holds information needed
for the algorithm
-// * @return Next application member to whom the message has to be sent to
-// */
-// Member getNextApplicationMember(AlgorithmContext context);
-//
+
+ /**
+ * Initialize this
+ *
+ * @param properties The properties specific to this
LoadBalanceMembershipHandler
+ * @param algorithm The load balancing algorithm
+ */
+ void init(Properties properties, LoadbalanceAlgorithm algorithm);
+
+ /**
+ * Set the Axis2 ConfigurationContext
+ *
+ * @param configCtx Axis2 ConfigurationContext
+ */
+ void setConfigurationContext(ConfigurationContext configCtx);
+
+ /**
+ * Get the Axis2 ConfigurationContext
+ *
+ * @return Axis2 ConfigurationContext
+ */
+ ConfigurationContext getConfigurationContext();
+
+ /**
+ * Get the next application member to whom the message has to be sent to
+ *
+ * @param context The AlgorithmContext which holds information needed for
the algorithm
+ * @return Next application member to whom the message has to be sent to
+ */
+ Member getNextApplicationMember(AlgorithmContext context);
+
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2LoadBalanceMembershipHandler.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2LoadBalanceMembershipHandler.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2LoadBalanceMembershipHandler.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2LoadBalanceMembershipHandler.java
Mon Oct 20 07:25:09 2008
@@ -34,7 +34,7 @@
/**
* Bridge between Axis2 membership notification and Synapse load balancing
*/
-public class Axis2LoadBalanceMembershipHandler implements
LoadBalanceMembershipHandler{
+public class Axis2LoadBalanceMembershipHandler implements
LoadBalanceMembershipHandler {
private static final Log log =
LogFactory.getLog(Axis2LoadBalanceMembershipHandler.class);
private String lbDomain;
@@ -86,9 +86,8 @@
* @param context The AlgorithmContext
* @return The current member
*/
-// TODO FIX-RUWAN
-// public Member getNextApplicationMember(AlgorithmContext context) {
-// algorithm.setApplicationMembers(lbEventHandler.getMembers());
-// return algorithm.getNextApplicationMember(context);
-// }
+ public Member getNextApplicationMember(AlgorithmContext context) {
+ algorithm.setApplicationMembers(lbEventHandler.getMembers());
+ return algorithm.getNextApplicationMember(context);
+ }
}
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/DynamicLoadbalanceEndpoint.java
Mon Oct 20 07:25:09 2008
@@ -39,114 +39,123 @@
*/
public class DynamicLoadbalanceEndpoint extends LoadbalanceEndpoint {
-// TODO FIX-RUWAN
-// private static final Log log =
LogFactory.getLog(DynamicLoadbalanceEndpoint.class);
-//
-// /**
-// * The algorithm context , place holder for keep any runtime states
related to the load balance
-// * algorithm
-// */
-// private final AlgorithmContext algorithmContext = new AlgorithmContext();
-//
-// private LoadBalanceMembershipHandler lbMembershipHandler;
-//
-// public DynamicLoadbalanceEndpoint() {
-// }
-//
-// public void setLoadBalanceMembershipHandler(LoadBalanceMembershipHandler
lbMembershipHandler) {
-// this.lbMembershipHandler = lbMembershipHandler;
-// }
-//
-// public void send(MessageContext synCtx) {
-// EndpointReference to = synCtx.getTo();
-// DynamicLoadbalanceFaultHandler faultHandler = new
DynamicLoadbalanceFaultHandler(to);
-// if (failover) {
-// synCtx.pushFaultHandler(faultHandler);
-// }
-// ConfigurationContext configCtx =
-// ((Axis2MessageContext)
synCtx).getAxis2MessageContext().getConfigurationContext();
-// if (lbMembershipHandler.getConfigurationContext() == null) {
-// lbMembershipHandler.setConfigurationContext(configCtx);
-// }
+ private static final Log log =
LogFactory.getLog(DynamicLoadbalanceEndpoint.class);
+
+ /**
+ * The algorithm context , place holder for keep any runtime states
related to the load balance
+ * algorithm
+ */
+ private AlgorithmContext algorithmContext;
+
+ public void init(ConfigurationContext cc) {
+ if (!initialized) {
+ super.init(cc);
+ if (algorithmContext == null) {
+ algorithmContext = new AlgorithmContext(isClusteringEnabled,
cc, getName());
+ }
+ }
+ }
+
+ private LoadBalanceMembershipHandler lbMembershipHandler;
+
+ public DynamicLoadbalanceEndpoint() {
+ }
+
+ public void setLoadBalanceMembershipHandler(LoadBalanceMembershipHandler
lbMembershipHandler) {
+ this.lbMembershipHandler = lbMembershipHandler;
+ }
+
+ public void send(MessageContext synCtx) {
+ EndpointReference to = synCtx.getTo();
+ DynamicLoadbalanceFaultHandler faultHandler = new
DynamicLoadbalanceFaultHandler(to);
+ if (isFailover()) {
+ synCtx.pushFaultHandler(faultHandler);
+ }
+ ConfigurationContext configCtx =
+ ((Axis2MessageContext)
synCtx).getAxis2MessageContext().getConfigurationContext();
+ if (lbMembershipHandler.getConfigurationContext() == null) {
+ lbMembershipHandler.setConfigurationContext(configCtx);
+ }
// algorithmContext.setConfigurationContext(configCtx);
-// sendToApplicationMember(synCtx, to, faultHandler);
-// }
-//
-// public void setName(String name) {
-// super.setName(name);
+ sendToApplicationMember(synCtx, to, faultHandler);
+ }
+
+ public void setName(String name) {
+ super.setName(name);
// algorithmContext.setContextID(name);
-// }
-//
-// private void sendToApplicationMember(MessageContext synCtx,
-// EndpointReference to,
-// DynamicLoadbalanceFaultHandler
faultHandler) {
-// org.apache.axis2.context.MessageContext axis2MsgCtx =
-// ((Axis2MessageContext) synCtx).getAxis2MessageContext();
-//
-// String transport = axis2MsgCtx.getTransportIn().getName();
-// Member currentMember =
-//
lbMembershipHandler.getNextApplicationMember(algorithmContext);
-// faultHandler.setCurrentMember(currentMember);
-// if (currentMember != null) {
-//
-// // URL rewrite
-// if (transport.equals("http") || transport.equals("https")) {
-// String address = to.getAddress();
-// if (address.indexOf(":") != -1) {
-// try {
-// address = new URL(address).getPath();
-// } catch (MalformedURLException e) {
-// String msg = "URL " + address + " is malformed";
-// log.error(msg, e);
-// throw new SynapseException(msg, e);
-// }
-// }
-// EndpointReference epr =
-// new EndpointReference(transport + "://" +
currentMember.getHostName() +
-// ":" +
currentMember.getHttpPort() + address);
-// synCtx.setTo(epr);
-// if (failover) {
-// synCtx.getEnvelope().build();
-// }
-//
-// AddressEndpoint endpoint = new AddressEndpoint();
-// EndpointDefinition definition = new EndpointDefinition();
-// endpoint.setEndpoint(definition);
-// endpoint.send(synCtx);
-// } else {
-// log.error("Cannot load balance for non-HTTP/S transport " +
transport);
-// }
-// } else {
-// synCtx.getFaultStack().pop(); // Remove the
DynamicLoadbalanceFaultHandler
-// String msg = "No application members available";
-// log.error(msg);
-// throw new SynapseException(msg);
-// }
-// }
-//
-// /**
-// * This FaultHandler will try to resend the message to another member if
an error occurs
-// * while sending to some member. This is a failover mechanism
-// */
-// private class DynamicLoadbalanceFaultHandler extends FaultHandler {
-//
-// private EndpointReference to;
-// private Member currentMember;
-//
-// public void setCurrentMember(Member currentMember) {
-// this.currentMember = currentMember;
-// }
-//
-// private DynamicLoadbalanceFaultHandler(EndpointReference to) {
-// this.to = to;
-// }
-//
-// public void onFault(MessageContext synCtx) {
-// if (currentMember == null) {
-// return;
-// }
-// synCtx.pushFaultHandler(this);
-// sendToApplicationMember(synCtx, to, this);
-// }
-// }
+ }
+
+ private void sendToApplicationMember(MessageContext synCtx,
+ EndpointReference to,
+ DynamicLoadbalanceFaultHandler
faultHandler) {
+ org.apache.axis2.context.MessageContext axis2MsgCtx =
+ ((Axis2MessageContext) synCtx).getAxis2MessageContext();
+
+ String transport = axis2MsgCtx.getTransportIn().getName();
+ Member currentMember =
+ lbMembershipHandler.getNextApplicationMember(algorithmContext);
+ faultHandler.setCurrentMember(currentMember);
+ if (currentMember != null) {
+
+ // URL rewrite
+ if (transport.equals("http") || transport.equals("https")) {
+ String address = to.getAddress();
+ if (address.indexOf(":") != -1) {
+ try {
+ address = new URL(address).getPath();
+ } catch (MalformedURLException e) {
+ String msg = "URL " + address + " is malformed";
+ log.error(msg, e);
+ throw new SynapseException(msg, e);
+ }
+ }
+ EndpointReference epr =
+ new EndpointReference(transport + "://" +
currentMember.getHostName() +
+ ":" +
currentMember.getHttpPort() + address);
+ synCtx.setTo(epr);
+ if (isFailover()) {
+ synCtx.getEnvelope().build();
+ }
+
+ AddressEndpoint endpoint = new AddressEndpoint();
+ EndpointDefinition definition = new EndpointDefinition();
+ endpoint.setDefinition(definition);
+ endpoint.send(synCtx);
+ } else {
+ log.error("Cannot load balance for non-HTTP/S transport " +
transport);
+ }
+ } else {
+ synCtx.getFaultStack().pop(); // Remove the
DynamicLoadbalanceFaultHandler
+ String msg = "No application members available";
+ log.error(msg);
+ throw new SynapseException(msg);
+ }
+ }
+
+ /**
+ * This FaultHandler will try to resend the message to another member if
an error occurs
+ * while sending to some member. This is a failover mechanism
+ */
+ private class DynamicLoadbalanceFaultHandler extends FaultHandler {
+
+ private EndpointReference to;
+ private Member currentMember;
+
+ public void setCurrentMember(Member currentMember) {
+ this.currentMember = currentMember;
+ }
+
+ private DynamicLoadbalanceFaultHandler(EndpointReference to) {
+ this.to = to;
+ }
+
+ public void onFault(MessageContext synCtx) {
+ if (currentMember == null) {
+ return;
+ }
+ synCtx.pushFaultHandler(this);
+ sendToApplicationMember(synCtx, to, this);
+ }
+ }
}
+
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/AlgorithmContext.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/AlgorithmContext.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/AlgorithmContext.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/AlgorithmContext.java
Mon Oct 20 07:25:09 2008
@@ -81,7 +81,7 @@
*
* @param currentEPR The current position
*/
- public void setCurrentEPR(int currentEPR) {
+ public void setCurrentEndpointIndex(int currentEPR) {
if (Boolean.TRUE.equals(isClusteringEnabled)) {
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/LoadbalanceAlgorithm.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/LoadbalanceAlgorithm.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/LoadbalanceAlgorithm.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/LoadbalanceAlgorithm.java
Mon Oct 20 07:25:09 2008
@@ -36,15 +36,14 @@
*
* @param members The application members
*/
-// TODO FIX-RUWAN
-// void setApplicationMembers(List<Member> members);
-//
-// /**
-// * Set the endpoints
-// *
-// * @param endpoints The endpoints
-// */
-// void setEndpoints(List<Endpoint> endpoints);
+ void setApplicationMembers(List<Member> members);
+
+ /**
+ * Set the endpoints
+ *
+ * @param endpoints The endpoints
+ */
+ void setEndpoints(List<Endpoint> endpoints);
/**
* This method returns the next node according to the algorithm
implementation.
@@ -64,8 +63,7 @@
* @param algorithmContext The context in which holds run time states
related to the algorithm
* @return Next application member to which the request has to be sent to
*/
-// TODO FIX-RUWAN
-// Member getNextApplicationMember(AlgorithmContext algorithmContext);
+ Member getNextApplicationMember(AlgorithmContext algorithmContext);
/**
* Resets the algorithm to its initial position. Initial position depends
on the implementation.
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/RoundRobin.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/RoundRobin.java?rev=706305&r1=706304&r2=706305&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/RoundRobin.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/endpoints/algorithms/RoundRobin.java
Mon Oct 20 07:25:09 2008
@@ -19,6 +19,7 @@
package org.apache.synapse.endpoints.algorithms;
+import org.apache.axis2.clustering.Member;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.MessageContext;
@@ -41,10 +42,20 @@
*/
private List endpoints = null;
+ private List<Member> members;
+
public RoundRobin(List endpoints) {
this.endpoints = endpoints;
}
+ public void setApplicationMembers(List<Member> members) {
+ this.members = members;
+ }
+
+ public void setEndpoints(List<Endpoint> endpoints) {
+ //To change body of implemented methods use File | Settings | File
Templates.
+ }
+
/**
* Choose an active endpoint using the round robin algorithm. If there are
no active endpoints
* available, returns null.
@@ -69,7 +80,7 @@
} else {
currentEPR++;
}
- algorithmContext.setCurrentEPR(currentEPR);
+ algorithmContext.setCurrentEndpointIndex(currentEPR);
}
attempts++;
@@ -82,11 +93,33 @@
return nextEndpoint;
}
+ public Member getNextApplicationMember(AlgorithmContext algorithmContext) {
+ if (members.size() == 0) {
+ return null;
+ }
+ int currentMemberIndex = algorithmContext.getCurrentEndpointIndex();
+ if (currentMemberIndex >= members.size()) {
+ currentMemberIndex = 0;
+ }
+ Member current = members.get(currentMemberIndex);
+ if (currentMemberIndex == members.size() - 1) {
+ currentMemberIndex = 0;
+ } else {
+ currentMemberIndex++;
+ }
+ algorithmContext.setCurrentEndpointIndex(currentMemberIndex);
+ if(log.isDebugEnabled()) {
+ log.debug("Members : " + members.size());
+ log.debug("Current member: " + current);
+ }
+ return current;
+ }
+
public void reset(AlgorithmContext algorithmContext) {
if (log.isDebugEnabled()) {
log.debug("Resetting the Round Robin loadbalancing algorithm ...");
}
- algorithmContext.setCurrentEPR(0);
+ algorithmContext.setCurrentEndpointIndex(0);
}
public String getName() {