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/06/14 10:52:14 UTC
svn commit: r547179 - in
/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2:
clustering/context/ContextManager.java clustering/context/Replicator.java
context/AbstractContext.java
Author: azeez
Date: Thu Jun 14 01:52:13 2007
New Revision: 547179
URL: http://svn.apache.org/viewvc?view=rev&rev=547179
Log:
Properly implementing AbstractContext.flush()
Modified:
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
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/AbstractContext.java
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?view=diff&rev=547179&r1=547178&r2=547179
==============================================================================
--- 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 Thu Jun 14 01:52:13 2007
@@ -51,9 +51,8 @@
/**
* @param context
* @return True - if the provided {@link AbstractContext} is clusterable
- * @throws ClusteringFault
*/
- boolean isContextClusterable(AbstractContext context) throws ClusteringFault;
+ boolean isContextClusterable(AbstractContext context);
/**
* Indicates whether a particular message has been ACKed by all members of a cluster
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?view=diff&rev=547179&r1=547178&r2=547179
==============================================================================
--- 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 Thu Jun 14 01:52:13 2007
@@ -18,7 +18,11 @@
import org.apache.axis2.clustering.ClusterManager;
import org.apache.axis2.clustering.ClusteringFault;
-import org.apache.axis2.context.*;
+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.description.AxisOperation;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.commons.logging.Log;
@@ -32,30 +36,69 @@
private static final Log log = LogFactory.getLog(Replicator.class);
public static void replicate(MessageContext msgContext) throws ClusteringFault {
-
- // Do replication only if context replication is enabled.
- // Also note that if there are no members, we need not do any replication
- ClusterManager clusterManager =
- msgContext.getConfigurationContext().getAxisConfiguration().getClusterManager();
- if (clusterManager == null ||
- clusterManager.getContextManager() == null ||
- clusterManager.getMemberCount() == 0) {
+ if (!doReplication(msgContext)) {
return;
}
+ log.debug("Going to replicate state...");
+ try {
+ replicateState(msgContext);
+ } catch (Exception e) {
+ String message = "Could not replicate the state";
+ throw new ClusteringFault(message, e);
+ }
+ }
- AxisOperation axisOperation = msgContext.getAxisOperation();
- if (axisOperation == null) {
+ public static void replicate(AbstractContext abstractContext) throws ClusteringFault {
+ if (!doReplication(abstractContext)) {
return;
}
log.debug("Going to replicate state...");
try {
- replicateState(msgContext);
+ replicateState(abstractContext);
} catch (Exception e) {
String message = "Could not replicate the state";
throw new ClusteringFault(message, e);
}
}
+ /**
+ * Do replication only if context replication is enabled.
+ * Also note that if there are no members, we need not do any replication
+ *
+ * @param abstractContext
+ * @return true - State needs to be replicated
+ * false - otherwise
+ */
+ private static boolean doReplication(AbstractContext abstractContext) {
+ ClusterManager clusterManager =
+ abstractContext.getRootContext().getAxisConfiguration().getClusterManager();
+ return clusterManager != null &&
+ clusterManager.getContextManager() != null &&
+ clusterManager.getContextManager().isContextClusterable(abstractContext) &&
+ clusterManager.getMemberCount() != 0;
+ }
+
+ private static void replicateState(AbstractContext abstractContext) throws ClusteringFault {
+ 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);
+ }
+ } else {
+ String msg = "Cannot replicate contexts since " +
+ "ClusterManager is not specified in the axis2.xml file.";
+ throw new ClusteringFault(msg);
+ }
+ }
+
private static void replicateState(MessageContext msgContext) throws ClusteringFault {
ConfigurationContext configurationContext = msgContext.getConfigurationContext();
AxisConfiguration axisConfiguration = configurationContext.getAxisConfiguration();
@@ -94,23 +137,7 @@
String msgUUID =
contextManager.updateContexts((AbstractContext[]) contexts.
toArray(new AbstractContext[contexts.size()]));
-
- long start = System.currentTimeMillis();
-
- // Wait till all members have ACKed receipt & successful processing of
- // the message with UUID 'msgUUID'
- do {
-
- // Wait sometime before checking whether message is ACKed
- try {
- Thread.sleep(50);
- } catch (InterruptedException ignored) {
- }
- if (System.currentTimeMillis() - start > 40000) {
- throw new ClusteringFault("ACKs not received from all members within 40 sec. " +
- "Aborting wait.");
- }
- } while (!contextManager.isMessageAcknowledged(msgUUID));
+ waitForACKs(contextManager, msgUUID);
}
} else {
@@ -118,5 +145,25 @@
"ClusterManager is not specified in the axis2.xml file.";
throw new ClusteringFault(msg);
}
+ }
+
+ private static void waitForACKs(ContextManager contextManager,
+ String msgUUID) throws ClusteringFault {
+ long start = System.currentTimeMillis();
+
+ // Wait till all members have ACKed receipt & successful processing of
+ // the message with UUID 'msgUUID'
+ do {
+
+ // Wait sometime before checking whether message is ACKed
+ try {
+ Thread.sleep(50);
+ } catch (InterruptedException ignored) {
+ }
+ if (System.currentTimeMillis() - start > 40000) {
+ throw new ClusteringFault("ACKs not received from all members within 40 sec. " +
+ "Aborting wait.");
+ }
+ } while (!contextManager.isMessageAcknowledged(msgUUID));
}
}
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/AbstractContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/AbstractContext.java?view=diff&rev=547179&r1=547178&r2=547179
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/AbstractContext.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/AbstractContext.java Thu Jun 14 01:52:13 2007
@@ -19,9 +19,7 @@
import org.apache.axis2.AxisFault;
import org.apache.axis2.clustering.ClusterManager;
-import org.apache.axis2.clustering.context.ContextManager;
-import org.apache.axis2.engine.AxisConfiguration;
-import org.apache.axis2.i18n.Messages;
+import org.apache.axis2.clustering.context.Replicator;
import java.util.Collections;
import java.util.HashMap;
@@ -274,24 +272,7 @@
}
public void flush() throws AxisFault {
-
- ConfigurationContext configContext = getRootContext();
- if (configContext == null) {
- throw new AxisFault(Messages.getMessage("cannotFlushRootNull"));
- }
-
- AxisConfiguration axisConfiguration = configContext.getAxisConfiguration();
- ClusterManager clusterManager = axisConfiguration.getClusterManager();
-
- //Calling the ClusterManager probably to replicate the updated state of the context.
- if (clusterManager != null) {
- ContextManager contextManager = clusterManager.getContextManager();
- if (contextManager != null && contextManager.isContextClusterable(this)) {
- contextManager.updateContext(this);
- }
- }
-
- //Other logic needed for flushing the contexts
+ Replicator.replicate(this);
}
public abstract ConfigurationContext getRootContext();
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org