You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by su...@apache.org on 2011/03/28 07:27:37 UTC

svn commit: r1086124 - in /synapse/trunk/java/modules/core/src: main/java/org/apache/synapse/config/ main/java/org/apache/synapse/config/xml/ main/java/org/apache/synapse/mediators/template/ test/java/org/apache/synapse/config/

Author: supun
Date: Mon Mar 28 05:27:37 2011
New Revision: 1086124

URL: http://svn.apache.org/viewvc?rev=1086124&view=rev
Log:
applying the patch synapse_SYNAPSE-738_config_changes_update.patch for SYNAPSE-738, thanks Udayanga for the contribution

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/AbstractSynapseObserver.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SynapseXMLConfigurationFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorFactory.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorSerializer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java
    synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/SynapseObserverTest.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/AbstractSynapseObserver.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/AbstractSynapseObserver.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/AbstractSynapseObserver.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/AbstractSynapseObserver.java Mon Mar 28 05:27:37 2011
@@ -28,6 +28,7 @@ import org.apache.synapse.core.axis2.Pro
 import org.apache.synapse.endpoints.Endpoint;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.mediators.template.TemplateMediator;
 
 public abstract class AbstractSynapseObserver implements SynapseObserver {
 
@@ -47,6 +48,16 @@ public abstract class AbstractSynapseObs
                 "from the Synapse configuration successfully");
     }
 
+    public void sequenceTemplateAdded(Mediator template) {
+        log.info("Template : " + ((TemplateMediator) template).getName() + " was added " +
+                "to the Synapse configuration successfully" );
+    }
+
+    public void sequenceTemplateRemoved(Mediator template) {
+        log.info("Template : " + ((TemplateMediator) template).getName() + " was removed " +
+                "to the Synapse configuration successfully" );
+    }
+
     public void entryAdded(Entry entry) {
         log.info("Local entry : " + entry.getKey() + " was added " +
                 "to the Synapse configuration successfully");

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseConfiguration.java Mon Mar 28 05:27:37 2011
@@ -25,9 +25,11 @@ import org.apache.axis2.engine.AxisConfi
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.*;
+import org.apache.synapse.config.xml.TemplateMediatorFactory;
 import org.apache.synapse.config.xml.XMLToTemplateMapper;
 import org.apache.synapse.config.xml.endpoints.TemplateFactory;
 import org.apache.synapse.endpoints.Template;
+import org.apache.synapse.mediators.template.TemplateMediator;
 import org.apache.synapse.message.processors.MessageProcessor;
 import org.apache.synapse.message.store.MessageStore;
 import org.apache.synapse.deployers.SynapseArtifactDeploymentStore;
@@ -61,6 +63,7 @@ public class SynapseConfiguration implem
     private static final String ENTRY = "entry";
     private static final String ENDPOINT = "endpoint";
     private static final String SEQUENCE = "sequence"; 
+    private static final String TEMPLATE = "sequence-template";
 
     /**
      * The remote registry made available to the Synapse configuration. Only one
@@ -173,6 +176,24 @@ public class SynapseConfiguration implem
         }
     }
 
+    /**
+     * Add a sequence-template into the local registry. If a template already exists by the specified
+     * key a runtime exception is thrown.
+     *
+     * @param key
+     *            the name for the sequence
+     * @param mediator
+     *            a Sequence mediator
+     */
+    public synchronized void addSequenceTemplate(String key, TemplateMediator mediator) {
+        assertAlreadyExists(key, TEMPLATE);
+        localRegistry.put(key, mediator);
+
+        for (SynapseObserver o : observers) {
+            o.sequenceTemplateAdded(mediator);
+        }
+    }
+
     public synchronized void updateSequence(String key, Mediator mediator) {
         localRegistry.put(key, mediator);
         for (SynapseObserver o : observers) {
@@ -220,6 +241,89 @@ public class SynapseConfiguration implem
     }
 
     /**
+     * Returns the map of defined synapse templates in the configuration excluding the
+     * fetched sequences from remote registry.
+     *
+     * @return Map of Templates defined in the local configuration
+     */
+    public Map<String, TemplateMediator> getSequenceTemplates() {
+
+        Map<String, TemplateMediator> definedTemplates = new HashMap<String, TemplateMediator>();
+
+        synchronized (this) {
+            for (Object o : localRegistry.values()) {
+                if (o instanceof TemplateMediator) {
+                    TemplateMediator template = (TemplateMediator) o;
+                    definedTemplates.put(template.getName(), template);
+                }
+            }
+        }
+        return definedTemplates;
+    }
+
+     /**
+     * Return the template specified with the given key
+     *
+     * @param key
+     *            the key being referenced for the template
+     * @return the template referenced by the key from local/remote registry
+     */
+    public TemplateMediator getSequenceTemplate(String key) {
+        Object o = getEntry(key);
+        if (o instanceof TemplateMediator) {
+            return (TemplateMediator) o;
+        }
+
+        Entry entry = null;
+        if (o == null) {
+            entry = new Entry(key);
+            entry.setType(Entry.REMOTE_ENTRY);
+        } else {
+            Object object = localRegistry.get(key);
+            if (object instanceof Entry) {
+                entry = (Entry) object;
+            }
+        }
+
+        assertEntryNull(entry, key);
+
+        //noinspection ConstantConditions
+        if (entry.getMapper() == null) {
+            entry.setMapper(new XMLToTemplateMapper());
+        }
+
+        if (entry.getType() == Entry.REMOTE_ENTRY) {
+            if (registry != null) {
+                o = registry.getResource(entry, getProperties());
+                if (o != null && o instanceof TemplateMediator) {
+                    localRegistry.put(key, entry);
+                    return (TemplateMediator) o;
+                } else if (o instanceof OMNode) {
+                    TemplateMediator m = (TemplateMediator) new TemplateMediatorFactory().createMediator(
+                            (OMElement) o, properties);
+                    if (m != null) {
+                        entry.setValue(m);
+                        return m;
+                    }
+                }
+            }
+        } else {
+            Object value = entry.getValue();
+            if (value instanceof OMNode) {
+                Object object = entry.getMapper().getObjectFromOMNode(
+                        (OMNode) value, getProperties());
+                if (object instanceof TemplateMediator) {
+                    entry.setValue(object);
+                    return (TemplateMediator) object;
+                }
+            }
+        }
+
+        return null;
+    }
+
+
+    /**
      * Gets the mandatory sequence, from the direct reference. This is also available in the
      * {@link SynapseConfiguration#getSequence} but this method improves the performance hence this
      * will be required for all messages
@@ -320,6 +424,24 @@ public class SynapseConfiguration implem
     }
 
     /**
+     * Removes a template from the local registry
+     *
+     * @param name
+     *            of the template to be removed
+     */
+    public synchronized void removeSequenceTemplate(String name) {
+        Object sequence = localRegistry.get(name);
+        if (sequence instanceof TemplateMediator) {
+            localRegistry.remove(name);
+            for (SynapseObserver o : observers) {
+                o.sequenceTemplateRemoved((Mediator) sequence);
+            }
+        } else {
+            handleException("No template exists by the key/name : " + name);
+        }
+    }
+
+    /**
      * Return the main/default sequence to be executed. This is the sequence
      * which will execute for all messages when message mediation takes place
      *

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/SynapseObserver.java Mon Mar 28 05:27:37 2011
@@ -45,6 +45,18 @@ public interface SynapseObserver {
      */
     public void sequenceRemoved(Mediator sequence);
 
+    /** Event fired when a new sequence template is added to the configuration
+     *
+     * @param template the Sequence mediator added to the configuration
+     */
+    public void sequenceTemplateAdded(Mediator template);
+
+    /** Event fired when an existing sequence template is removed from the configuration
+     *
+     * @param template the Sequence removed from the configuration
+     */
+    public void sequenceTemplateRemoved(Mediator template);
+
     /** Event fired when an entry is added to the configuration
      *
      * @param entry the Entry added to the configuration

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java Mon Mar 28 05:27:37 2011
@@ -289,8 +289,6 @@ public class MultiXMLConfigurationBuilde
             for (File file : sequences) {
                 try {
                     OMElement document = parseFile(file);
-                    SynapseXMLConfigurationFactory.defineTemplate(
-                            synapseConfig, document, properties);
                     OMElement element = document.getFirstChildWithName(
                             new QName(SynapseConstants.SYNAPSE_NAMESPACE, "sequence"));
                     if (element != null) {
@@ -303,20 +301,21 @@ public class MultiXMLConfigurationBuilde
                                     file.getAbsolutePath(), mediator.getName());
                         }
                         return;
-                    }
+                    } else {
 
-                    element = document.getFirstChildWithName(
-                            new QName(SynapseConstants.SYNAPSE_NAMESPACE, "endpoint"));
-                    if (element != null) {
-                        Template endpointTemplate =
-                                SynapseXMLConfigurationFactory.defineEndpointTemplate(
-                                        synapseConfig, document, properties);
-                        if (endpointTemplate != null) {
-                            endpointTemplate.setFileName(file.getName());
-                            synapseConfig.getArtifactDeploymentStore().addArtifact(
-                                    file.getAbsolutePath(), endpointTemplate.getFileName());
+                        element = document.getFirstChildWithName(
+                                new QName(SynapseConstants.SYNAPSE_NAMESPACE, "endpoint"));
+                        if (element != null) {
+                            Template endpointTemplate =
+                                    SynapseXMLConfigurationFactory.defineEndpointTemplate(
+                                            synapseConfig, document, properties);
+                            if (endpointTemplate != null) {
+                                endpointTemplate.setFileName(file.getName());
+                                synapseConfig.getArtifactDeploymentStore().addArtifact(
+                                        file.getAbsolutePath(), endpointTemplate.getFileName());
+                            }
+                            return;
                         }
-                        return;
                     }
                 } catch (FileNotFoundException ignored) {}
             }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SynapseXMLConfigurationFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SynapseXMLConfigurationFactory.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SynapseXMLConfigurationFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/SynapseXMLConfigurationFactory.java Mon Mar 28 05:27:37 2011
@@ -28,6 +28,7 @@ import org.apache.synapse.SynapseConstan
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.xml.endpoints.TemplateFactory;
 import org.apache.synapse.endpoints.Template;
+import org.apache.synapse.mediators.template.TemplateMediator;
 import org.apache.synapse.message.processors.MessageProcessor;
 import org.apache.synapse.message.store.MessageStore;
 import org.apache.synapse.commons.executors.PriorityExecutor;
@@ -234,7 +235,7 @@ public class SynapseXMLConfigurationFact
             try {
                 mediator = MediatorFactoryFinder.getInstance().getMediator(ele, properties);
                 if (mediator != null) {
-                    config.addSequence(name, mediator);
+                    config.addSequenceTemplate(name, (TemplateMediator) mediator) ;
                 }
             } catch (Exception e) {
                 if (failSafeSequenceEnabled) {

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorFactory.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorFactory.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorFactory.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorFactory.java Mon Mar 28 05:27:37 2011
@@ -53,12 +53,8 @@ public class TemplateMediatorFactory ext
     protected Mediator createSpecificMediator(OMElement elem, Properties properties) {
         TemplateMediator templateTemplateMediator = new TemplateMediator();
         OMAttribute nameAttr = elem.getAttribute(ATT_NAME);
-        OMAttribute errorHandlerAttr = elem.getAttribute(ATT_ONERROR);
         if (nameAttr != null) {
             templateTemplateMediator.setName(nameAttr.getAttributeValue());
-            if (errorHandlerAttr != null) {
-                templateTemplateMediator.setErrorHandler(errorHandlerAttr.getAttributeValue());
-            }
             processAuditStatus(templateTemplateMediator, elem);
             initParameters(elem, templateTemplateMediator);
             OMElement templateBodyElem = elem.getFirstChildWithName(TEMPLATE_BODY_Q);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorSerializer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorSerializer.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorSerializer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/TemplateMediatorSerializer.java Mon Mar 28 05:27:37 2011
@@ -47,11 +47,6 @@ public class TemplateMediatorSerializer 
         if (mediator.getName() != null) {
             templateElem.addAttribute(fac.createOMAttribute(
                     "name", nullNS, mediator.getName()));
-
-            if (mediator.getErrorHandler() != null) {
-                templateElem.addAttribute(fac.createOMAttribute(
-                        "onError", nullNS, mediator.getErrorHandler()));
-            }
             serializeParams(templateElem,mediator);
             serializeBody(templateElem, mediator.getList());
             saveTracingState(templateElem, mediator);
@@ -63,7 +58,7 @@ public class TemplateMediatorSerializer 
     private void serializeParams(OMElement templateElem, TemplateMediator mediator) {
         Collection<String> params = mediator.getParameters();
         for (String param : params) {
-            if (!"".equals(param)) {
+            if (param != null && !"".equals(param)) {
                 OMElement paramEl = fac.createOMElement("parameter", synNS);
                 paramEl.addAttribute(fac.createOMAttribute("name", nullNS, param));
                 templateElem.addChild(paramEl);

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/template/TemplateMediator.java Mon Mar 28 05:27:37 2011
@@ -22,7 +22,7 @@ import org.apache.synapse.MessageContext
 import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.SynapseLog;
 import org.apache.synapse.core.SynapseEnvironment;
-import org.apache.synapse.mediators.base.SequenceMediator;
+import org.apache.synapse.mediators.AbstractListMediator;
 
 import java.util.Collection;
 import java.util.Stack;
@@ -34,11 +34,12 @@ import java.util.Stack;
  *  xpath extension var or function , defined under function scope
  *  ie:- $func:p1 or get-property('func','p2')
  */
-public class TemplateMediator extends SequenceMediator {
+public class TemplateMediator extends AbstractListMediator {
 
     private Collection<String> paramNames;
 
     private String eipPatternName;
+    private String fileName;
 
     public void setParameters(Collection<String> paramNames) {
         this.paramNames = paramNames;
@@ -107,4 +108,11 @@ public class TemplateMediator extends Se
         }
     }
 
+    public void setFileName(String name) {
+        fileName = name;
+    }
+
+    public String getFileName() {
+        return fileName;
+    }
 }

Modified: synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/SynapseObserverTest.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/SynapseObserverTest.java?rev=1086124&r1=1086123&r2=1086124&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/SynapseObserverTest.java (original)
+++ synapse/trunk/java/modules/core/src/test/java/org/apache/synapse/config/SynapseObserverTest.java Mon Mar 28 05:27:37 2011
@@ -26,6 +26,7 @@ import org.apache.synapse.eventing.Synap
 import org.apache.synapse.core.axis2.ProxyService;
 import org.apache.synapse.Mediator;
 import org.apache.synapse.Startup;
+import org.apache.synapse.mediators.template.TemplateMediator;
 import org.apache.synapse.startup.quartz.SimpleQuartz;
 import org.apache.synapse.commons.executors.PriorityExecutor;
 import org.apache.synapse.mediators.base.SequenceMediator;
@@ -42,6 +43,7 @@ public class SynapseObserverTest extends
     private static final int STARTUP    = 4;
     private static final int EVENT_SRC  = 5;
     private static final int EXECUTOR   = 6;
+    private static final int SEQUENCE_TEMPLATE   = 7;
 
     SimpleSynapseObserver observer = new SimpleSynapseObserver();
 
@@ -64,6 +66,13 @@ public class SynapseObserverTest extends
         synapseConfig.removeSequence(seq.getName());
         assertItemRemoved(seq.getName(), SEQUENCE);
 
+        TemplateMediator template = new TemplateMediator();
+        template.setName("template1");
+        synapseConfig.addSequenceTemplate(template.getName(), template);
+        assertItemAdded(template.getName(), SEQUENCE_TEMPLATE);
+        synapseConfig.removeSequenceTemplate(template.getName());
+        assertItemRemoved(template.getName(), SEQUENCE_TEMPLATE);
+
         Entry entry = new Entry();
         entry.setKey("entry1");
         synapseConfig.addEntry(entry.getKey(), entry);
@@ -118,6 +127,7 @@ public class SynapseObserverTest extends
             tracker.put(STARTUP, new HashSet<String>());
             tracker.put(EVENT_SRC, new HashSet<String>());
             tracker.put(EXECUTOR, new HashSet<String>());
+            tracker.put(SEQUENCE_TEMPLATE, new HashSet<String>());
         }
 
         public void endpointAdded(Endpoint endpoint) {
@@ -160,6 +170,14 @@ public class SynapseObserverTest extends
             tracker.get(SEQUENCE).remove(((SequenceMediator) sequence).getName());
         }
 
+        public void sequenceTemplateAdded(Mediator template) {
+            tracker.get(SEQUENCE_TEMPLATE).add(((TemplateMediator) template).getName());
+        }
+
+        public void sequenceTemplateRemoved(Mediator template) {
+            tracker.get(SEQUENCE_TEMPLATE).remove(((TemplateMediator) template).getName());
+        }
+
         public void startupAdded(Startup startup) {
             tracker.get(STARTUP).add(startup.getName());
         }