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">
     &lt;session type="http|simpleClientSession"/&gt;?
-    &lt;loadBalance [policy="roundRobin"] [failover="true|false"]&gt;
+    &lt;loadBalance [policy="roundRobin"] [algorithm="impl of 
org.apache.synapse.endpoints.algorithms.LoadbalanceAlgorithm"]
+                    [failover="true|false"]&gt;
       &lt;endpoint .../&gt;+
       &lt;member hostName="host" [httpPort="port"] [httpsPort="port2"]&gt;+  
     &lt;/loadBalance&gt;

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 @@
         &lt;in&gt;
             &lt;send&gt;
                 &lt;endpoint name=&quot;dynamicLB&quot;&gt;
-                    &lt;dynamicLoadbalance failover=&quot;true&quot; 
policy=&quot;roundrobin&quot;&gt;
+                    &lt;dynamicLoadbalance failover=&quot;true&quot;
+                                           
algorithm=&quot;org.apache.synapse.endpoints.algorithms.RoundRobin&quot;&gt;
                         &lt;membershipHandler
                                 
class=&quot;org.apache.synapse.core.axis2.Axis2LoadBalanceMembershipHandler&quot;&gt;
                             &lt;property name=&quot;applicationDomain&quot; 
value=&quot;apache.axis2.app.domain&quot;/&gt;
@@ -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">    &lt;!-- Simple callout  mediator --&gt;
 &lt;definitions xmlns=&quot;http://ws.apache.org/ns/synapse&quot;&gt;
     &lt;callout 
serviceURL=&quot;http://localhost:9000/services/SimpleStockQuoteService&quot;


Reply via email to