You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by ru...@apache.org on 2010/02/14 16:27:53 UTC
svn commit: r910021 -
/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/
Author: ruwan
Date: Sun Feb 14 15:27:53 2010
New Revision: 910021
URL: http://svn.apache.org/viewvc?rev=910021&view=rev
Log:
Re-Store implemented upon an error in the undeployment or update (meaning Hot deployment/update is completed for Synapse :-))
Added:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SynapseArtifactDeploymentException.java
Modified:
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/EndpointDeployer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EventSourceDeployer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LocalEntryDeployer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/ProxyServiceDeployer.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SequenceDeployer.java
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=910021&r1=910020&r2=910021&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 Sun Feb 14 15:27:53 2010
@@ -28,6 +28,7 @@
import org.apache.axis2.deployment.DeploymentException;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
import org.apache.axis2.description.Parameter;
+import org.apache.axis2.util.XMLPrettyPrinter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.ServerManager;
@@ -37,11 +38,10 @@
import org.apache.synapse.core.SynapseEnvironment;
import javax.xml.stream.XMLStreamException;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
/**
@@ -57,8 +57,15 @@
public abstract class AbstractSynapseArtifactDeployer implements Deployer {
private static final Log log = LogFactory.getLog(AbstractSynapseArtifactDeployer.class);
+ protected Log deployerLog;
protected ConfigurationContext cfgCtx;
private Map<String, String> updatingArtifacts = new HashMap<String, String>();
+ private List<String> restoredFiles = new ArrayList<String>();
+ private List<String> backedUpFiles = new ArrayList<String>();
+
+ protected AbstractSynapseArtifactDeployer() {
+ deployerLog = LogFactory.getLog(this.getClass());
+ }
/**
* Initializes the Synapse artifact deployment
@@ -93,6 +100,15 @@
}
String filename = deploymentFileData.getAbsolutePath();
+
+ // check whether this is triggered by a restore, if it is a restore we do not want to deploy it again
+ if (restoredFiles.contains(filename)) {
+ // only one deployment trigger can happen after a restore and hence remove it from restoredFiles
+ // at the first hit, allowing the further deployments/updates to take place as usual
+ restoredFiles.remove(filename);
+ return;
+ }
+
try {
InputStream in = new FileInputStream(filename);
try {
@@ -100,13 +116,33 @@
// since all synapse artifacts are XML based
OMElement element = new StAXOMBuilder(
StAXUtils.createXMLStreamReader(in)).getDocumentElement();
- String artifatcName;
+ String artifatcName = null;
if (updatingArtifacts.containsKey(filename)) {
+ // this is an hot-update case
String existingArtifactName = updatingArtifacts.get(filename);
updatingArtifacts.remove(filename);
- artifatcName = updateSynapseArtifact(element, filename, existingArtifactName);
+ try {
+ artifatcName = updateSynapseArtifact(
+ element, filename, existingArtifactName);
+ } catch (SynapseArtifactDeploymentException sade) {
+ log.error("Update of the Synapse Artifact from file : "
+ + filename + " : Failed!", sade);
+ log.info("The updated file has been backed up into : "
+ + backupFile(deploymentFileData.getFile()));
+ log.info("Restoring the existing artifact into the file : " + filename);
+ restoreSynapseArtifact(existingArtifactName);
+ artifatcName = existingArtifactName;
+ }
} else {
- artifatcName = deploySynapseArtifact(element, filename);
+ // new artifact hot-deployment case
+ try {
+ artifatcName = deploySynapseArtifact(element, filename);
+ } catch (SynapseArtifactDeploymentException sade) {
+ log.error("Deployment of the Synapse Artifact from file : "
+ + filename + " : Failed!", sade);
+ log.info("The file has been backed up into : "
+ + backupFile(deploymentFileData.getFile()));
+ }
}
if (artifatcName != null) {
FileNameToArtifactNameHolder.getInstance().addArtifact(filename, artifatcName);
@@ -115,14 +151,14 @@
in.close();
}
} catch (IOException ex) {
- throw new DeploymentException("Error reading "
- + filename + " : " + ex.getMessage(), ex);
+ handleDeploymentError("Deployment of synapse artifact failed. Error reading "
+ + filename + " : " + ex.getMessage(), ex, filename);
} catch (XMLStreamException ex) {
- throw new DeploymentException("Error parsing "
- + filename + " : " + ex.getMessage(), ex);
+ handleDeploymentError("Deployment of synapse artifact failed. Error parsing "
+ + filename + " : " + ex.getMessage(), ex, filename);
} catch (OMException ex) {
- throw new DeploymentException("Error parsing "
- + filename + " : " + ex.getMessage(), ex);
+ handleDeploymentError("Deployment of synapse artifact failed. Error parsing "
+ + filename + " : " + ex.getMessage(), ex, filename);
}
}
@@ -137,6 +173,15 @@
* @see org.apache.synapse.deployers.AbstractSynapseArtifactDeployer#undeploySynapseArtifact(String)
*/
public void unDeploy(String fileName) throws DeploymentException {
+
+ // We want to eliminate the undeployment when we are backing up these files
+ if (backedUpFiles.contains(fileName)) {
+ // only one undeployment trigger can happen after a backup and hence remove it from backedUpFiles
+ // at the first hit, allowing the further undeploymentsto take place as usual
+ backedUpFiles.remove(fileName);
+ return;
+ }
+
FileNameToArtifactNameHolder holder = FileNameToArtifactNameHolder.getInstance();
if (holder.containsFileName(fileName)) {
File undeployingFile = new File(fileName);
@@ -146,14 +191,24 @@
if (undeployingFile.exists()) {
// if the file exists, which means it has been updated and is a Hot-Update case
updatingArtifacts.put(fileName, holder.getArtifactNameForFile(fileName));
+ holder.removeArtifactWithFileName(fileName);
} else {
// if the file doesn't exists then it is an actual undeployment
- undeploySynapseArtifact(holder.getArtifactNameForFile(fileName));
+ String artifactName = holder.getArtifactNameForFile(fileName);
+ try {
+ undeploySynapseArtifact(artifactName);
+ holder.removeArtifactWithFileName(fileName);
+ } catch (SynapseArtifactDeploymentException sade) {
+ log.error("Unable to undeploy the artifact from file : " + fileName, sade);
+ log.info("Restoring the artifact into the file : " + fileName);
+ restoreSynapseArtifact(artifactName);
+ }
}
- holder.removeArtifactWithFileName(fileName);
} else {
- throw new DeploymentException("Artifact representing the filename " + fileName
- + " is not deployed on Synapse");
+ String msg = "Artifact representing the filename "
+ + fileName + " is not deployed on Synapse";
+ log.error(msg);
+ throw new DeploymentException(msg);
}
}
@@ -196,6 +251,14 @@
*/
public abstract void undeploySynapseArtifact(String artifactName);
+ /**
+ * All synapse artifact deployers MUST implement this method and it handles artifact specific restore
+ * tasks of those artifacts upon a failure of an update or undeployment.
+ *
+ * @param artifactName name of the artifact to be restored
+ */
+ public abstract void restoreSynapseArtifact(String artifactName);
+
protected SynapseConfiguration getSynapseConfiguration() throws DeploymentException {
Parameter synCfgParam =
cfgCtx.getAxisConfiguration().getParameter(SynapseConstants.SYNAPSE_CONFIG);
@@ -215,4 +278,53 @@
}
return (SynapseEnvironment) synCfgParam.getValue();
}
+
+ protected void writeToFile(OMElement content, String fileName) throws Exception {
+ // this is not good, but I couldn't think of a better design :-(
+ restoredFiles.add(fileName);
+ OutputStream out = new FileOutputStream(new File(fileName));
+ XMLPrettyPrinter.prettify(content, out);
+ out.flush();
+ out.close();
+ }
+
+ protected void handleSynapseArtifactDeploymentError(String msg) {
+ deployerLog.error(msg);
+ throw new SynapseArtifactDeploymentException(msg);
+ }
+
+ protected void handleSynapseArtifactDeploymentError(String msg, Exception e) {
+ deployerLog.error(msg, e);
+ throw new SynapseArtifactDeploymentException(msg, e);
+ }
+
+ private void handleDeploymentError(String msg, Exception e, String fileName) {
+ log.error(msg, e);
+ if (updatingArtifacts.containsKey(fileName)) {
+ backupFile(new File(fileName));
+ log.info("Restoring the existing artifact into the file : " + fileName);
+ restoreSynapseArtifact(updatingArtifacts.get(fileName));
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ fileName, updatingArtifacts.get(fileName));
+ updatingArtifacts.remove(fileName);
+ }
+ }
+
+ private String backupFile(File file) {
+ String filePath = file.getAbsolutePath();
+ backedUpFiles.add(filePath);
+ String backupFilePath = filePath + ".back";
+ int backupIndex = 0;
+ while (backupIndex >= 0) {
+ if (new File(backupFilePath).exists()) {
+ backupIndex++;
+ backupFilePath = filePath + "." + backupIndex + ".back";
+ } else {
+ backupIndex = -1;
+ //noinspection ResultOfMethodCallIgnored
+ file.renameTo(new File(backupFilePath));
+ }
+ }
+ return backupFilePath;
+ }
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EndpointDeployer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EndpointDeployer.java?rev=910021&r1=910020&r2=910021&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EndpointDeployer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EndpointDeployer.java Sun Feb 14 15:27:53 2010
@@ -23,6 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.config.xml.endpoints.EndpointFactory;
+import org.apache.synapse.config.xml.endpoints.EndpointSerializer;
import org.apache.synapse.endpoints.Endpoint;
/**
@@ -61,11 +62,12 @@
+ "' has been deployed from file : " + fileName);
return ep.getName();
} else {
- log.error("Endpoint Deployment Failed. The artifact described in the file "
- + fileName + " is not an Endpoint");
+ handleSynapseArtifactDeploymentError("Endpoint Deployment Failed. The artifact " +
+ "described in the file " + fileName + " is not an Endpoint");
}
} catch (Exception e) {
- log.error("Endpoint Deployment from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError("Endpoint Deployment from the file : "
+ + fileName + " : Failed.", e);
}
return null;
@@ -108,11 +110,12 @@
"update" : "deployed") + " from file : " + fileName);
return ep.getName();
} else {
- log.error("Endpoint Update Failed. The artifact described in the file "
- + fileName + " is not an Endpoint");
+ handleSynapseArtifactDeploymentError("Endpoint Update Failed. The artifact " +
+ "described in the file " + fileName + " is not an Endpoint");
}
} catch (Exception e) {
- log.error("Endpoint Update from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "Endpoint Update from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -143,7 +146,36 @@
log.error("Couldn't find the endpoint named : " + artifactName);
}
} catch (Exception e) {
- log.error("Endpoint Undeployement of endpoint named : " + artifactName + " : Failed");
+ handleSynapseArtifactDeploymentError("Endpoint Undeployement of endpoint named : "
+ + artifactName + " : Failed", e);
+ }
+ }
+
+ @Override
+ public void restoreSynapseArtifact(String artifactName) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the Endpoint with name : " + artifactName + " : Started");
+ }
+
+ try {
+ Endpoint ep
+ = getSynapseConfiguration().getDefinedEndpoints().get(artifactName);
+ OMElement epElem = EndpointSerializer.getElementFromEndpoint(ep);
+ if (ep.getFileName() != null) {
+ writeToFile(epElem, ep.getFileName());
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the Endpoint with name : "
+ + artifactName + " : Completed");
+ }
+ log.info("Endpoint named '" + artifactName + "' has been restored");
+ } else {
+ handleSynapseArtifactDeploymentError("Couldn't restore the endpoint named '"
+ + artifactName + "', filename cannot be found");
+ }
+ } catch (Exception e) {
+ handleSynapseArtifactDeploymentError(
+ "Restoring of the endpoint named '" + artifactName + "' has failed", e);
}
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EventSourceDeployer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EventSourceDeployer.java?rev=910021&r1=910020&r2=910021&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EventSourceDeployer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/EventSourceDeployer.java Sun Feb 14 15:27:53 2010
@@ -23,6 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.config.xml.eventing.EventSourceFactory;
+import org.apache.synapse.config.xml.eventing.EventSourceSerializer;
import org.apache.synapse.eventing.SynapseEventSource;
/**
@@ -61,11 +62,12 @@
+ "' has been deployed from file : " + fileName);
return es.getName();
} else {
- log.error("EventSource Deployment Failed. The artifact described in the file "
- + fileName + " is not an EventSource");
+ handleSynapseArtifactDeploymentError("EventSource Deployment Failed. The " +
+ "artifact described in the file " + fileName + " is not an EventSource");
}
} catch (Exception e) {
- log.error("EventSource Deployment from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "EventSource Deployment from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -106,11 +108,12 @@
"update" : "deployed") + " from file : " + fileName);
return es.getName();
} else {
- log.error("EventSource Update Failed. The artifact described in the file "
- + fileName + " is not a EventSource");
+ handleSynapseArtifactDeploymentError("EventSource Update Failed. The artifact " +
+ "described in the file " + fileName + " is not a EventSource");
}
} catch (Exception e) {
- log.error("EventSource Update from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "EventSource Update from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -137,8 +140,35 @@
log.error("Couldn't find the EventSource named : " + artifactName);
}
} catch (Exception e) {
- log.error("EventSource Undeployement of EventSource named : "
- + artifactName + " : Failed");
+ handleSynapseArtifactDeploymentError("EventSource Undeployement of EventSource named : "
+ + artifactName + " : Failed", e);
+ }
+ }
+
+ @Override
+ public void restoreSynapseArtifact(String artifactName) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the EventSource with name : " + artifactName + " : Started");
+ }
+
+ try {
+ SynapseEventSource es
+ = getSynapseConfiguration().getEventSource(artifactName);
+ OMElement esElem = EventSourceSerializer.serializeEventSource(null, es);
+ if (es.getFileName() != null) {
+ writeToFile(esElem, es.getFileName());
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the EventSource with name : " + artifactName + " : Completed");
+ }
+ log.info("EventSource named '" + artifactName + "' has been restored");
+ } else {
+ handleSynapseArtifactDeploymentError("Couldn't restore the EventSource named '"
+ + artifactName + "', filename cannot be found");
+ }
+ } catch (Exception e) {
+ handleSynapseArtifactDeploymentError(
+ "Restoring of the EventSource named '" + artifactName + "' has failed", e);
}
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LocalEntryDeployer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LocalEntryDeployer.java?rev=910021&r1=910020&r2=910021&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LocalEntryDeployer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/LocalEntryDeployer.java Sun Feb 14 15:27:53 2010
@@ -24,6 +24,7 @@
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.config.Entry;
import org.apache.synapse.config.xml.EntryFactory;
+import org.apache.synapse.config.xml.EntrySerializer;
/**
* Handles the <code>LocalEntry</code> deployment and undeployment tasks
@@ -57,11 +58,12 @@
+ "' has been deployed from file : " + fileName);
return e.getKey();
} else {
- log.error("LocalEntry Deployment Failed. The artifact described in the file "
- + fileName + " is not a LocalEntry");
+ handleSynapseArtifactDeploymentError("LocalEntry Deployment Failed. The artifact " +
+ "described in the file " + fileName + " is not a LocalEntry");
}
} catch (Exception e) {
- log.error("LocalEntry Deployment from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "LocalEntry Deployment from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -97,11 +99,12 @@
"updated" : "deployed") + " from file : " + fileName);
return e.getKey();
} else {
- log.error("LocalEntry Update Failed. The artifact described in the file "
- + fileName + " is not a LocalEntry");
+ handleSynapseArtifactDeploymentError("LocalEntry Update Failed. The artifact " +
+ "described in the file " + fileName + " is not a LocalEntry");
}
} catch (Exception e) {
- log.error("LocalEntry Update from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "LocalEntry Update from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -128,7 +131,34 @@
log.error("Couldn't find the LocalEntry named : " + artifactName);
}
} catch (Exception e) {
- log.error("LocalEntry Undeployement of entry named : " + artifactName + " : Failed");
+ handleSynapseArtifactDeploymentError(
+ "LocalEntry Undeployement of entry named : " + artifactName + " : Failed", e);
+ }
+ }
+
+ @Override
+ public void restoreSynapseArtifact(String artifactName) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("LocalEntry the Sequence with name : " + artifactName + " : Started");
+ }
+
+ try {
+ Entry e = getSynapseConfiguration().getDefinedEntries().get(artifactName);
+ OMElement entryElem = EntrySerializer.serializeEntry(e, null);
+ if (e.getFileName() != null) {
+ writeToFile(entryElem, e.getFileName());
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the LocalEntry with name : " + artifactName + " : Completed");
+ }
+ log.info("LocalEntry named '" + artifactName + "' has been restored");
+ } else {
+ handleSynapseArtifactDeploymentError("Couldn't restore the LocalEntry named '"
+ + artifactName + "', filename cannot be found");
+ }
+ } catch (Exception e) {
+ handleSynapseArtifactDeploymentError(
+ "Restoring of the LocalEntry named '" + artifactName + "' has failed", e);
}
}
}
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=910021&r1=910020&r2=910021&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 Sun Feb 14 15:27:53 2010
@@ -23,8 +23,8 @@
import org.apache.axis2.deployment.DeploymentException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.synapse.ManagedLifecycle;
import org.apache.synapse.config.xml.ProxyServiceFactory;
+import org.apache.synapse.config.xml.ProxyServiceSerializer;
import org.apache.synapse.core.axis2.ProxyService;
/**
@@ -69,11 +69,12 @@
+ "' has been deployed from file : " + fileName);
return proxy.getName();
} else {
- log.error("ProxyService Deployment Failed. The artifact described in the file "
- + fileName + " is not a ProxyService");
+ handleSynapseArtifactDeploymentError("ProxyService Deployment Failed. The " +
+ "artifact described in the file " + fileName + " is not a ProxyService");
}
} catch (Exception e) {
- log.error("ProxyService Deployment from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "ProxyService Deployment from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -119,11 +120,12 @@
"update" : "deployed") + " from file : " + fileName);
return proxy.getName();
} else {
- log.error("ProxyService Update Failed. The artifact described in the file "
- + fileName + " is not a ProxyService");
+ handleSynapseArtifactDeploymentError("ProxyService Update Failed. The artifact " +
+ "described in the file " + fileName + " is not a ProxyService");
}
} catch (Exception e) {
- log.error("ProxyService Update from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "ProxyService Update from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -154,7 +156,36 @@
log.error("Couldn't find the ProxyService named : " + artifactName);
}
} catch (Exception e) {
- log.error("ProxyService Undeployement of proxy named : " + artifactName + " : Failed");
+ handleSynapseArtifactDeploymentError(
+ "ProxyService Undeployement of proxy named : " + artifactName + " : Failed", e);
+ }
+ }
+
+ @Override
+ public void restoreSynapseArtifact(String artifactName) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the ProxyService with name : " + artifactName + " : Started");
+ }
+
+ try {
+ ProxyService proxy
+ = getSynapseConfiguration().getProxyService(artifactName);
+ OMElement proxyElem = ProxyServiceSerializer.serializeProxy(null, proxy);
+ if (proxy.getFileName() != null) {
+ writeToFile(proxyElem, proxy.getFileName());
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the ProxyService with name : "
+ + artifactName + " : Completed");
+ }
+ log.info("ProxyService named '" + artifactName + "' has been restored");
+ } else {
+ handleSynapseArtifactDeploymentError("Couldn't restore the ProxyService named '"
+ + artifactName + "', filename cannot be found");
+ }
+ } catch (Exception e) {
+ handleSynapseArtifactDeploymentError(
+ "Restoring of the ProxyService named '" + artifactName + "' has failed", e);
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SequenceDeployer.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SequenceDeployer.java?rev=910021&r1=910020&r2=910021&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SequenceDeployer.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SequenceDeployer.java Sun Feb 14 15:27:53 2010
@@ -25,6 +25,7 @@
import org.apache.synapse.Mediator;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.config.xml.MediatorFactoryFinder;
+import org.apache.synapse.config.xml.MediatorSerializerFinder;
import org.apache.synapse.mediators.base.SequenceMediator;
/**
@@ -64,11 +65,12 @@
+ "' has been deployed from file : " + fileName);
return seq.getName();
} else {
- log.error("Sequence Deployment Failed. The artifact described in the file "
- + fileName + " is not a Sequence");
+ handleSynapseArtifactDeploymentError("Sequence Deployment Failed. " +
+ "The artifact described in the file " + fileName + " is not a Sequence");
}
} catch (Exception e) {
- log.error("Sequence Deployment from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "Sequence Deployment from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -89,8 +91,8 @@
if ((SynapseConstants.MAIN_SEQUENCE_KEY.equals(existingArtifactName)
|| SynapseConstants.FAULT_SEQUENCE_KEY.equals(existingArtifactName))
&& !existingArtifactName.equals(seq.getName())) {
- log.error(existingArtifactName + " sequence cannot be renamed");
- return existingArtifactName;
+ handleSynapseArtifactDeploymentError(
+ existingArtifactName + " sequence cannot be renamed");
}
seq.setFileName(fileName);
if (log.isDebugEnabled()) {
@@ -118,11 +120,12 @@
"update" : "deployed") + " from file : " + fileName);
return seq.getName();
} else {
- log.error("Sequence Update Failed. The artifact described in the file "
- + fileName + " is not a Sequence");
+ handleSynapseArtifactDeploymentError("Sequence Update Failed. " +
+ "The artifact described in the file " + fileName + " is not a Sequence");
}
} catch (Exception e) {
- log.error("Sequence Update from the file : " + fileName + " : Failed.", e);
+ handleSynapseArtifactDeploymentError(
+ "Sequence Update from the file : " + fileName + " : Failed.", e);
}
return null;
@@ -142,8 +145,8 @@
if (seq != null) {
if (SynapseConstants.MAIN_SEQUENCE_KEY.equals(seq.getName())
|| SynapseConstants.FAULT_SEQUENCE_KEY.equals(seq.getName())) {
- log.error("Cannot Undeploy the " + seq.getName() + " sequence");
- return;
+ handleSynapseArtifactDeploymentError(
+ "Cannot Undeploy the " + seq.getName() + " sequence");
}
getSynapseConfiguration().removeSequence(artifactName);
if (log.isDebugEnabled()) {
@@ -159,7 +162,36 @@
log.error("Couldn't find the sequence named : " + artifactName);
}
} catch (Exception e) {
- log.error("Sequence Undeployement of sequence named : " + artifactName + " : Failed");
+ handleSynapseArtifactDeploymentError(
+ "Sequence Undeployement of sequence named : " + artifactName + " : Failed", e);
+ }
+ }
+
+ @Override
+ public void restoreSynapseArtifact(String artifactName) {
+
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the Sequence with name : " + artifactName + " : Started");
+ }
+
+ try {
+ SequenceMediator seq
+ = getSynapseConfiguration().getDefinedSequences().get(artifactName);
+ OMElement seqElem = MediatorSerializerFinder.getInstance().getSerializer(seq).
+ serializeMediator(null, seq);
+ if (seq.getFileName() != null) {
+ writeToFile(seqElem, seq.getFileName());
+ if (log.isDebugEnabled()) {
+ log.debug("Restoring the Sequence with name : " + artifactName + " : Completed");
+ }
+ log.info("Sequence named '" + artifactName + "' has been restored");
+ } else {
+ handleSynapseArtifactDeploymentError("Couldn't restore the sequence named '"
+ + artifactName + "', filename cannot be found");
+ }
+ } catch (Exception e) {
+ handleSynapseArtifactDeploymentError(
+ "Restoring of the sequence named '" + artifactName + "' has failed", e);
}
}
}
Added: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SynapseArtifactDeploymentException.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SynapseArtifactDeploymentException.java?rev=910021&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SynapseArtifactDeploymentException.java (added)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/SynapseArtifactDeploymentException.java Sun Feb 14 15:27:53 2010
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.synapse.deployers;
+
+/**
+ * Represents an exception for synapse artifact deployment issues. Throwing a SynapseArtifactDeploymentException
+ * in the implementations of the {@link org.apache.synapse.deployers.AbstractSynapseArtifactDeployer} will cause the
+ * respective artifact to be re-stored, if it is either being updated or undeployed
+ *
+ * @see org.apache.synapse.deployers.AbstractSynapseArtifactDeployer
+ */
+public class SynapseArtifactDeploymentException extends RuntimeException {
+
+ public SynapseArtifactDeploymentException(String message) {
+ super(message);
+ }
+
+ public SynapseArtifactDeploymentException(Throwable cause) {
+ super(cause);
+ }
+
+ public SynapseArtifactDeploymentException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}