You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@synapse.apache.org by vi...@apache.org on 2006/02/13 13:15:15 UTC

svn commit: r377363 - in /incubator/synapse/trunk/java/src/sampleMediators/sla: ./ META-INF/ META-INF/services.xml META-INF/sla.xml README.txt SLAConfigurator.java SLAConstants.java SLAMediator.java SLAObject.java SLAStack.java

Author: vikas
Date: Mon Feb 13 04:15:13 2006
New Revision: 377363

URL: http://svn.apache.org/viewcvs?rev=377363&view=rev
Log:
Checking in the modified SLAMediator by Soumadeep/Infravio

Added:
    incubator/synapse/trunk/java/src/sampleMediators/sla/
    incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/
    incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/services.xml
    incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/sla.xml
    incubator/synapse/trunk/java/src/sampleMediators/sla/README.txt
    incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConfigurator.java
    incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConstants.java
    incubator/synapse/trunk/java/src/sampleMediators/sla/SLAMediator.java
    incubator/synapse/trunk/java/src/sampleMediators/sla/SLAObject.java
    incubator/synapse/trunk/java/src/sampleMediators/sla/SLAStack.java

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/services.xml
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/services.xml?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/services.xml (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/services.xml Mon Feb 13 04:15:13 2006
@@ -0,0 +1,10 @@
+<!-- Can be used if the mediator is to be provided as an axis2 service-->
+<service name="SLAMediator">
+    <parameter name="ServiceClass" locked="false">
+        sampleMediators.sla.SLAMediator</parameter>
+    <operation name="mediate">
+        <messageReceiver
+                class="org.apache.synapse.axis2.ServiceMediatorMessageReceiver"/>
+    </operation>
+</service>
+  
\ No newline at end of file

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/sla.xml
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/sla.xml?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/sla.xml (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/META-INF/sla.xml Mon Feb 13 04:15:13 2006
@@ -0,0 +1,17 @@
+<slaConfig>
+    <slaRequest ip="192.168.6.71" enabled="true">
+        <serviceURL url="http://www.webservicex.net/stockquote.asmx" enabled="true" >
+            <priority>0</priority>
+        </serviceURL>    
+    </slaRequest>
+    <slaRequest ip="192.168.6.81" enabled="true">
+        <serviceURL url="http://www.webservicex.net/stockquote.asmx" enabled="true" >
+            <priority>0</priority>
+        </serviceURL>    
+    </slaRequest>    
+    <slaRequest ip="192.168.6.127" enabled="true">
+        <serviceURL url="http://www.webservicex.net/stockquote.asmx" enabled="true" >
+            <priority>1</priority>
+        </serviceURL>    
+    </slaRequest>
+</slaConfig>
\ No newline at end of file

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/README.txt
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/README.txt?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/README.txt (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/README.txt Mon Feb 13 04:15:13 2006
@@ -0,0 +1,37 @@
+Note
+-----
+
+A SLA or Service Level Aggrement, is between a consumer and a provider, enforced through a 
+contract or a policy.
+In this case its enforced through the SLAMediator and the configuration is stored in the sla.xml.
+Every known consumer, identified by the IP address of his system is alloted a priority for every 
+service for which SLA is to be enforced.
+In case more than 1 request for a given service, lands on the server at the same time,
+the SLA mediator if provisioned will be able to arrange these requests based on the priority assigned to
+the them for the given request. 
+
+Priority
+---------
+
+0  has the highest priority.(it's an int value)
+-1 is returned in case there is no priority configured for a 
+   particular (consumer, service) combination.
+
+Return Value
+-------------
+
+true  - SLA successfully executed.
+false - Error while procesing.
+
+
+Running SLA Mediator Sample
+===================================
+
+1. Copy synapse.xml in this repository to synapse_repository in the binary distribution.
+2. Place the SLAMediator.aar in the synape_repository/services.
+3. Using the Ant command "ant synapse", start the stand-alone synapse server. 
+   This will be start at port 8080. 
+4. Use Ant command "ant" StockQuoteClient available in this folder to run the sample. 
+
+The configuration details are available in sla.xml, which is located in SLAMediator's META-INF folder. 
+

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConfigurator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConfigurator.java?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConfigurator.java (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConfigurator.java Mon Feb 13 04:15:13 2006
@@ -0,0 +1,86 @@
+package sampleMediators.sla;
+
+import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;
+import org.apache.axis2.om.OMElement;
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import javax.xml.namespace.QName;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.io.InputStream;
+
+
+public class SLAConfigurator {
+    private static Map SLAConfig;
+    private Log log = LogFactory.getLog(getClass());
+
+
+       public SLAConfigurator(InputStream inStream) {
+
+           try {
+               Map configMap = generateMap(inStream);
+               setConfig(configMap);
+           } catch (Exception e) {
+               log.info(e);
+           }
+       }
+
+       private Map generateMap(InputStream inStream) throws Exception {
+
+
+           StAXOMBuilder staxOMBuilder;
+           staxOMBuilder = new StAXOMBuilder(inStream);
+           Map generatedMap = new HashMap();
+           OMElement config = staxOMBuilder.getDocumentElement();
+           config.build();
+           Iterator clientItr = config.getChildrenWithName(new QName("slaRequest"));
+           while (clientItr.hasNext()) {
+               OMElement clientEle = (OMElement) clientItr.next();
+               String enabled = clientEle.getAttributeValue(new QName("enabled"));
+               boolean isClientEnabled = enabled.equalsIgnoreCase("true");
+               if(isClientEnabled){
+
+                   String clientKey = clientEle.getAttributeValue(new QName("ip"));
+                   Iterator serviceItr = clientEle.getChildrenWithName(new QName("serviceURL"));
+
+                   Map dataMap = new HashMap();
+
+                   while (serviceItr.hasNext()) {
+                       OMElement serviceEle = (OMElement) serviceItr.next();
+                       OMElement priorityEle = serviceEle.getFirstChildWithName(new QName("priority"));
+                       String serviceEnabled = serviceEle.getAttributeValue(new QName("enabled"));
+                       boolean isServiceEnabled = serviceEnabled.equalsIgnoreCase("true");
+                       if(isServiceEnabled) {
+                           String serviceKey = serviceEle.getAttributeValue(new QName("url"));
+                           String priority = priorityEle.getText();
+                           dataMap.put(serviceKey,priority);
+                       }
+                   }
+                   generatedMap.put(clientKey, dataMap);
+               }
+           }
+           return generatedMap;
+       }
+
+       public int getPriority(String ip, EndpointReference to) {
+
+           int priority=-1;
+           Map clientMap = (Map) SLAConfig.get(ip);
+           if(clientMap!=null){
+               log.info("address" + to.getAddress());
+               String priorityValue = (String)clientMap.get(to.getAddress());
+                if(priorityValue!=null){
+                    priority = Integer.parseInt(priorityValue);
+                }
+           }
+           return priority;
+       }
+
+       public void setConfig(Map configMap) {
+
+           SLAConfig = configMap;
+
+       }
+}
\ No newline at end of file

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConstants.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConstants.java?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConstants.java (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/SLAConstants.java Mon Feb 13 04:15:13 2006
@@ -0,0 +1,10 @@
+
+package sampleMediators.sla;
+
+public interface SLAConstants {
+
+    public static final String CFG_SLA_ENABLED = "slaEnabled";
+    public static final String CFG_SLA_RESULT = "synapse.sla.result";
+    public static final String CFG_SLA_XML = "sla.xml";
+    public static final String CFG_XML_FOLDER = "META-INF";
+}

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/SLAMediator.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/SLAMediator.java?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/SLAMediator.java (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/SLAMediator.java Mon Feb 13 04:15:13 2006
@@ -0,0 +1,87 @@
+package sampleMediators.sla;
+
+import org.apache.axis2.addressing.EndpointReference;
+import org.apache.synapse.SynapseMessage;
+import org.apache.synapse.SynapseEnvironment;
+import org.apache.synapse.axis2.Axis2SynapseMessage;
+import org.apache.synapse.api.Mediator;
+import org.apache.synapse.api.EnvironmentAware;
+import org.apache.axis2.context.MessageContext;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.InputStream;
+
+public class SLAMediator implements Mediator, EnvironmentAware {
+
+    private ClassLoader classLoader;
+    private SynapseEnvironment se;
+    private Log log = LogFactory.getLog(getClass());
+    public SLAMediator() {
+    }
+
+    public boolean mediate(SynapseMessage synapseMessageContext) {
+
+        try {
+            log.info("SLA Mediator!");
+            MessageContext mc = ((Axis2SynapseMessage)synapseMessageContext).getMessageContext();
+            String resource = SLAConstants.CFG_XML_FOLDER+"/"+SLAConstants.CFG_SLA_XML;
+            InputStream inStream = classLoader.getResourceAsStream(resource);
+            final SLAConfigurator slaConfigurator = new SLAConfigurator(inStream);
+            SLAStack slaStack = null;
+            try{
+                if(se.getProperty("PRIORITY_STACK")!=null){
+                    slaStack = (SLAStack)se.getProperty("PRIORITY_STACK");
+                }
+                else{
+                    slaStack = new SLAStack();
+                    se.setProperty("PRIORITY_STACK",slaStack);
+                }
+            }catch(Exception ex){
+                log.info(ex);
+
+            }
+            String fromAddress = (String)synapseMessageContext.getFrom().getAddress();
+            int priority = slaConfigurator.getPriority(fromAddress,synapseMessageContext.getTo());
+            SLAObject slaObject = new SLAObject(priority,System.currentTimeMillis(),fromAddress);
+            try{
+            slaStack.addRequest(slaObject);
+            }catch(Exception ex){
+              log.info(ex);
+            }
+
+            while(true)
+            {
+              if(!slaStack.isEmpty()){
+                SLAObject slaObjectStack = (SLAObject)slaStack.get(0);
+                if(slaObjectStack.equals(slaObject))
+                {
+                  slaStack.remove(0);
+                  break;
+                }
+              }else
+              {
+                break;
+              }
+            }
+            
+            return true;
+
+        } catch (Exception e) {
+            log.info(e);
+            return false;
+        }
+    }
+
+    public void setSynapseEnvironment(SynapseEnvironment se) {
+
+        this.se = se;
+        if(se!=null){
+            log.info("ENVIRONMENT NOT NULL IN SLA");
+        }
+    }
+
+    public void setClassLoader(ClassLoader cl) {
+        this.classLoader = cl;
+    }
+}

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/SLAObject.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/SLAObject.java?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/SLAObject.java (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/SLAObject.java Mon Feb 13 04:15:13 2006
@@ -0,0 +1,63 @@
+package sampleMediators.sla;
+
+public class SLAObject implements Comparable {
+
+    int priority;
+    long time;
+    Object object;
+
+    public SLAObject() {
+    }
+
+    public SLAObject(int priority, long time, Object object) {
+        this.priority = priority;
+        this.time = time;
+        this.object = object;
+    }
+
+    public int getPriority() {
+        return priority;
+    }
+
+    public void setPriority(int index) {
+        this.priority = index;
+    }
+
+    public long getTime() {
+        return time;
+    }
+
+    public void setTime(long time) {
+        this.time = time;
+    }
+
+    public Object getObject() {
+        return object;
+    }
+
+    public void setObject(Object object) {
+        this.object = object;
+    }
+
+    public int compareTo(Object o2) {
+        SLAObject obj1 = this;
+        SLAObject obj2 = (SLAObject) o2;
+        if (obj1.getTime() == obj2.getTime()) {
+            if (obj1.getPriority() == obj2.getPriority()) {
+                if (obj1.hashCode() == obj2.hashCode()) {
+                    return 0;
+                } else if (obj1.hashCode() < obj2.hashCode()) {
+                    return -1;
+                } else return 1;
+            } else if (obj1.getPriority() < obj2.getPriority()) {
+                return -1;
+            } else {
+                return 1;
+            }
+        } else if (obj1.getTime() < obj2.getTime()) {
+            return -1;
+        } else {
+            return 1;
+        }
+    }
+}

Added: incubator/synapse/trunk/java/src/sampleMediators/sla/SLAStack.java
URL: http://svn.apache.org/viewcvs/incubator/synapse/trunk/java/src/sampleMediators/sla/SLAStack.java?rev=377363&view=auto
==============================================================================
--- incubator/synapse/trunk/java/src/sampleMediators/sla/SLAStack.java (added)
+++ incubator/synapse/trunk/java/src/sampleMediators/sla/SLAStack.java Mon Feb 13 04:15:13 2006
@@ -0,0 +1,17 @@
+package sampleMediators.sla;
+import java.util.Collections;
+import java.util.ArrayList;
+
+public class SLAStack extends ArrayList
+{
+  public SLAStack()
+  {
+  }
+  public void addRequest(SLAObject slaObject)
+  {
+      this.add(slaObject);
+      if(this.size() > 1){
+          Collections.sort(this);
+      }
+  }
+}
\ No newline at end of file



---------------------------------------------------------------------
To unsubscribe, e-mail: synapse-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: synapse-dev-help@ws.apache.org