You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2008/08/26 05:06:52 UTC

svn commit: r688946 - in /synapse/trunk/java: modules/core/src/main/java/org/apache/synapse/config/xml/ modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/ modules/core/src/main/java/org/apache/synapse/config/xml/endpoints/utils/ module...

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 {@link 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;