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;
}