You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by az...@apache.org on 2007/12/05 08:23:33 UTC
svn commit: r601231 - in /webservices/axis2/trunk/java/modules:
clustering/src/org/apache/axis2/clustering/context/
clustering/src/org/apache/axis2/clustering/tribes/
kernel/src/org/apache/axis2/clustering/
kernel/src/org/apache/axis2/clustering/context/
Author: azeez
Date: Tue Dec 4 23:23:31 2007
New Revision: 601231
URL: http://svn.apache.org/viewvc?rev=601231&view=rev
Log:
Handle replication of only selected properties
Modified:
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/ContextClusteringCommandFactory.java
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/DefaultContextManager.java
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/ContextManager.java
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java
Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/ContextClusteringCommandFactory.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/ContextClusteringCommandFactory.java?rev=601231&r1=601230&r2=601231&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/ContextClusteringCommandFactory.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/ContextClusteringCommandFactory.java Tue Dec 4 23:23:31 2007
@@ -19,12 +19,13 @@
package org.apache.axis2.clustering.context;
import org.apache.axiom.om.util.UUIDGenerator;
+import org.apache.axis2.clustering.ClusteringFault;
import org.apache.axis2.clustering.context.commands.ContextClusteringCommandCollection;
+import org.apache.axis2.clustering.context.commands.DeleteServiceGroupContextCommand;
import org.apache.axis2.clustering.context.commands.UpdateConfigurationContextCommand;
import org.apache.axis2.clustering.context.commands.UpdateContextCommand;
import org.apache.axis2.clustering.context.commands.UpdateServiceContextCommand;
import org.apache.axis2.clustering.context.commands.UpdateServiceGroupContextCommand;
-import org.apache.axis2.clustering.context.commands.DeleteServiceGroupContextCommand;
import org.apache.axis2.clustering.tribes.AckManager;
import org.apache.axis2.context.AbstractContext;
import org.apache.axis2.context.ConfigurationContext;
@@ -42,15 +43,15 @@
import java.util.Map;
/**
- *
+ *
*/
public final class ContextClusteringCommandFactory {
private static final Log log = LogFactory.getLog(ContextClusteringCommandFactory.class);
public static ContextClusteringCommandCollection
- getCommandCollection(AbstractContext[] contexts,
- Map excludedReplicationPatterns) {
+ getCommandCollection(AbstractContext[] contexts,
+ Map excludedReplicationPatterns) {
ArrayList commands = new ArrayList(contexts.length);
ContextClusteringCommandCollection collection =
@@ -69,8 +70,8 @@
}
/**
- * @param context
- * @param excludedPropertyPatterns
+ * @param context The context
+ * @param excludedPropertyPatterns The property patterns to be excluded
* @param includeAllProperties True - Include all properties,
* False - Include only property differences
* @return ContextClusteringCommand
@@ -79,6 +80,49 @@
Map excludedPropertyPatterns,
boolean includeAllProperties) {
+ UpdateContextCommand cmd = toUpdateContextCommand(context);
+ if (cmd != null) {
+ cmd.setUniqueId(UUIDGenerator.getUUID());
+ fillProperties(cmd,
+ context,
+ excludedPropertyPatterns,
+ includeAllProperties);
+ if (cmd.isPropertiesEmpty()) {
+ cmd = null;
+ } else {
+ AckManager.addInitialAcknowledgement(cmd);
+ }
+ }
+
+ synchronized (context) {
+ context.clearPropertyDifferences(); // Once we send the diffs, we should clear the diffs
+ }
+ return cmd;
+ }
+
+
+ public static ContextClusteringCommand getUpdateCommand(AbstractContext context,
+ String[] propertyNames)
+ throws ClusteringFault {
+
+ UpdateContextCommand cmd = toUpdateContextCommand(context);
+ if (cmd != null) {
+ cmd.setUniqueId(UUIDGenerator.getUUID());
+ fillProperties(cmd, context, propertyNames);
+ if (cmd.isPropertiesEmpty()) {
+ cmd = null;
+ } else {
+ AckManager.addInitialAcknowledgement(cmd);
+ }
+ }
+
+ synchronized (context) {
+ context.clearPropertyDifferences(); // Once we send the diffs, we should clear the diffs
+ }
+ return cmd;
+ }
+
+ private static UpdateContextCommand toUpdateContextCommand(AbstractContext context) {
UpdateContextCommand cmd = null;
if (context instanceof ConfigurationContext) {
cmd = new UpdateConfigurationContextCommand();
@@ -98,29 +142,13 @@
updateServiceCmd.setServiceGroupContextId(serviceCtx.getServiceGroupContext().getId());
updateServiceCmd.setServiceName(serviceCtx.getAxisService().getName());
}
- if (cmd != null) {
- cmd.setUniqueId(UUIDGenerator.getUUID());
- fillProperties(cmd,
- context,
- excludedPropertyPatterns,
- includeAllProperties);
- if (cmd.isPropertiesEmpty()) {
- cmd = null;
- } else {
- AckManager.addInitialAcknowledgement(cmd);
- }
- }
-
- synchronized (context) {
- context.clearPropertyDifferences(); // Once we send the diffs, we should clear the diffs
- }
return cmd;
}
/**
- * @param updateCmd
- * @param context
- * @param excludedPropertyPatterns
+ * @param updateCmd The command
+ * @param context The context
+ * @param excludedPropertyPatterns The property patterns to be excluded from replication
* @param includeAllProperties True - Include all properties,
* False - Include only property differences
*/
@@ -158,8 +186,7 @@
if (prop instanceof Serializable) { // First check whether it is serializable
// Next check whether it matches an excluded pattern
- if (!isExcluded(key, context.getClass().getName(), excludedPropertyPatterns))
- {
+ if (!isExcluded(key, context.getClass().getName(), excludedPropertyPatterns)) {
log.debug("sending property =" + key + "-" + prop);
PropertyDifference diff = new PropertyDifference(key, prop, false);
updateCmd.addProperty(diff);
@@ -170,6 +197,31 @@
}
}
+ private static void fillProperties(UpdateContextCommand updateCmd,
+ AbstractContext context,
+ String[] propertyNames) throws ClusteringFault {
+ synchronized (context) {
+ Map diffs = context.getPropertyDifferences();
+ for (int i = 0; i < propertyNames.length; i++) {
+ String key = propertyNames[i];
+ Object prop = context.getPropertyNonReplicable(key);
+
+ // First check whether it is serializable
+ if (prop instanceof Serializable) {
+ log.debug("sending property =" + key + "-" + prop);
+ PropertyDifference diff = (PropertyDifference) diffs.get(key);
+ diff.setValue(prop);
+ updateCmd.addProperty(diff);
+ } else {
+ String msg =
+ "Trying to replicate non-serializable property " + key +
+ " in context " + context;
+ throw new ClusteringFault(msg);
+ }
+ }
+ }
+ }
+
private static boolean isExcluded(String propertyName,
String ctxClassName,
Map excludedPropertyPatterns) {
@@ -216,9 +268,9 @@
DeleteServiceGroupContextCommand cmd = new DeleteServiceGroupContextCommand();
cmd.setUniqueId(UUIDGenerator.getUUID());
cmd.setServiceGroupContextId(sgCtx.getId());
-
+
return cmd;
- }
+ }
return null;
}
}
Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/DefaultContextManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/DefaultContextManager.java?rev=601231&r1=601230&r2=601231&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/DefaultContextManager.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/context/DefaultContextManager.java Tue Dec 4 23:23:31 2007
@@ -65,6 +65,17 @@
return null;
}
+ public String updateContext(AbstractContext context,
+ String[] propertyNames) throws ClusteringFault {
+ ContextClusteringCommand cmd =
+ ContextClusteringCommandFactory.getUpdateCommand(context, propertyNames);
+ if (cmd != null) {
+ processor.process(cmd);
+ return cmd.getUniqueId();
+ }
+ return null;
+ }
+
public String updateContexts(AbstractContext[] contexts) throws ClusteringFault {
ContextClusteringCommandCollection cmd =
ContextClusteringCommandFactory.getCommandCollection(contexts,
Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java?rev=601231&r1=601230&r2=601231&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/clustering/tribes/TribesClusterManager.java Tue Dec 4 23:23:31 2007
@@ -134,7 +134,7 @@
controlCmdProcessor.setChannelSender(sender);
channel = new GroupChannel();
- String localIP = System.getProperty("local.ip.address"); //TODO: Use ClusteringConstants.LOCAL_IP_ADDRESS
+ String localIP = System.getProperty(ClusteringConstants.LOCAL_IP_ADDRESS);
if (localIP != null) {
ReceiverBase receiver = (ReceiverBase) channel.getChannelReceiver();
receiver.setAddress(localIP);
@@ -291,13 +291,8 @@
}
public boolean isParameterLocked(String parameterName) {
-
Parameter parameter = (Parameter) parameters.get(parameterName);
- if (parameter != null) {
- return parameter.isLocked();
- }
-
- return false;
+ return parameter != null && parameter.isLocked();
}
public void removeParameter(Parameter param) throws AxisFault {
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java?rev=601231&r1=601230&r2=601231&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/ClusteringConstants.java Tue Dec 4 23:23:31 2007
@@ -32,5 +32,5 @@
public static final String CLUSTER_INITIALIZED = "local_cluster.initialized";
public static final String TIME_TO_SEND = "local_cluster.time.to.send";
public static final String BLOCK_ALL_REQUESTS = "local_wso2wsas.block.requests";
- public static final String LOCAL_IP_ADDRESS = "local.ip.address";
+ public static final String LOCAL_IP_ADDRESS = "axis2.local.ip.address";
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/ContextManager.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/ContextManager.java?rev=601231&r1=601230&r2=601231&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/ContextManager.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/ContextManager.java Tue Dec 4 23:23:31 2007
@@ -34,34 +34,45 @@
* This could be addition of new properties, modifications of existing properties or
* removal of properties.
*
- * @param context
+ * @param context The AbstractContext containing the properties to be replicated
* @return The UUID of the message that was sent to the group communications framework
- * @throws ClusteringFault
+ * @throws ClusteringFault If replication fails
*/
String updateContext(AbstractContext context) throws ClusteringFault;
/**
+ * This method is called when one need to update/replicate only certains properties in the
+ * specified <code>context</code>
+ *
+ * @param context The AbstractContext containing the properties to be replicated
+ * @param propertyNames The names of the specific properties that should be replicated
+ * @return The UUID of the message that was sent to the group communications framework
+ * @throws ClusteringFault If replication fails
+ */
+ String updateContext(AbstractContext context, String[] propertyNames) throws ClusteringFault;
+
+ /**
* This method is called when properties in a collection of {@link AbstractContext}s are updated.
* This could be addition of new properties, modifications of existing properties or
* removal of properties.
*
- * @param contexts
+ * @param contexts The AbstractContexts containing the properties to be replicated
* @return The UUID of the message that was sent to the group communications framework
- * @throws ClusteringFault
+ * @throws ClusteringFault If replication fails
*/
String updateContexts(AbstractContext[] contexts) throws ClusteringFault;
/**
* This method is called when a new {@link AbstractContext} is removed from the system
*
- * @param context
+ * @param context The AbstractContext to be removed
* @return The UUID of the message that was sent to the group communications framework
- * @throws ClusteringFault
+ * @throws ClusteringFault If context removal fails
*/
String removeContext(AbstractContext context) throws ClusteringFault;
/**
- * @param context
+ * @param context AbstractContext
* @return True - if the provided {@link AbstractContext} is clusterable
*/
boolean isContextClusterable(AbstractContext context);
@@ -69,20 +80,20 @@
/**
* Indicates whether a particular message has been ACKed by all members of a cluster
*
- * @param messageUniqueId
+ * @param messageUniqueId The UUID of the message in concern
* @return true - if all memebers have ACKed the message with ID <code>messageUniqueId</code>
* false - otherwise
- * @throws ClusteringFault
+ * @throws ClusteringFault If an error occurs while checking whether a message is ACKed
*/
boolean isMessageAcknowledged(String messageUniqueId) throws ClusteringFault;
/**
- * @param listener
+ * @param listener ContextManagerListener
*/
void setContextManagerListener(ContextManagerListener listener);
/**
- * @param configurationContext
+ * @param configurationContext ConfigurationContext
*/
void setConfigurationContext(ConfigurationContext configurationContext);
@@ -92,7 +103,8 @@
* <p/>
* Generally, we can use the context class name as the context type.
*
- * @param contextType
+ * @param contextType The type of the context such as ConfigurationContext,
+ * ServiceGroupContext & ServiceContext
* @param patterns The patterns
*/
void setReplicationExcludePatterns(String contextType, List patterns);
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java?rev=601231&r1=601230&r2=601231&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/clustering/context/Replicator.java Tue Dec 4 23:23:31 2007
@@ -20,14 +20,13 @@
package org.apache.axis2.clustering.context;
import org.apache.axis2.clustering.ClusterManager;
-import org.apache.axis2.clustering.ClusteringFault;
import org.apache.axis2.clustering.ClusteringConstants;
+import org.apache.axis2.clustering.ClusteringFault;
import org.apache.axis2.context.AbstractContext;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.ServiceContext;
import org.apache.axis2.context.ServiceGroupContext;
-import org.apache.axis2.engine.AxisConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -38,116 +37,126 @@
private static final Log log = LogFactory.getLog(Replicator.class);
+ /**
+ * Replicates all serializable properties in the ConfigurationContext, ServiceGroupContext &
+ * ServiceContext
+ *
+ * @param msgContext The MessageContext associated with the ServiceContext,
+ * ServiceGroupContext and ConfigurationContext to be replicated
+ * @throws ClusteringFault If replication fails
+ */
public static void replicate(MessageContext msgContext) throws ClusteringFault {
- if (!doReplication(msgContext)) {
+ if (!canReplicate(msgContext)) {
return;
}
- log.debug("Going to replicate state...");
- try {
- replicateState(msgContext);
- } catch (Exception e) {
- String message = "Could not replicate the state";
- log.error(message, e);
- throw new ClusteringFault(message, e);
+ log.debug("Going to replicate state stored in ConfigurationContext," +
+ " ServiceGroupContext, ServiceContext associated with " + msgContext + "...");
+ ConfigurationContext configurationContext = msgContext.getConfigurationContext();
+ ContextManager contextManager = getContextManager(msgContext);
+ List contexts = new ArrayList();
+
+ // Do we need to replicate state stored in ConfigurationContext?
+ if (!configurationContext.getPropertyDifferences().isEmpty()) {
+ contexts.add(configurationContext);
+ }
+
+ // Do we need to replicate state stored in ServiceGroupContext?
+ ServiceGroupContext sgContext = msgContext.getServiceGroupContext();
+ if (sgContext != null && !sgContext.getPropertyDifferences().isEmpty()) {
+ contexts.add(sgContext);
+ }
+
+ // Do we need to replicate state stored in ServiceContext?
+ ServiceContext serviceContext = msgContext.getServiceContext();
+ if (serviceContext != null && !serviceContext.getPropertyDifferences().isEmpty()) {
+ contexts.add(serviceContext);
+ }
+
+ // Do the actual replication here
+ if (!contexts.isEmpty()) {
+ AbstractContext[] contextArray =
+ (AbstractContext[]) contexts.toArray(new AbstractContext[contexts.size()]);
+ String msgUUID = contextManager.updateContexts(contextArray);
+ waitForACKs(contextManager, msgUUID, msgContext.getRootContext());
}
}
+ /**
+ * Replicate all serializable properties stored in the given <code>abstractContext</code>.
+ *
+ * @param abstractContext The AbstractContext which holds the properties to be replicated
+ * @throws ClusteringFault If replication fails
+ */
public static void replicate(AbstractContext abstractContext) throws ClusteringFault {
- if (!doReplication(abstractContext)) {
+ if (!canReplicate(abstractContext)) {
return;
}
- log.debug("Going to replicate state...");
- try {
- replicateState(abstractContext);
- } catch (Exception e) {
- String message = "Could not replicate the state";
- log.error(message, e);
- throw new ClusteringFault(message, e);
+ log.debug("Going to replicate state in " + abstractContext + "...");
+ ContextManager contextManager = getContextManager(abstractContext);
+ if (!abstractContext.getPropertyDifferences().isEmpty()) {
+ String msgUUID = contextManager.updateContext(abstractContext);
+ waitForACKs(contextManager, msgUUID, abstractContext.getRootContext());
}
}
/**
- * Do replication only if context replication is enabled.
- * Also note that if there are no members, we need not do any replication
+ * Replicate all the properties given in <code>propertyNames</code>
+ * in the specified <code>abstractContext</code>
*
- * @param abstractContext
- * @return true - State needs to be replicated
- * false - otherwise
+ * @param abstractContext The context to be replicated
+ * @param propertyNames The names of the properties to be replicated
+ * @throws ClusteringFault IF replication fails
*/
- private static boolean doReplication(AbstractContext abstractContext) {
+ public static void replicate(AbstractContext abstractContext,
+ String[] propertyNames) throws ClusteringFault {
+ if (!canReplicate(abstractContext)) {
+ return;
+ }
+ log.debug("Going to replicate selected properties in " + abstractContext + "...");
+ ContextManager contextManager = getContextManager(abstractContext);
+ String msgUUID = contextManager.updateContext(abstractContext, propertyNames);
+ if (msgUUID != null) {
+ waitForACKs(contextManager, msgUUID, abstractContext.getRootContext());
+ }
+ }
+
+ private static ContextManager getContextManager(AbstractContext abstractContext) {
ClusterManager clusterManager =
abstractContext.getRootContext().getAxisConfiguration().getClusterManager();
- return clusterManager != null &&
- clusterManager.getContextManager() != null;
+ return clusterManager.getContextManager();
}
- private static void replicateState(AbstractContext abstractContext) throws ClusteringFault {
+ /**
+ * Check whether the state store in the specified <code>abstractContext</code> can be replicated.
+ * Also note that if there are no members, we need not do any replication
+ *
+ * @param abstractContext The context to be subjected to this test
+ * @return true - State needs to be replicated
+ * false - otherwise
+ */
+ private static boolean canReplicate(AbstractContext abstractContext) {
ClusterManager clusterManager =
abstractContext.getRootContext().getAxisConfiguration().getClusterManager();
- if (clusterManager != null) {
- ContextManager contextManager = clusterManager.getContextManager();
- if (contextManager == null) {
- String msg = "Cannot replicate contexts since " +
- "ContextManager is not specified in the axis2.xml file.";
- throw new ClusteringFault(msg);
- }
- if (!abstractContext.getPropertyDifferences().isEmpty()) {
- String msgUUID = contextManager.updateContext(abstractContext);
- waitForACKs(contextManager, msgUUID, abstractContext.getRootContext());
- }
- } else {
- String msg = "Cannot replicate contexts since " +
- "ClusterManager is not specified in the axis2.xml file.";
- throw new ClusteringFault(msg);
+ boolean canReplicate = false;
+ if (clusterManager != null && clusterManager.getContextManager() != null) {
+ canReplicate =
+ clusterManager.getContextManager().isContextClusterable(abstractContext);
}
+ return canReplicate;
}
- private static void replicateState(MessageContext msgContext) throws ClusteringFault {
- ConfigurationContext configurationContext = msgContext.getConfigurationContext();
- AxisConfiguration axisConfiguration = configurationContext.getAxisConfiguration();
- ClusterManager clusterManager = axisConfiguration.getClusterManager();
-
- if (clusterManager != null) {
-
- ContextManager contextManager = clusterManager.getContextManager();
- if (contextManager == null) {
- String msg = "Cannot replicate contexts since " +
- "ContextManager is not specified in the axis2.xml file.";
- throw new ClusteringFault(msg);
- }
-
- List contexts = new ArrayList();
-
- // Do we need to replicate state stored in ConfigurationContext?
- if (!configurationContext.getPropertyDifferences().isEmpty()) {
- contexts.add(configurationContext);
- }
-
- // Do we need to replicate state stored in ServiceGroupContext?
- ServiceGroupContext sgContext = msgContext.getServiceGroupContext();
- if (sgContext != null && !sgContext.getPropertyDifferences().isEmpty()) {
- contexts.add(sgContext);
- }
-
- // Do we need to replicate state stored in ServiceContext?
- ServiceContext serviceContext = msgContext.getServiceContext();
- if (serviceContext != null && !serviceContext.getPropertyDifferences().isEmpty()) {
- contexts.add(serviceContext);
- }
-
- // Do the actual replication here
- if (!contexts.isEmpty()) {
- AbstractContext[] contextArray =
- (AbstractContext[]) contexts.toArray(new AbstractContext[contexts.size()]);
- String msgUUID = contextManager.updateContexts(contextArray);
- waitForACKs(contextManager, msgUUID, msgContext.getRootContext());
- }
-
- } else {
- String msg = "Cannot replicate contexts since " +
- "ClusterManager is not specified in the axis2.xml file.";
- throw new ClusteringFault(msg);
- }
+ /**
+ * Check whether the state store in the specified <code>messageContext</code> can be replicated.
+ * Also note that if there are no members, we need not do any replication
+ *
+ * @param messageContext The MessageContext to be subjected to this test
+ * @return true - State needs to be replicated
+ * false - otherwise
+ */
+ private static boolean canReplicate(MessageContext messageContext) {
+ ClusterManager clusterManager =
+ messageContext.getRootContext().getAxisConfiguration().getClusterManager();
+ return clusterManager != null && clusterManager.getContextManager() != null;
}
private static void waitForACKs(ContextManager contextManager,
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org