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 2010/11/03 10:50:02 UTC

svn commit: r1030377 - in /synapse/trunk/java/modules/core/src/main/java/org/apache/synapse: ./ config/xml/ core/axis2/ deployers/

Author: supun
Date: Wed Nov  3 09:50:02 2010
New Revision: 1030377

URL: http://svn.apache.org/viewvc?rev=1030377&view=rev
Log:
SYNAPE-677, thanks Kasun for the contribution

Modified:
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.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/core/axis2/ProxyService.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/AbstractSynapseArtifactDeployer.java
    synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/ProxyServiceDeployer.java

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java?rev=1030377&r1=1030376&r2=1030377&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/Axis2SynapseController.java Wed Nov  3 09:50:02 2010
@@ -633,6 +633,19 @@ public class Axis2SynapseController impl
      */
     private void deployProxyServices() {
 
+        boolean failSafeProxyEnabled = false;
+        String failSafeMode = synapseConfiguration.getProperty(SynapseConstants.FAIL_SAFE_MODE_STATUS);
+
+        if (failSafeMode != null) {
+            String[] failSafeComponents = failSafeMode.split(",");
+            if (Arrays.<String>asList(failSafeComponents).indexOf(SynapseConstants.FAIL_SAFE_MODE_ALL) >= 0
+                    || Arrays.<String>asList(failSafeComponents).indexOf(SynapseConstants.FAIL_SAFE_MODE_PROXY_SERVICES) >= 0) {
+                failSafeProxyEnabled = true;
+            }
+        } else {
+            failSafeProxyEnabled = true; // Enabled by default
+        }
+
         log.info("Deploying Proxy services...");
         String thisServerName = serverConfigurationInformation.getServerName();
         if (thisServerName == null || "".equals(thisServerName)) {
@@ -655,15 +668,23 @@ public class Axis2SynapseController impl
                 }
             }
 
-            AxisService proxyService = proxy.buildAxisService(synapseConfiguration,
-                    configurationContext.getAxisConfiguration());
-            if (proxyService != null) {
-                log.info("Deployed Proxy service : " + proxy.getName());
-                if (!proxy.isStartOnLoad()) {
-                    proxy.stop(synapseConfiguration);
+            try {
+                AxisService proxyService = proxy.buildAxisService(synapseConfiguration,
+                        configurationContext.getAxisConfiguration());
+                if (proxyService != null) {
+                    log.info("Deployed Proxy service : " + proxy.getName());
+                    if (!proxy.isStartOnLoad()) {
+                        proxy.stop(synapseConfiguration);
+                    }
+                } else {
+                    log.warn("The proxy service " + proxy.getName() + " will NOT be available");
+                }
+            } catch (SynapseException e) {
+                if (failSafeProxyEnabled) {
+                    log.warn("The proxy service " + proxy.getName() + " cannot be deployed. Continue in Proxy Service fail-safe mode.");
+                } else {
+                    handleException("The proxy service " + proxy.getName() + " : Deployment Error");
                 }
-            } else {
-                log.warn("The proxy service " + proxy.getName() + " will NOT be available");
             }
         }
     }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java?rev=1030377&r1=1030376&r2=1030377&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java Wed Nov  3 09:50:02 2010
@@ -408,4 +408,17 @@ public final class SynapseConstants {
 
     // Does message as attemted all its redelivered
     public static final String MESSAGE_STORE_REDELIVERED = "message.store.redelivery.redelivered";
+
+    // Fail-safe mode properties
+    public static final String FAIL_SAFE_MODE_STATUS = "failsafe.mode.enable";
+    public static final String FAIL_SAFE_MODE_ALL = "all";
+    public static final String FAIL_SAFE_MODE_PROXY_SERVICES = "proxyservices";
+    public static final String FAIL_SAFE_MODE_EP = "endpoints";
+    public static final String FAIL_SAFE_MODE_LOCALENTRIES = "localentries";
+    public static final String FAIL_SAFE_MODE_SEQUENCES = "sequences";
+    public static final String FAIL_SAFE_MODE_EVENT_SOURCE = "eventsources";
+    public static final String FAIL_SAFE_MODE_EXECUTORS = "executors";
+
+    
+
 }

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=1030377&r1=1030376&r2=1030377&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 Wed Nov  3 09:50:02 2010
@@ -41,12 +41,14 @@ import org.apache.synapse.registry.Regis
 import org.apache.axis2.AxisFault;
 
 import javax.xml.namespace.QName;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.Properties;
 
 public class SynapseXMLConfigurationFactory implements ConfigurationFactory {
 
     private static Log log = LogFactory.getLog(SynapseXMLConfigurationFactory.class);
+    public static String failSafeStr = "";
 
     public SynapseConfiguration getConfiguration(OMElement definitions, Properties properties) {
 
@@ -57,6 +59,9 @@ public class SynapseXMLConfigurationFact
         SynapseConfiguration config = SynapseConfigUtils.newConfiguration();               
         config.setDefaultQName(definitions.getQName());
 
+        
+        failSafeStr = properties.getProperty(SynapseConstants.FAIL_SAFE_MODE_STATUS);
+
         Iterator itr = definitions.getChildren();
         while (itr.hasNext()) {
             Object o = itr.next();
@@ -119,30 +124,84 @@ public class SynapseXMLConfigurationFact
 
     public static ProxyService defineProxy(SynapseConfiguration config, OMElement elem,
                                            Properties properties) {
-        ProxyService proxy = ProxyServiceFactory.createProxy(elem, properties);
-        config.addProxyService(proxy.getName(), proxy);
+        boolean failSafeProxyEnabled = isFaileSafeEnabled(
+                SynapseConstants.FAIL_SAFE_MODE_PROXY_SERVICES);
+
+        ProxyService proxy = null;
+
+        try {
+            proxy = ProxyServiceFactory.createProxy(elem, properties);
+            if (proxy != null) {
+                config.addProxyService(proxy.getName(), proxy);
+            }
+        } catch (Exception e) {
+            if (failSafeProxyEnabled) {
+                log.warn("Proxy Service configuration : " +
+                        elem.getAttributeValue((new QName(XMLConfigConstants.NULL_NAMESPACE, "name")))
+                        + " cannot be built.");
+                log.warn("Continue in Proxy Service Fail-safe mode.");
+            } else {
+                handleException("Proxy Service configuration : " +
+                        elem.getAttributeValue((new QName(XMLConfigConstants.NULL_NAMESPACE, "name")))
+                        + " cannot be built.");
+            }
+        }
+        
         return proxy;
     }
 
-   public static Entry defineEntry(SynapseConfiguration config, OMElement elem,
-                                   Properties properties) {
-        Entry entry = EntryFactory.createEntry(elem, properties);
-        config.addEntry(entry.getKey(), entry);
+    public static Entry defineEntry(SynapseConfiguration config, OMElement elem,
+                                    Properties properties) {
+        boolean failSafeLocalEntriesEnabled = isFaileSafeEnabled(
+                SynapseConstants.FAIL_SAFE_MODE_LOCALENTRIES);
+
+        Entry entry = null;
+
+        try {
+            entry = EntryFactory.createEntry(elem, properties);
+            if (entry != null) {
+                config.addEntry(entry.getKey(), entry);
+            }
+        } catch (Exception e) {
+            if (failSafeLocalEntriesEnabled) {
+                log.warn("Local Entry configuration : " +
+                        elem.getAttributeValue((new QName(XMLConfigConstants.NULL_NAMESPACE, "key"))) +" cannot be built");
+                log.warn("Continue in Local Entry fail-safe mode.");
+            } else {
+                handleException("Local Entry configuration : " +
+                        elem.getAttributeValue((new QName(XMLConfigConstants.NULL_NAMESPACE, "key"))) +" cannot be built");
+            }
+        }
         return entry;
     }
 
     public static Mediator defineSequence(SynapseConfiguration config, OMElement ele,
                                           Properties properties) {
 
+        boolean failSafeSequenceEnabled = isFaileSafeEnabled(
+                SynapseConstants.FAIL_SAFE_MODE_SEQUENCES);
+
+        Mediator mediator = null;
         String name = ele.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
         if (name != null) {
-            Mediator mediator = MediatorFactoryFinder.getInstance().getMediator(ele, properties);
-            config.addSequence(name, mediator);
-            // mandatory sequence is treated as a speciall sequence because it will be fetched for
-            // each and every message and keeps a direct reference to that from the configuration
-            // this also limits the ability of the mandatory sequence to be dynamic
-            if (SynapseConstants.MANDATORY_SEQUENCE_KEY.equals(name)) {
-                config.setMandatorySequence(mediator);
+            try {
+                mediator = MediatorFactoryFinder.getInstance().getMediator(ele, properties);
+                if (mediator != null) {
+                    config.addSequence(name, mediator);
+                    // mandatory sequence is treated as a special sequence because it will be fetched for
+                    // each and every message and keeps a direct reference to that from the configuration
+                    // this also limits the ability of the mandatory sequence to be dynamic
+                    if (SynapseConstants.MANDATORY_SEQUENCE_KEY.equals(name)) {
+                        config.setMandatorySequence(mediator);
+                    }
+                }
+            } catch (Exception e) {
+                if (failSafeSequenceEnabled) {
+                    log.warn("Sequence configuration : " + name +" cannot be built.");
+                    log.warn("Continue in Sequence fail-safe mode.");
+                } else {
+                    handleException("Sequence configuration : " + name +" cannot be built.");
+                }
             }
             return mediator;
         } else {
@@ -153,11 +212,24 @@ public class SynapseXMLConfigurationFact
 
     public static Endpoint defineEndpoint(SynapseConfiguration config, OMElement ele,
                                           Properties properties) {
+        boolean failSafeEpEnabled = isFaileSafeEnabled(SynapseConstants.FAIL_SAFE_MODE_EP);
 
         String name = ele.getAttributeValue(new QName(XMLConfigConstants.NULL_NAMESPACE, "name"));
+        Endpoint endpoint = null;
         if (name != null) {
-            Endpoint endpoint = EndpointFactory.getEndpointFromElement(ele, false, properties);
-            config.addEndpoint(name.trim(), endpoint);
+            try {
+                endpoint = EndpointFactory.getEndpointFromElement(ele, false, properties);
+                if (endpoint != null) {
+                    config.addEndpoint(name.trim(), endpoint);
+                }
+            } catch (Exception e) {
+                if (failSafeEpEnabled) {
+                    log.warn("Endpoint configuration : " + name + " cannot be built.");
+                    log.warn("Continue in Endpoint fail-safe mode.");
+                } else {
+                    handleException("Endpoint configuration " + name + " cannot be built.");
+                }
+            }
             return endpoint;
         } else {
             handleException("Invalid endpoint definition without a name");
@@ -167,22 +239,45 @@ public class SynapseXMLConfigurationFact
 
     public static SynapseEventSource defineEventSource(SynapseConfiguration config,
                                                        OMElement elem, Properties properties) {
-        SynapseEventSource eventSource = EventSourceFactory.createEventSource(elem, properties);
-        config.addEventSource(eventSource.getName(), eventSource);
+        boolean failSafeEventSourcesEnabled = isFaileSafeEnabled(
+                SynapseConstants.FAIL_SAFE_MODE_EVENT_SOURCE);
+        SynapseEventSource eventSource = null;
+
+        try {
+            eventSource = EventSourceFactory.createEventSource(elem, properties);
+            if (eventSource != null) {
+                config.addEventSource(eventSource.getName(), eventSource);
+            }
+        } catch (Exception e) {
+            if (failSafeEventSourcesEnabled) {
+                log.warn("Event Source configuration cannot be built.");
+                log.warn("Continue in Event Source fail-safe mode.");
+            } else {
+                handleException("Event Source configuration cannot be built.");
+            }
+        }
         return eventSource;
     }
 
     public static PriorityExecutor defineExecutor(SynapseConfiguration config,
                                                        OMElement elem, Properties properties) {
+        boolean failSafeExecutorsEnabled = isFaileSafeEnabled(
+                SynapseConstants.FAIL_SAFE_MODE_EXECUTORS);
+
         PriorityExecutor executor = null;
         try {
             executor = PriorityExecutorFactory.createExecutor(
-                XMLConfigConstants.SYNAPSE_NAMESPACE, elem, true, properties);
+                    XMLConfigConstants.SYNAPSE_NAMESPACE, elem, true, properties);
+            assert executor != null;
+            config.addPriorityExecutor(executor.getName(), executor);
         } catch (AxisFault axisFault) {
-            handleException("Failed to create the priorityExecutor configuration");
+            if (failSafeExecutorsEnabled) {
+                log.warn("Executor configuration cannot be built.");
+                log.warn("Continue in Executor fail-safe mode.");
+            } else {
+                handleException("Failed to create the priority-executor configuration");
+            }            
         }
-        assert executor != null;
-        config.addPriorityExecutor(executor.getName(), executor);
         return executor;
     }
 
@@ -207,4 +302,17 @@ public class SynapseXMLConfigurationFact
         return SynapseXMLConfigurationSerializer.class;
     }
 
+    private static boolean isFaileSafeEnabled(String componentName) {
+        if (failSafeStr != null) {
+            String[] failSafeComponents = failSafeStr.split(",");
+            if (Arrays.<String>asList(failSafeComponents).indexOf(SynapseConstants.FAIL_SAFE_MODE_ALL) >= 0
+                    || Arrays.<String>asList(failSafeComponents).indexOf(componentName) >= 0) {
+                return true;
+            }
+        } else {
+            return true; // Enabled by default
+        }
+        return false;
+    }
+
 }

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java?rev=1030377&r1=1030376&r2=1030377&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/ProxyService.java Wed Nov  3 09:50:02 2010
@@ -477,6 +477,9 @@ public class ProxyService implements Asp
         if (!policies.isEmpty()) {
 
             for (PolicyInfo pi : policies) {
+                if (getPolicyFromKey(pi.getPolicyKey(), synCfg) == null) {
+                    handleException("Cannot find Policy from the key");
+                }
 
                 if (pi.isServicePolicy()) {
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/AbstractSynapseArtifactDeployer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/AbstractSynapseArtifactDeployer.java?rev=1030377&r1=1030376&r2=1030377&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/AbstractSynapseArtifactDeployer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/AbstractSynapseArtifactDeployer.java Wed Nov  3 09:50:02 2010
@@ -44,6 +44,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.Arrays;
 import java.util.Properties;
 
 /**
@@ -291,7 +292,7 @@ public abstract class AbstractSynapseArt
      *
      * @param artifactName name of the artifact to be undeployed
      *
-     * @see org.apache.synapse.deployers.AbstractSynapseArtifactDeployer#unDeploy(String)
+     * @see org.apache.synapse.deployers.AbstractSynapseArtifactDeployer#undeploy(String)
      */
     public abstract void undeploySynapseArtifact(String artifactName);
 

Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/ProxyServiceDeployer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/ProxyServiceDeployer.java?rev=1030377&r1=1030376&r2=1030377&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/ProxyServiceDeployer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/ProxyServiceDeployer.java Wed Nov  3 09:50:02 2010
@@ -23,12 +23,14 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axis2.deployment.DeploymentException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.SynapseConstants;
 import org.apache.synapse.config.xml.MultiXMLConfigurationBuilder;
 import org.apache.synapse.config.xml.ProxyServiceFactory;
 import org.apache.synapse.config.xml.ProxyServiceSerializer;
 import org.apache.synapse.core.axis2.ProxyService;
 
 import java.io.File;
+import java.util.Arrays;
 import java.util.Properties;
 
 /**
@@ -39,10 +41,28 @@ import java.util.Properties;
 public class ProxyServiceDeployer extends AbstractSynapseArtifactDeployer {
 
     private static Log log = LogFactory.getLog(ProxyServiceDeployer.class);
+    public static String failSafeStr = "";
 
     @Override
     public String deploySynapseArtifact(OMElement artifactConfig, String fileName,
                                         Properties properties) {
+        boolean failSafeProxyEnabled = false;
+        try {
+            failSafeStr = getSynapseConfiguration().getProperty(SynapseConstants.FAIL_SAFE_MODE_STATUS);
+            if (failSafeStr != null) {
+                String[] failSafeComponents = failSafeStr.split(",");
+                if (Arrays.<String>asList(failSafeComponents).indexOf(SynapseConstants.FAIL_SAFE_MODE_ALL) >= 0
+                        || Arrays.<String>asList(failSafeComponents).indexOf(SynapseConstants.FAIL_SAFE_MODE_PROXY_SERVICES) >= 0) {
+                    failSafeProxyEnabled = true; 
+                }
+            } else {
+                failSafeProxyEnabled = true; // Enabled by default
+            }
+            
+        } catch (DeploymentException ignored) {
+
+        }
+
 
         if (log.isDebugEnabled()) {
             log.debug("ProxyService Deployment from file : " + fileName + " : Started");
@@ -60,7 +80,7 @@ public class ProxyServiceDeployer extend
                 if (log.isDebugEnabled()) {
                     log.debug("Initialized the ProxyService : " + proxy.getName());
                 }
-                
+
                 proxy.buildAxisService(getSynapseConfiguration(),
                         getSynapseConfiguration().getAxisConfiguration());
                 if (log.isDebugEnabled()) {
@@ -78,10 +98,14 @@ public class ProxyServiceDeployer extend
                         "artifact described in the file " + fileName + " is not a ProxyService");
             }
         } catch (Exception e) {
-            handleSynapseArtifactDeploymentError(
-                    "ProxyService Deployment from the file : " + fileName + " : Failed.", e);
+            if (failSafeProxyEnabled) {
+                log.warn("Proxy Service : " + fileName + " : Hot Deployment Failed" + e.getMessage());
+                log.warn("Proxy Service : Fail-Safe mode.");
+            } else {
+                handleSynapseArtifactDeploymentError(
+                        "ProxyService Deployment from the file : " + fileName + " : Failed.", e);
+            }
         }
-
         return null;
     }