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