Author: ruwan
Date: Mon Aug 25 20:06:52 2008
New Revision: 688946
URL: http://svn.apache.org/viewvc?rev=688946&view=rev
Log:
Fixing the issue SYNAPSE-433 (committing for azeez)
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
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/LoadbalanceEndpointFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.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
synapse/trunk/java/repository/conf/sample/synapse_sample_57.xml
synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml
synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/XMLConfigConstants.java
Mon Aug 25 20:06:52 2008
@@ -76,7 +76,8 @@
public static final String STATISTICS_DISABLE = "disable";
public static final String SUSPEND_DURATION_ON_FAILURE =
"suspendDurationOnFailure";
- public static final String ALGORITHM_NAME = "policy";
+ public static final String LOADBALANCE_POLICY = "policy";
+ public static final String LOADBALANCE_ALGORITHM = "algorithm";
public static final String ONREJECT = "onReject";
public static final String ONACCEPT = "onAccept";
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=688946&r1=688945&r2=688946&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 Aug 25 20:06:52 2008
@@ -115,7 +115,7 @@
// Set load balance algorithm
LoadbalanceAlgorithm algorithm =
LoadbalanceAlgorithmFactory.
-
createLoadbalanceAlgorithm(loadbalanceElement, null);
+
createLoadbalanceAlgorithm(loadbalanceElement);
lbMembershipHandler.init(properties, algorithm);
loadbalanceEndpoint.setLoadBalanceMembershipHandler(lbMembershipHandler);
} catch (Exception e) {
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointFactory.java
Mon Aug 25 20:06:52 2008
@@ -89,7 +89,7 @@
log.error(msg);
throw new SynapseException(msg);
}
- ArrayList<Endpoint> endpoints
+ List<Endpoint> endpoints
= getEndpoints(loadbalanceElement,
loadbalanceEndpoint);
loadbalanceEndpoint.setEndpoints(endpoints);
algorithm =
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/LoadbalanceEndpointSerializer.java
Mon Aug 25 20:06:52 2008
@@ -57,12 +57,9 @@
= fac.createOMElement("loadbalance",
SynapseConstants.SYNAPSE_OMNAMESPACE);
endpointElement.addChild(loadbalanceElement);
- LoadbalanceAlgorithm algorithm = loadbalanceEndpoint.getAlgorithm();
- String algorithmName = "roundRobin";
- if (algorithm instanceof RoundRobin) {
- algorithmName = "roundRobin";
- }
- loadbalanceElement.addAttribute(XMLConfigConstants.ALGORITHM_NAME,
algorithmName, null);
+
loadbalanceElement.addAttribute(XMLConfigConstants.LOADBALANCE_ALGORITHM,
+
loadbalanceEndpoint.getAlgorithm().getClass().getName(),
+ null);
// set if failover is turned off in the endpoint
if (!loadbalanceEndpoint.isFailover()) {
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/SALoadbalanceEndpointFactory.java
Mon Aug 25 20:06:52 2008
@@ -32,7 +32,7 @@
import org.apache.synapse.endpoints.dispatch.SoapSessionDispatcher;
import javax.xml.namespace.QName;
-import java.util.ArrayList;
+import java.util.List;
/**
* Creates [EMAIL PROTECTED] SALoadbalanceEndpoint} from an XML configuration.
@@ -98,7 +98,7 @@
if(loadbalanceElement != null) {
// set endpoints
- ArrayList<Endpoint> endpoints = getEndpoints(loadbalanceElement,
loadbalanceEndpoint);
+ List<Endpoint> endpoints = getEndpoints(loadbalanceElement,
loadbalanceEndpoint);
loadbalanceEndpoint.setEndpoints(endpoints);
// set load balance algorithm
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
---
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java
(original)
+++
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/LoadbalanceAlgorithmFactory.java
Mon Aug 25 20:06:52 2008
@@ -22,12 +22,15 @@
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMElement;
import org.apache.axis2.clustering.Member;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.SynapseException;
import org.apache.synapse.config.xml.XMLConfigConstants;
+import org.apache.synapse.endpoints.Endpoint;
import org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm;
import org.apache.synapse.endpoints.algorithms.RoundRobin;
import javax.xml.namespace.QName;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -36,40 +39,60 @@
*/
public class LoadbalanceAlgorithmFactory {
- public static LoadbalanceAlgorithm createLoadbalanceAlgorithm(OMElement
loadbalanceElement,
- ArrayList
endpoints) {
- LoadbalanceAlgorithm algorithm = null;
- String algorithmName = "roundRobin";
- OMAttribute algoAttribute =
- loadbalanceElement.getAttribute(new QName(null,
XMLConfigConstants.ALGORITHM_NAME));
- if(algoAttribute != null) {
- algorithmName = algoAttribute.getAttributeValue();
- }
+ private static final Log log =
LogFactory.getLog(LoadbalanceAlgorithmFactory.class);
- if (algorithmName.equalsIgnoreCase("roundRobin")) {
- algorithm = new RoundRobin(endpoints);
- }
+ public static LoadbalanceAlgorithm createLoadbalanceAlgorithm(OMElement
loadbalanceElement) {
+ return getLoadbalanceAlgorithm(loadbalanceElement);
+ }
+ public static LoadbalanceAlgorithm createLoadbalanceAlgorithm(OMElement
loadbalanceElement,
+
List<Endpoint> endpoints) {
+ LoadbalanceAlgorithm algorithm =
getLoadbalanceAlgorithm(loadbalanceElement);
+ algorithm.setEndpoints(endpoints);
return algorithm;
}
public static LoadbalanceAlgorithm createLoadbalanceAlgorithm2(OMElement
loadbalanceElement,
List<Member> members) {
- LoadbalanceAlgorithm algorithm = null;
+ LoadbalanceAlgorithm algorithm =
getLoadbalanceAlgorithm(loadbalanceElement);
+ algorithm.setApplicationMembers(members);
+ return algorithm;
+ }
- String algorithmName = "roundRobin";
- OMAttribute algoAttribute =
- loadbalanceElement.getAttribute(new QName(null,
XMLConfigConstants.ALGORITHM_NAME));
- if (algoAttribute != null) {
- algorithmName = algoAttribute.getAttributeValue();
+ private static LoadbalanceAlgorithm getLoadbalanceAlgorithm(OMElement
loadbalanceElement) {
+ LoadbalanceAlgorithm algorithm = new RoundRobin(); // Default
algorithm is round-robin
+ OMAttribute policyAtt =
+ loadbalanceElement.getAttribute(new QName(null,
+
XMLConfigConstants.LOADBALANCE_POLICY));
+ OMAttribute algorithmAtt =
+ loadbalanceElement.getAttribute(new QName(null,
+
XMLConfigConstants.LOADBALANCE_ALGORITHM));
+ if (policyAtt != null && algorithmAtt != null) {
+ String msg = "You cannot specify both the 'policy' & 'algorithm'
in the configuration. " +
+ "It is sufficient to provide only the 'algorithm'.";
+ log.fatal(msg); // We cannot continue execution. Hence it is
logged at fatal level
+ throw new SynapseException(msg);
}
-
- if (algorithmName.equalsIgnoreCase("roundRobin")) {
- algorithm = new RoundRobin();
- algorithm.setApplicationMembers(members);
+ if (algorithmAtt != null) {
+ String algorithmStr = algorithmAtt.getAttributeValue().trim();
+ try {
+ algorithm = (LoadbalanceAlgorithm)
Class.forName(algorithmStr).newInstance();
+ } catch (Exception e) {
+ String msg = "Cannot instantiate LoadbalanceAlgorithm
implementation class " +
+ algorithmStr;
+ log.fatal(msg, e); // We cannot continue execution. Hence it
is logged at fatal level
+ throw new SynapseException(msg, e);
+ }
+ } else if (policyAtt != null) {
+ if (!policyAtt.getAttributeValue().trim().equals("roundRobin")) {
+ String msg = "Unsupported algorithm " +
policyAtt.getAttributeValue().trim() +
+ " specified. Please use the 'algorithm' attribute
to specify the " +
+ "correct loadbalance algorithm implementation.";
+ log.fatal(msg); // We cannot continue execution. Hence it is
logged at fatal level
+ throw new SynapseException(msg);
+ }
}
-
return algorithm;
}
}
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=688946&r1=688945&r2=688946&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 Aug 25 20:06:52 2008
@@ -39,6 +39,13 @@
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.
*
* @param synapseMessageContext SynapseMessageContext of the current
message
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=688946&r1=688945&r2=688946&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 Aug 25 20:06:52 2008
@@ -25,7 +25,6 @@
import org.apache.synapse.MessageContext;
import org.apache.synapse.endpoints.Endpoint;
-import java.util.ArrayList;
import java.util.List;
/**
@@ -39,17 +38,13 @@
/**
* Endpoints list for the round robin algorithm
*/
- private ArrayList endpoints = null;
+ private List<Endpoint> endpoints = null;
/**
* List of application members in the loadb balance group
*/
private List<Member> members;
- public RoundRobin(ArrayList endpoints) {
- this.endpoints = endpoints;
- }
-
public RoundRobin() {
}
@@ -57,6 +52,10 @@
this.members = members;
}
+ public void setEndpoints(List<Endpoint> endpoints) {
+ this.endpoints = endpoints;
+ }
+
/**
* Choose an active endpoint using the round robin algorithm. If there are
no active endpoints
* available, returns null.
@@ -78,7 +77,7 @@
do {
// two successive clients could get the same endpoint if not
synchronized.
synchronized (this) {
- nextEndpoint = (Endpoint) endpoints.get(currentEPR);
+ nextEndpoint = endpoints.get(currentEPR);
if (currentEPR == endpoints.size() - 1) {
currentEPR = 0;
Modified: synapse/trunk/java/repository/conf/sample/synapse_sample_57.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/sample/synapse_sample_57.xml?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
--- synapse/trunk/java/repository/conf/sample/synapse_sample_57.xml (original)
+++ synapse/trunk/java/repository/conf/sample/synapse_sample_57.xml Mon Aug 25
20:06:52 2008
@@ -24,7 +24,8 @@
<in>
<send>
<endpoint name="dynamicLB">
- <dynamicLoadbalance failover="true" policy="roundrobin">
+ <dynamicLoadbalance failover="true"
+
algorithm="org.apache.synapse.endpoints.algorithms.RoundRobin">
<membershipHandler
class="org.apache.synapse.core.axis2.Axis2LoadBalanceMembershipHandler">
<property name="applicationDomain"
value="apache.axis2.app.domain"/>
Modified: synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
--- synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml
(original)
+++ synapse/trunk/java/src/site/xdoc/Synapse_Configuration_Language.xml Mon Aug
25 20:06:52 2008
@@ -633,7 +633,8 @@
</p>
<pre xml:space="preserve">
<session type="http|simpleClientSession"/>?
- <loadBalance [policy="roundRobin"] [failover="true|false"]>
+ <loadBalance [policy="roundRobin"] [algorithm="impl of
org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm"]
+ [failover="true|false"]>
<endpoint .../>+
<member hostName="host" [httpPort="port"] [httpsPort="port2"]>+
</loadBalance>
Modified: synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml?rev=688946&r1=688945&r2=688946&view=diff
==============================================================================
--- synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml (original)
+++ synapse/trunk/java/src/site/xdoc/Synapse_Samples.xml Mon Aug 25 20:06:52
2008
@@ -1316,7 +1316,8 @@
<in>
<send>
<endpoint name="dynamicLB">
- <dynamicLoadbalance failover="true"
policy="roundrobin">
+ <dynamicLoadbalance failover="true"
+
algorithm="org.apache.synapse.endpoints.algorithms.RoundRobin">
<membershipHandler
class="org.apache.synapse.core.axis2.Axis2LoadBalanceMembershipHandler">
<property name="applicationDomain"
value="apache.axis2.app.domain"/>
@@ -3815,7 +3816,7 @@
<p>The Callout mediator calls the given service URL with the request message
which is given by the source attribute, waits for the response and attaches the
received response to the destination which is given by the target attribute.
Both the source and the target can be a key or an XPath. In the case of the
source, this key refers to either a message context property or to a local
entry. For the target, this key refers to a message context property only. </p>
<h2>
<a name="Sample430" id="Sample430">Sample 430: Simple Callout Mediator for
synchronizing web service invocation</a></h2>
-<p> </p>
+<p>� </p>
<pre xml:space="preserve"> <!-- Simple callout mediator -->
<definitions xmlns="http://ws.apache.org/ns/synapse">
<callout
serviceURL="http://localhost:9000/services/SimpleStockQuoteService"