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

svn commit: r407550 - in /incubator/synapse/trunk/java: modules/core/src/org/apache/synapse/config/ modules/core/src/org/apache/synapse/config/xml/ modules/extensions/ modules/extensions/src/META-INF/services/ modules/extensions/src/org/apache/synapse/...

Author: saminda
Date: Thu May 18 06:52:21 2006
New Revision: 407550

URL: http://svn.apache.org/viewvc?rev=407550&view=rev
Log:
committing for asankha
refactor spring code

Added:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Extension.java
      - copied, changed from r407499, incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactory.java
      - copied, changed from r407499, incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactoryFinder.java
      - copied, changed from r407499, incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java
    incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory
      - copied, changed from r407499, incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java
      - copied, changed from r407499, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java
      - copied, changed from r407499, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java
Removed:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java
    incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java
Modified:
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
    incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java
    incubator/synapse/trunk/java/modules/extensions/project.xml
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java
    incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java
    incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringTestBean.java
    incubator/synapse/trunk/java/repository/conf/sample/springsample.xml
    incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_3.xml

Copied: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Extension.java (from r407499, incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Extension.java?p2=incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Extension.java&p1=incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java&r1=407499&r2=407550&rev=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Configuration.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/Extension.java Thu May 18 06:52:21 2006
@@ -18,41 +18,11 @@
 import java.util.Map;
 import java.util.HashMap;
 
-public class Configuration {
+public interface Extension {
 
-    /** The name of this configuration */
-    private String name;
-    /** The type of this named Configuration */
-    private String type;
+    public String getName();
 
-    /**
-     * Custom (extensible properties of this configuration
-     * e.g. type=Spring, file=url etc
-     */
-    private Map properties = new HashMap();
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public void addProperty(String name, String value) {
-        properties.put(name, value);
-    }
-
-    public String getProperty(String name) {
-        return (String) properties.get(name);
-    }
+    public void setName(String name);
+    
 }
 

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/SynapseConfiguration.java Thu May 18 06:52:21 2006
@@ -34,9 +34,6 @@
     /** Holds named endpoints (which results into absolute EPRs) for reuse */
     private Map namedEndpoints = new HashMap();
 
-    /** Holds named configurations (such as Spring configurations) */
-    private Map namedConfigurations = new HashMap();
-
     /** Holds global (system-wide) properties that apply to the synapse instance and every message */
     private Map globalProps = new HashMap();
 
@@ -80,11 +77,11 @@
     }
 
     /**
-     * Add a global (system-wide) property. These properties must be string literals
+     * Add a global (system-wide) property.
      * @param name the name of the property
-     * @param value its string value
+     * @param value its value
      */
-    public void addProperty(String name, String value) {
+    public void addProperty(String name, Object value) {
         globalProps.put(name, value);
     }
 
@@ -93,8 +90,8 @@
      * @param name key of the property being looked up
      * @return its value
      */
-    public String getProperty(String name) {
-        return (String) globalProps.get(name);
+    public Object getProperty(String name) {
+        return globalProps.get(name);
     }
 
     /**
@@ -115,21 +112,4 @@
         return (Endpoint) namedEndpoints.get(name);
     }
 
-    /**
-     * Define a named Configuration with the given name
-     * @param name the name of the Configuration
-     * @param config the Configuration definition
-     */
-    public void addNamedConfiguration(String name, Configuration config) {
-        namedConfigurations.put(name, config);
-    }
-
-    /**
-     * Get the configuration definition with the given name
-     * @param name to be looked up
-     * @return the Configuration which maps to this name
-     */
-    public Configuration getNamedConfiguration(String name) {
-        return (Configuration) namedConfigurations.get(name);
-    }
 }

Copied: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactory.java (from r407499, incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactory.java?p2=incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactory.java&p1=incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java&r1=407499&r2=407550&rev=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactory.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactory.java Thu May 18 06:52:21 2006
@@ -15,27 +15,29 @@
 */
 package org.apache.synapse.config.xml;
 
-import org.apache.synapse.config.Configuration;
+import org.apache.synapse.config.Extension;
 import org.apache.axiom.om.OMElement;
 
+import javax.xml.namespace.QName;
+
 
 /**
- * A configuration factory that is capable of creating an instance of a
- * named Configuration, through a given XML, should implement this interface
+ * A extension factory that is capable of creating an instance of a
+ * named extension, through a given XML, should implement this interface
  */
 
-public interface ConfigurationFactory {
+public interface ExtensionFactory {
     /**
-     * Creates an instance of a named Configuration using the OMElement
+     * Creates an instance of a named extension using the OMElement
      * @param elem
-     * @return the created named Configuration
+     * @return the created named extension
      */
-    public Configuration createConfiguration(OMElement elem);
+    public Extension createExtension(OMElement elem);
 
     /**
-     * The type attribute of a configuration definition, that this factory could handle
-     * @return the type of configuration definition
+     * The QName of the extension element in the XML config
+     * @return QName of the extension element
      */
-    public String getType();
+    public QName getTagQName();
 
 }

Copied: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactoryFinder.java (from r407499, incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactoryFinder.java?p2=incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactoryFinder.java&p1=incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java&r1=407499&r2=407550&rev=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ConfigurationFactoryFinder.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/ExtensionFactoryFinder.java Thu May 18 06:52:21 2006
@@ -17,7 +17,7 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.config.Configuration;
+import org.apache.synapse.config.Extension;
 import org.apache.synapse.SynapseException;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMAttribute;
@@ -31,21 +31,22 @@
 import javax.xml.namespace.QName;
 
 /**
- *
+ * This class loads available ConfigurationFactory implementations from the
+ * classpath and makes them available to the Synapse configuration builder.
  *
  * This class is based on J2SE Service Provider model
  * http://java.sun.com/j2se/1.3/docs/guide/jar/jar.html#Service%20Provider
  */
 
-public class ConfigurationFactoryFinder {
+public class ExtensionFactoryFinder {
 
     private static Map factoryMap = new HashMap();
-    private static final Log log = LogFactory.getLog(ConfigurationFactoryFinder.class);
-    private static ConfigurationFactoryFinder instance = null;
+    private static final Log log = LogFactory.getLog(ExtensionFactoryFinder.class);
+    private static ExtensionFactoryFinder instance = null;
 
-    public static synchronized ConfigurationFactoryFinder getInstance() {
+    public static synchronized ExtensionFactoryFinder getInstance() {
         if (instance == null) {
-            instance = new ConfigurationFactoryFinder();
+            instance = new ExtensionFactoryFinder();
         }
         return instance;
     }
@@ -58,7 +59,7 @@
         instance = null;
     }
 
-    private ConfigurationFactoryFinder() {
+    private ExtensionFactoryFinder() {
         factoryMap = new HashMap();
         // now iterate through the available pluggable mediator factories
         registerExtensions();
@@ -72,49 +73,49 @@
      */
     private void registerExtensions() {
 
-        log.debug("registering extensions found in the classpath : " + System.getProperty("java.class.path"));
+        log.debug("Registering extensions found in the classpath : " +
+            System.getProperty("java.class.path"));
 
-        // register ConfigurationFactory extensions
-        Iterator it = Service.providers(ConfigurationFactory.class);
+        // register ExtensionFactory extensions
+        Iterator it = Service.providers(ExtensionFactory.class);
         while (it.hasNext()) {
-            ConfigurationFactory cf = (ConfigurationFactory) it.next();
-            String type = cf.getType();
-            factoryMap.put(type, cf.getClass());
-            log.debug("Added ConfigurationFactory " + cf.getClass() +
-                " to handle '" + type + "' configuration definitions");
+            ExtensionFactory ef = (ExtensionFactory) it.next();
+            factoryMap.put(ef.getTagQName(), ef.getClass());
+            log.debug("Added extension factory " + ef.getClass() +
+                " to handle '" + ef.getTagQName() + "' extension elements");
         }
     }
 
     /**
-     * This method returns a Configuration of the correct type given an OMElement.
+     * This method returns an Extension instance of the correct type given an OMElement.
      *
-     * @param elem an OMElement defining a named Configuration definition
-     * @return a correct Configuration object
+     * @param elem an OMElement defining extension
+     * @return a correct Extension instance
      */
-    public Configuration getConfiguration(OMElement elem) {
+    public Extension getExtension(OMElement elem) {
 
-        OMAttribute type = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "type"));
-        log.debug("getConfiguration( type = " + type.getAttributeValue() + " )");
+        QName qName = new QName(elem.getNamespace().getName(), elem.getLocalName());
+        log.debug("getConfiguration(" + qName + ")");
 
-        Class cls = (Class) factoryMap.get(type.getAttributeValue());
+        Class cls = (Class) factoryMap.get(qName);
 
         if (cls == null) {
-            String msg = "Unknown Configuration factory referenced by type : " + type.getAttributeValue();
+            String msg = "Unknown extension factory referenced by element : " + qName;
             log.error(msg);
             throw new SynapseException(msg);
         }
 
         try {
-            ConfigurationFactory cf = (ConfigurationFactory) cls.newInstance();
-            return cf.createConfiguration(elem);
+            ExtensionFactory ef = (ExtensionFactory) cls.newInstance();
+            return ef.createExtension(elem);
 
         } catch (InstantiationException e) {
-            String msg = "Error initializing Configuration factory : " + cls;
+            String msg = "Error initializing extension factory : " + cls;
             log.error(msg);
             throw new SynapseException(msg, e);
 
         } catch (IllegalAccessException e) {
-            String msg = "Error initializing Configuration factory : " + cls;
+            String msg = "Error initializing extension factory : " + cls;
             log.error(msg);
             throw new SynapseException(msg, e);
         }

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/MediatorFactoryFinder.java Thu May 18 06:52:21 2006
@@ -105,7 +105,7 @@
      */
     private void registerExtensions() {
 
-        log.debug("registering extensions found in the classpath : " + System.getProperty("java.class.path"));
+        log.debug("Registering mediator extensions found in the classpath : " + System.getProperty("java.class.path"));
 
         // register MediatorFactory extensions
         Iterator it = Service.providers(MediatorFactory.class);

Modified: incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java (original)
+++ incubator/synapse/trunk/java/modules/core/src/org/apache/synapse/config/xml/SynapseConfigurationBuilder.java Thu May 18 06:52:21 2006
@@ -22,7 +22,6 @@
 import org.apache.synapse.SynapseException;
 import org.apache.synapse.config.SynapseConfiguration;
 import org.apache.synapse.config.Endpoint;
-import org.apache.synapse.config.Configuration;
 import org.apache.synapse.mediators.base.SequenceMediator;
 import org.apache.synapse.mediators.base.SynapseMediator;
 import org.apache.commons.logging.Log;
@@ -44,7 +43,7 @@
 
     private static Log log = LogFactory.getLog(SynapseConfigurationBuilder.class);
     private SynapseConfiguration config = new SynapseConfiguration();
-    ConfigurationFactoryFinder configFacFinder = ConfigurationFactoryFinder.getInstance();
+    ExtensionFactoryFinder extensionFacFinder = ExtensionFactoryFinder.getInstance();
 
     public SynapseConfigurationBuilder() {}
 
@@ -65,32 +64,21 @@
         OMContainer definitions = root.getFirstChildWithName(Constants.DEFINITIONS_ELT);
         if (definitions != null) {
 
-            // digest defined Sequences
-            Iterator iter = definitions.getChildrenWithName(Constants.SEQUENCE_ELT);
+            Iterator iter = definitions.getChildren();
             while (iter.hasNext()) {
-                OMElement elt = (OMElement) iter.next();
-                defineSequence(elt);
-            }
-
-            // digest defined Endpoints
-            iter = definitions.getChildrenWithName(Constants.ENDPOINT_ELT);
-            while (iter.hasNext()) {
-                OMElement elt = (OMElement) iter.next();
-                defineEndpoint(elt);
-            }
-
-            // digest defined named Configurations
-            iter = definitions.getChildrenWithName(Constants.CONFIG_ELT);
-            while (iter.hasNext()) {
-                OMElement elt = (OMElement) iter.next();
-                defineConfiguration(elt);
-            }
-
-            // digest defined Global properties
-            iter = definitions.getChildrenWithName(Constants.PROPERTY_ELT);
-            while (iter.hasNext()) {
-                OMElement elt = (OMElement) iter.next();
-                defineProperty(elt);
+                Object o = iter.next();
+                if (o instanceof OMElement) {
+                    OMElement elt = (OMElement) o;
+                    if (Constants.SEQUENCE_ELT.equals(elt.getQName())) {
+                        defineSequence(elt);
+                    } else if (Constants.ENDPOINT_ELT.equals(elt.getQName())) {
+                        defineEndpoint(elt);
+                    } else if (Constants.PROPERTY_ELT.equals(elt.getQName())) {
+                        defineProperty(elt);
+                    } else {
+                        defineExtension(elt);
+                    }
+                }
             }
         }
 
@@ -161,24 +149,26 @@
     }
 
     /**
-     * Digest a named configuratino definition and add it to the SynapseConfiguration
+     * Digest extensions into Synapse configuration definitions
+     *
+     * An extension *must* have a unique 'name' attribute. The instance
+     * created through the ExtensionFactoryFinder will be set as a
+     * global property into the SynapseConfiguration with this name as
+     * the key.
+     *
+     * e.g. The Spring configuration extension is as follows
+     * <configuration name="string" src="string"/>
      *
-     * <configuration name="string" type="string">
-     *    <property name="string" value="string"/>*
-     * </configuration>
      * @param elem the XML element defining the configuration
      */
-    private void defineConfiguration(OMElement elem) {
+    private void defineExtension(OMElement elem) {
 
         OMAttribute name = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "name"));
-        OMAttribute type = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "type"));
 
         if (name == null) {
-            handleException("The 'name' attribute is required for a named configuration definition");
-        } else if (type == null) {
-            handleException("The 'type' attribute is required for a named configuration definition");
+            handleException("The 'name' attribute is required for an extension configuration definition");
         } else {
-            config.addNamedConfiguration(name.getAttributeValue(), configFacFinder.getConfiguration(elem));
+            config.addProperty(name.getAttributeValue(), extensionFacFinder.getExtension(elem));
         }
     }
 

Modified: incubator/synapse/trunk/java/modules/extensions/project.xml
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/project.xml?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/project.xml (original)
+++ incubator/synapse/trunk/java/modules/extensions/project.xml Thu May 18 06:52:21 2006
@@ -45,7 +45,7 @@
                     <directory>src</directory>
                     <includes>
                         <include>**/org.apache.synapse.config.xml.MediatorFactory</include>
-                        <include>**/org.apache.synapse.config.xml.ConfigurationFactory</include>
+                        <include>**/org.apache.synapse.config.xml.ExtensionFactory</include>
                     </includes>
                 </resource>
             </resources>

Copied: incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory (from r407499, incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory?p2=incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory&p1=incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory&r1=407499&r2=407550&rev=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ConfigurationFactory (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/META-INF/services/org.apache.synapse.config.xml.ExtensionFactory Thu May 18 06:52:21 2006
@@ -1 +1 @@
-org.apache.synapse.config.xml.SpringConfigurationFactory
\ No newline at end of file
+org.apache.synapse.config.xml.SpringConfigExtensionFactory
\ No newline at end of file

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java (from r407499, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java&r1=407499&r2=407550&rev=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfiguration.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/SpringConfigExtension.java Thu May 18 06:52:21 2006
@@ -15,25 +15,38 @@
 */
 package org.apache.synapse.config;
 
-import org.springframework.context.support.GenericApplicationContext;
 import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
+import org.springframework.context.support.GenericApplicationContext;
 import org.springframework.core.io.FileSystemResource;
-import org.apache.synapse.config.xml.SpringConfigurationFactory;
 
-public class SpringConfiguration extends Configuration {
+/**
+ * This defines an extension to Synapse to process a Spring Configuration.
+ * This keeps the Spring dependency out from the Synapse core, and the
+ * dependent Jars from the core distribution.
+ *
+ * A Spring configuration is usually named, but this class allows an
+ * inlined configuration to be built up as well, where the Spring mediator
+ * defines an inline Spring configuration
+ */
+public class SpringConfigExtension implements Extension {
 
-    /** This is the Spring ApplicationContext/BeanFactory */
-    GenericApplicationContext appContext = null;
+    /**
+     * The name of this Spring configuration
+     */
+    private String name = null;
 
-    public static final String SPRING_TYPE = "spring";
+    /**
+     * This is the Spring ApplicationContext/BeanFactory
+     */
+    private GenericApplicationContext appContext = null;
 
     /**
      * Create a Spring configuration from the given configuration
+     *
      * @param configFile the configuration file to be used
      */
-    public SpringConfiguration(String name, String configFile) {
-        super.setName(name);
-        super.setType(SPRING_TYPE);
+    public SpringConfigExtension(String name, String configFile) {
+        setName(name);
         appContext = new GenericApplicationContext();
         XmlBeanDefinitionReader xbdr = new XmlBeanDefinitionReader(appContext);
         xbdr.setValidating(false);
@@ -45,4 +58,11 @@
         return appContext;
     }
 
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
 }

Copied: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java (from r407499, incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java)
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java?p2=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java&p1=incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java&r1=407499&r2=407550&rev=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigurationFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringConfigExtensionFactory.java Thu May 18 06:52:21 2006
@@ -19,46 +19,50 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.config.Configuration;
-import org.apache.synapse.config.SpringConfiguration;
+import org.apache.synapse.SynapseException;
+import org.apache.synapse.config.Extension;
+import org.apache.synapse.config.SpringConfigExtension;
 
 import javax.xml.namespace.QName;
-import java.util.Iterator;
 
-public class SpringConfigurationFactory implements ConfigurationFactory {
+/**
+ * Creates a Spring configuration extension from XML configuration. A Spring
+ * configuration extension keeps Spring away from the core of synapse
+ */
+public class SpringConfigExtensionFactory implements ExtensionFactory {
 
-    private static final Log log = LogFactory.getLog(SpringConfigurationFactory.class);
+    private static final Log log = LogFactory.getLog(SpringConfigExtensionFactory.class);
 
-    private static final String CONFIG_NAME = "config_name";
+    private static final QName SPRING_CFG_Q = new QName(Constants.SYNAPSE_NAMESPACE + "/spring", "config");
 
     /**
-     * <configuration name="string" type="spring">
-     *    <property name="config_src" value="string"/>
-     *    <property>*
-     * </configuration>
+     * <spring:config name="string" src="file"/>
      *
-     * @param elem
+     * @param elem the XML configuration element
      * @return A named Spring Configuration
      */
-    public Configuration createConfiguration(OMElement elem) {
+    public Extension createExtension(OMElement elem) {
 
-        Iterator iter = elem.getChildrenWithName(new QName(Constants.NULL_NAMESPACE, "property"));
-        while (iter.hasNext()) {
-            Object o = iter.next();
-            if (o instanceof OMElement) {
-                OMElement prop = (OMElement) o;
-                OMAttribute name = prop.getAttribute(new QName(Constants.NULL_NAMESPACE, "name"));
-                OMAttribute value = prop.getAttribute(new QName(Constants.NULL_NAMESPACE, "value"));
-
-                if (name != null && value != null && CONFIG_NAME.equals(name.getAttributeValue())) {
-                    return new SpringConfiguration(name.getAttributeValue(), value.getAttributeValue());
-                }
-            }
+        SpringConfigExtension springCfgExt = null;
+        OMAttribute name = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "name"));
+        OMAttribute src  = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "src"));
+
+        if (name == null) {
+            handleException("The 'name' attribute is required for a Spring configuration definition");
+        } else if (src == null) {
+            handleException("The 'src' attribute is required for a Spring configuration definition");
+        } else {
+            springCfgExt = new SpringConfigExtension(name.getAttributeValue(), src.getAttributeValue());
         }
-        return null;
+        return springCfgExt;
     }
 
-    public String getType() {
-        return SpringConfiguration.SPRING_TYPE;
+    private void handleException(String msg) {
+        log.error(msg);
+        throw new SynapseException(msg);
+    }
+
+    public QName getTagQName() {
+        return SPRING_CFG_Q;
     }
 }

Modified: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/config/xml/SpringMediatorFactory.java Thu May 18 06:52:21 2006
@@ -5,17 +5,18 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.config.SpringConfiguration;
 import org.apache.synapse.api.Mediator;
+import org.apache.synapse.config.SpringConfigExtension;
 import org.apache.synapse.mediators.ext.spring.SpringMediator;
 
 import javax.xml.namespace.QName;
 
 /**
  * Creates an instance of a Spring mediator that refers to the given Spring
- * configuration and bean.
+ * configuration and bean. Optionally, one could specify an inlined Spring
+ * configuration as opposed to a globally defined Spring configuration
  * <p/>
- * <spring ref_bean="exampleBean1" (config_name="spring1" | config_src="spring.xml)"/>
+ * <spring bean="exampleBean1" (config="spring1" | src="spring.xml)"/>
  */
 public class SpringMediatorFactory implements MediatorFactory {
 
@@ -33,24 +34,25 @@
     public Mediator createMediator(OMElement elem) {
 
         SpringMediator sm = new SpringMediator();
-        OMAttribute ref = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "ref_bean"));
-        OMAttribute cfg = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "config_name"));
-        OMAttribute src = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "config_src"));
+        OMAttribute bean = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "bean"));
+        OMAttribute cfg = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "config"));
+        OMAttribute src = elem.getAttribute(new QName(Constants.NULL_NAMESPACE, "src"));
 
-        if (ref == null) {
-            handleException("The 'ref_bean' attribute is required for a Spring mediator definition");
+        if (bean == null) {
+            handleException("The 'bean' attribute is required for a Spring mediator definition");
         } else if (cfg == null && src == null) {
-            handleException("A 'config_name' or 'config_src' attribute is required for a Spring mediator definition");
+            handleException("A 'config' or 'src' attribute is required for a Spring mediator definition");
 
         } else {
-            sm.setBeanName(ref.getAttributeValue());
+            sm.setBeanName(bean.getAttributeValue());
             if (cfg != null) {
+                log.debug("Creating a Spring mediator using configuration named : " + cfg.getAttributeValue());
                 sm.setConfigName(cfg.getAttributeValue());
 
             } else {
-                log.debug("Creating an anonymous Spring configuration using source : " + src.getAttributeValue());
-                SpringConfiguration sc = new SpringConfiguration("anonymous", src.getAttributeValue());
-                sm.setAppContext(sc.getAppContext());
+                log.debug("Creating an inline Spring configuration using source : " + src.getAttributeValue());
+                SpringConfigExtension sce = new SpringConfigExtension("inline", src.getAttributeValue());
+                sm.setAppContext(sce.getAppContext());
             }
             return sm;
         }

Modified: incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/src/org/apache/synapse/mediators/ext/spring/SpringMediator.java Thu May 18 06:52:21 2006
@@ -15,35 +15,37 @@
 */
 package org.apache.synapse.mediators.ext.spring;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.synapse.MessageContext;
 import org.apache.synapse.SynapseException;
-import org.apache.synapse.config.Configuration;
-import org.apache.synapse.config.SpringConfiguration;
 import org.apache.synapse.api.Mediator;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.config.SpringConfigExtension;
 import org.springframework.context.ApplicationContext;
 
 /**
- * This mediator allows
- * <p> This class is the class that "plugs" Spring-based mediators into Synapse.
- * <p> A spring based mediator is any object that implements mediator and can be instantiated by
- * Spring (see www.springframework.org). The mediator definition is set up using the 
- *  SpringMediatorProcessorConfigurator class.
- *  
- * This class simply has a Context property which is set with a Spring GenericApplicationContext and 
- * a BeanName property, which is set with the name of the bean  
+ * This mediator allows Spring beans implementing the org.apache.synapse.api.Mediator
+ * interface to mediate messages passing through Synapse.
  *
+ * A Spring mediator is instantiated by Spring (see www.springframework.org). The mediator
+ * refers to a Spring bean name, and also either a Spring configuration defined to Synapse
+ * or an inlined Spring configuration.
  */
 public class SpringMediator implements Mediator {
 
     private static final Log log = LogFactory.getLog(SpringMediator.class);
 
-    /** The Spring bean ref to be used */
+    /**
+     * The Spring bean ref to be used
+     */
     private String beanName = null;
-    /** The named Spring configName to be used */
+    /**
+     * The named Spring configName to be used
+     */
     private String configName = null;
-    /** The Spring ApplicationContext to be used */
+    /**
+     * The Spring ApplicationContext to be used
+     */
     private ApplicationContext appContext = null;
 
     public boolean mediate(MessageContext synCtx) {
@@ -54,12 +56,13 @@
 
         // if a named configuration is referenced, use it
         if (configName != null) {
-            // get named Spring configName
-            Configuration config = synCtx.getConfiguration().getNamedConfiguration(configName);
+            // get named Spring configuration
+            Object cfg = synCtx.getConfiguration().getProperty(configName);
 
-            if (config != null && config instanceof SpringConfiguration) {
+            if (cfg != null && cfg instanceof SpringConfigExtension) {
 
-                ApplicationContext appContext = ((SpringConfiguration) config).getAppContext();
+                ApplicationContext appContext = ((SpringConfigExtension) cfg).getAppContext();
+                log.debug("Loading bean : " + beanName + " from Spring configuration named : " + configName);
                 Object o = appContext.getBean(beanName);
 
                 if (o != null && Mediator.class.isAssignableFrom(o.getClass())) {
@@ -71,11 +74,12 @@
                         " from the Spring configuration named : " + configName);
                 }
             } else {
-                handleException("Could not get a reference to the Spring configuration named : " + configName);
+                handleException("Could not get a reference to a valid Spring configuration named : " + configName);
             }
 
         } else if (appContext != null) {
 
+            log.debug("Loading bean : " + beanName + " from inline Spring configuration");
             Object o = appContext.getBean(beanName);
 
             if (o != null && Mediator.class.isAssignableFrom(o.getClass())) {
@@ -84,7 +88,7 @@
 
             } else {
                 handleException("Could not find the bean named : " + beanName +
-                    " from the anonymous Spring configuration");
+                    " from the inline Spring configuration");
             }
 
         } else {

Modified: incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringMediatorTest.java Thu May 18 06:52:21 2006
@@ -42,7 +42,7 @@
         msgCtx.setConfiguration(synCfgBuilder.getConfig());
         msgCtx.getConfiguration().getMainMediator().mediate(msgCtx);
 
-        assertEquals(TestMediateHandlerImpl.invokeCount, 2);
+        assertEquals(TestMediateHandlerImpl.invokeCount, 202);
     }
 
 }

Modified: incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringTestBean.java
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringTestBean.java?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringTestBean.java (original)
+++ incubator/synapse/trunk/java/modules/extensions/test/org/apache/synapse/spring/SpringTestBean.java Thu May 18 06:52:21 2006
@@ -18,6 +18,11 @@
 import org.apache.synapse.api.Mediator;
 import org.apache.synapse.MessageContext;
 
+/**
+ * This is a very simple Spring bean, that has one int property, and a
+ * reference to another bean. This second bean is invoked on each mediate()
+ * call, and it keeps a count of the invocations to be tested by JUnit
+ */
 public class SpringTestBean implements Mediator {
 
     private int testProperty;
@@ -48,6 +53,7 @@
 
     public void setTestProperty(int i) {
         this.testProperty = i;
+        TestMediateHandlerImpl.invokeCount += i;
     }
 
     public int getTestProperty() {

Modified: incubator/synapse/trunk/java/repository/conf/sample/springsample.xml
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/repository/conf/sample/springsample.xml?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/repository/conf/sample/springsample.xml (original)
+++ incubator/synapse/trunk/java/repository/conf/sample/springsample.xml Thu May 18 06:52:21 2006
@@ -5,7 +5,7 @@
 <beans>
 
    <bean id="springtest" class="org.apache.synapse.spring.SpringTestBean" singleton="false">
-	   <property name="testProperty"><value>1</value></property>
+	   <property name="testProperty"><value>100</value></property>
 	   <property name="handler"><ref bean="handler"/></property>
    </bean>
    

Modified: incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_3.xml
URL: http://svn.apache.org/viewvc/incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_3.xml?rev=407550&r1=407549&r2=407550&view=diff
==============================================================================
--- incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_3.xml (original)
+++ incubator/synapse/trunk/java/repository/conf/sample/synapse_sample_3.xml Thu May 18 06:52:21 2006
@@ -1,16 +1,12 @@
-<synapse xmlns="http://ws.apache.org/ns/synapse">
+<synapse xmlns="http://ws.apache.org/ns/synapse" xmlns:spring="http://ws.apache.org/ns/synapse/spring">
   
   <definitions>
-
-		<configuration name="springconfig" type="spring">    
-			<property name="config_name" value="./../../repository/conf/sample/springsample.xml"/>
-		</configuration>
-
+		<spring:config name="springconfig" src="./../../repository/conf/sample/springsample.xml"/>
   </definitions>
 
   <rules>
-  	<spring ref_bean="springtest" config_name="springconfig"/>
-  	<spring ref_bean="springtest" config_src="./../../repository/conf/sample/springsample.xml"/>
+  	<spring bean="springtest" config="springconfig"/>
+  	<spring bean="springtest" src="./../../repository/conf/sample/springsample.xml"/>
   </rules>
 
 </synapse> 



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