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/13 13:25:03 UTC
svn commit: r909803 - in /synapse/trunk/java:
modules/core/src/main/java/org/apache/synapse/config/xml/
modules/core/src/main/java/org/apache/synapse/deployers/ repository/conf/
Author: ruwan
Date: Sat Feb 13 12:25:01 2010
New Revision: 909803
URL: http://svn.apache.org/viewvc?rev=909803&view=rev
Log:
Further HotDeployment updates, HotDeployment is mostly completed, HotUpdate to be supported
Added:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/FileNameToArtifactNameHolder.java
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.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/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
synapse/trunk/java/repository/conf/axis2.xml
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java?rev=909803&r1=909802&r2=909803&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/config/xml/MultiXMLConfigurationBuilder.java Sat Feb 13 12:25:01 2010
@@ -30,7 +30,7 @@
import org.apache.synapse.config.SynapseConfigUtils;
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.core.axis2.ProxyService;
-import org.apache.synapse.endpoints.AbstractEndpoint;
+import org.apache.synapse.deployers.FileNameToArtifactNameHolder;
import org.apache.synapse.endpoints.Endpoint;
import org.apache.synapse.eventing.SynapseEventSource;
import org.apache.synapse.mediators.base.SequenceMediator;
@@ -168,6 +168,8 @@
Entry entry = SynapseXMLConfigurationFactory.defineEntry(
synapseConfig, document);
entry.setFileName(file.getName());
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ file.getAbsolutePath(), entry.getKey());
} catch (FileNotFoundException ignored) {}
}
}
@@ -188,6 +190,8 @@
ProxyService proxy = SynapseXMLConfigurationFactory.defineProxy(
synapseConfig, document);
proxy.setFileName(file.getName());
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ file.getAbsolutePath(), proxy.getName());
} catch (FileNotFoundException ignored) {}
}
}
@@ -210,6 +214,8 @@
if (startup instanceof AbstractStartup) {
((AbstractStartup) startup).setFileName(file.getName());
}
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ file.getAbsolutePath(), startup.getName());
} catch (FileNotFoundException ignored) {}
}
}
@@ -230,7 +236,10 @@
Mediator seq = SynapseXMLConfigurationFactory.defineSequence(
synapseConfig, document);
if (seq instanceof SequenceMediator) {
- ((SequenceMediator) seq).setFileName(file.getName());
+ SequenceMediator sequence = (SequenceMediator) seq;
+ sequence.setFileName(file.getName());
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ file.getAbsolutePath(), sequence.getName());
}
} catch (FileNotFoundException ignored) {}
}
@@ -251,9 +260,9 @@
OMElement document = parseFile(file);
Endpoint endpoint = SynapseXMLConfigurationFactory.defineEndpoint(
synapseConfig, document);
- if (endpoint instanceof AbstractEndpoint) {
- ((AbstractEndpoint) endpoint).setFileName(file.getName());
- }
+ endpoint.setFileName(file.getName());
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ file.getAbsolutePath(), endpoint.getName());
} catch (FileNotFoundException ignored) {}
}
}
@@ -274,6 +283,8 @@
SynapseEventSource eventSource = SynapseXMLConfigurationFactory.
defineEventSource(synapseConfig, document);
eventSource.setFileName(file.getName());
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ file.getAbsolutePath(), eventSource.getName());
} catch (FileNotFoundException ignored) {}
}
}
@@ -294,6 +305,8 @@
PriorityExecutor executor = SynapseXMLConfigurationFactory.
defineExecutor(synapseConfig, document);
executor.setFileName(file.getName());
+ FileNameToArtifactNameHolder.getInstance().addArtifact(
+ file.getAbsolutePath(), executor.getName());
} catch (FileNotFoundException ignored) {}
}
}
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=909803&r1=909802&r2=909803&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 Sat Feb 13 12:25:01 2010
@@ -28,6 +28,10 @@
import org.apache.axis2.deployment.DeploymentException;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
import org.apache.axis2.description.Parameter;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.synapse.ServerManager;
+import org.apache.synapse.ServerState;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.core.SynapseEnvironment;
@@ -51,14 +55,10 @@
*/
public abstract class AbstractSynapseArtifactDeployer implements Deployer {
+ private static final Log log = LogFactory.getLog(AbstractSynapseArtifactDeployer.class);
protected ConfigurationContext cfgCtx;
/**
- * Keeps track of the deployed artifacts in the synapse environment
- */
- private Map<String, String> fileName2ArtifactName = new HashMap<String, String>();
-
- /**
* Initializes the Synapse artifact deployment
*
* @param configCtx Axis2 ConfigurationContext
@@ -73,12 +73,23 @@
* artifact deployers.
*
* @param deploymentFileData file to be used for the deployment
- * @throws DeploymentException incase of an error in deploying the file
+ * @throws DeploymentException in-case of an error in deploying the file
*
* @see org.apache.synapse.deployers.AbstractSynapseArtifactDeployer#deploySynapseArtifact(
* org.apache.axiom.om.OMElement, String)
*/
public void deploy(DeploymentFileData deploymentFileData) throws DeploymentException {
+
+ if (ServerManager.getInstance().getServerState() != ServerState.STARTED) {
+ // synapse server has not yet being started
+ if (log.isDebugEnabled()) {
+ log.debug("Skipped the artifact deployment (since the Synapse " +
+ "server doesn't seem to be started yet), from file : "
+ + deploymentFileData.getAbsolutePath());
+ }
+ return;
+ }
+
String filename = deploymentFileData.getAbsolutePath();
try {
InputStream in = new FileInputStream(filename);
@@ -89,7 +100,7 @@
StAXUtils.createXMLStreamReader(in)).getDocumentElement();
String artifatcName = deploySynapseArtifact(element, filename);
if (artifatcName != null) {
- fileName2ArtifactName.put(filename, artifatcName);
+ FileNameToArtifactNameHolder.getInstance().addArtifact(filename, artifatcName);
}
} finally {
in.close();
@@ -117,8 +128,14 @@
* @see org.apache.synapse.deployers.AbstractSynapseArtifactDeployer#undeploySynapseArtifact(String)
*/
public void unDeploy(String fileName) throws DeploymentException {
- undeploySynapseArtifact(fileName2ArtifactName.get(fileName));
- fileName2ArtifactName.remove(fileName);
+ FileNameToArtifactNameHolder holder = FileNameToArtifactNameHolder.getInstance();
+ if (holder.containsFileName(fileName)) {
+ undeploySynapseArtifact(holder.getArtifactNameForFile(fileName));
+ holder.removeArtifactWithFileName(fileName);
+ } else {
+ throw new DeploymentException("Artifact representing the filename " + fileName
+ + " is not deployed on Synapse");
+ }
}
// We do not support dynamically setting the directory nor the extension
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=909803&r1=909802&r2=909803&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 Sat Feb 13 12:25:01 2010
@@ -57,6 +57,8 @@
if (log.isDebugEnabled()) {
log.debug("Endpoint Deployment from file : " + fileName + " : Completed");
}
+ log.info("Endpoint named '" + ep.getName()
+ + "' has been deployed from file : " + fileName);
return ep.getName();
} else {
log.error("Endpoint Deployment Failed. The artifact described in the file "
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=909803&r1=909802&r2=909803&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 Sat Feb 13 12:25:01 2010
@@ -57,6 +57,8 @@
if (log.isDebugEnabled()) {
log.debug("EventSource Deployment from file : " + fileName + " : Completed");
}
+ log.info("EventSource named '" + es.getName()
+ + "' has been deployed from file : " + fileName);
return es.getName();
} else {
log.error("EventSource Deployment Failed. The artifact described in the file "
Added: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/FileNameToArtifactNameHolder.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/FileNameToArtifactNameHolder.java?rev=909803&view=auto
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/FileNameToArtifactNameHolder.java (added)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/deployers/FileNameToArtifactNameHolder.java Sat Feb 13 12:25:01 2010
@@ -0,0 +1,109 @@
+/*
+ * 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;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Keeps track of the artifacts deployed with files inside the synapse repository</p>
+ *
+ * <p>For hot deployment to properly work we need to, keep track fo not only the artifacts
+ * deployed by deployers but also the artifacts deployed from files at the startup as well. Otherwise
+ * it is not possible to track the hot update cases. This is introduced as a <code>singleton</code>
+ * for the startup to report back for the deployed artifacts at startup apart from the deployers.</p>
+ *
+ * @see org.apache.synapse.deployers.AbstractSynapseArtifactDeployer
+ * @see org.apache.synapse.config.xml.MultiXMLConfigurationBuilder
+ */
+public class FileNameToArtifactNameHolder {
+
+ /**
+ * Keeps track of the deployed artifacts in the synapse environment
+ */
+ private static Map<String, String> fileName2ArtifactName = new HashMap<String, String>();
+
+ private static FileNameToArtifactNameHolder _instance;
+
+ private static final Log log = LogFactory.getLog(FileNameToArtifactNameHolder.class);
+
+ private FileNameToArtifactNameHolder() {}
+
+ /**
+ * Provides the <code>singleton</code> instance of
+ * {@link org.apache.synapse.deployers.FileNameToArtifactNameHolder}
+ *
+ * @return the singleton instance of FileNameToArtifactNameHolder
+ */
+ public static FileNameToArtifactNameHolder getInstance() {
+
+ if (_instance == null) {
+ _instance = new FileNameToArtifactNameHolder();
+ }
+ return _instance;
+ }
+
+ /**
+ * Adds artifacts indexed with the respective filename
+ *
+ * @param fileName name of the file from which the artifact being added is loaded
+ * @param artifactName name of the artifact being added
+ */
+ public void addArtifact(String fileName, String artifactName) {
+
+ if (!fileName2ArtifactName.containsKey(fileName)) {
+ fileName2ArtifactName.put(fileName, artifactName);
+ } else {
+ log.error("An artifact has already been loaded from the file : " + fileName);
+ }
+ }
+
+ /**
+ * Checks whether there is an artifact indexed with the given <code>filename</code>
+ *
+ * @param fileName artifact filename to be checked for the existence
+ * @return boolean <code>true</code> if it is available, <code>false</code> if not
+ */
+ public boolean containsFileName(String fileName) {
+ return fileName2ArtifactName.containsKey(fileName);
+ }
+
+ /**
+ * Retrieves the artifact name indexed with the given <code>filename</code>
+ *
+ * @param fileName name of the file which maps to the artifact
+ * @return String artifact name mapped with the give <code>filename</code>
+ */
+ public String getArtifactNameForFile(String fileName) {
+ return fileName2ArtifactName.get(fileName);
+ }
+
+ /**
+ * Removes the indexed artifacts to the <code>filename</code> mapping from the holder
+ *
+ * @param fileName name of the file of which the artifact required to be removed
+ */
+ public void removeArtifactWithFileName(String fileName) {
+ fileName2ArtifactName.remove(fileName);
+ }
+}
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=909803&r1=909802&r2=909803&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 Sat Feb 13 12:25:01 2010
@@ -53,6 +53,8 @@
if (log.isDebugEnabled()) {
log.debug("LocalEntry Deployment from file : " + fileName + " : Completed");
}
+ log.info("LocalEntry named '" + e.getKey()
+ + "' has been deployed from file : " + fileName);
return e.getKey();
} else {
log.error("LocalEntry Deployment Failed. The artifact described in the file "
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=909803&r1=909802&r2=909803&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 Sat Feb 13 12:25:01 2010
@@ -77,6 +77,8 @@
if (log.isDebugEnabled()) {
log.debug("ProxyService Deployment from file : " + fileName + " : Completed");
}
+ log.info("ProxyService named '" + proxy.getName()
+ + "' has been deployed from file : " + fileName);
return proxy.getName();
} else {
log.error("ProxyService Deployment Failed. The artifact described in the file "
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=909803&r1=909802&r2=909803&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 Sat Feb 13 12:25:01 2010
@@ -23,6 +23,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.Mediator;
+import org.apache.synapse.SynapseConstants;
import org.apache.synapse.config.xml.MediatorFactoryFinder;
import org.apache.synapse.mediators.base.SequenceMediator;
@@ -59,6 +60,8 @@
if (log.isDebugEnabled()) {
log.debug("Sequence Deployment from file : " + fileName + " : Completed");
}
+ log.info("Sequence named '" + seq.getName()
+ + "' has been deployed from file : " + fileName);
return seq.getName();
} else {
log.error("Sequence Deployment Failed. The artifact described in the file "
@@ -83,6 +86,11 @@
SequenceMediator seq
= getSynapseConfiguration().getDefinedSequences().get(artifactName);
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;
+ }
getSynapseConfiguration().removeSequence(artifactName);
if (log.isDebugEnabled()) {
log.debug("Destroying the sequence named : " + artifactName);
Modified: synapse/trunk/java/repository/conf/axis2.xml
URL: http://svn.apache.org/viewvc/synapse/trunk/java/repository/conf/axis2.xml?rev=909803&r1=909802&r2=909803&view=diff
==============================================================================
--- synapse/trunk/java/repository/conf/axis2.xml (original)
+++ synapse/trunk/java/repository/conf/axis2.xml Sat Feb 13 12:25:01 2010
@@ -21,7 +21,10 @@
<!-- ================================================= -->
<!-- Parameters -->
<!-- ================================================= -->
- <parameter name="hotdeployment">false</parameter>
+
+ <!-- WARNING: Hot deployment is turned on by default, but it is highly recommended to set this to false
+ on production environments, unless you really want to use hot deployment in production -->
+ <parameter name="hotdeployment">true</parameter>
<parameter name="hotupdate">false</parameter>
<parameter name="enableMTOM">false</parameter>
<parameter name="enableSwA">false</parameter>
@@ -77,6 +80,14 @@
***** Uncomment the following line to enable (hot) deployment of Synapse extensions (mediators and startups) ***** -->
<!--<deployer extension="xar" directory="extensions" class="org.apache.synapse.core.axis2.ExtensionDeployer"/>-->
+ <!-- WARNING: Synapse Artifact Deployers, it is highly recommended to comment out these deployers in production
+ unless you really want to use hot deployment/update -->
+ <deployer extension="xml" directory="conf/synapse-config/sequences" class="org.apache.synapse.deployers.SequenceDeployer"/>
+ <deployer extension="xml" directory="conf/synapse-config/endpoints" class="org.apache.synapse.deployers.EndpointDeployer"/>
+ <deployer extension="xml" directory="conf/synapse-config/local-entries" class="org.apache.synapse.deployers.LocalEntryDeployer"/>
+ <deployer extension="xml" directory="conf/synapse-config/proxy-services" class="org.apache.synapse.deployers.ProxyServiceDeployer"/>
+ <deployer extension="xml" directory="conf/synapse-config/event-sources" class="org.apache.synapse.deployers.EventSourceDeployer"/>
+
<!-- Following parameter will set the host name for the epr-->
<!--<parameter name="hostname" locked="true">myhost.com</parameter>-->