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