Author: azeez
Date: Thu Mar 10 10:15:21 2011
New Revision: 1080171
URL: http://svn.apache.org/viewvc?rev=1080171&view=rev
Log:
Added custom state replication functionality
Modified:
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java
Modified:
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java?rev=1080171&r1=1080170&r2=1080171&view=diff
==============================================================================
---
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
(original)
+++
axis/axis2/java/core/trunk/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
Thu Mar 10 10:15:21 2011
@@ -80,6 +80,10 @@ public class DefaultStateManager impleme
sender.sendToGroup(cmd);
}
+ public void replicateState(StateClusteringCommand command) throws
ClusteringFault {
+ sender.sendToGroup(command);
+ }
+
public void removeContext(AbstractContext context) throws ClusteringFault {
StateClusteringCommand cmd =
StateClusteringCommandFactory.getRemoveCommand(context);
sender.sendToGroup(cmd);
Modified:
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java?rev=1080171&r1=1080170&r2=1080171&view=diff
==============================================================================
---
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java
(original)
+++
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java
Thu Mar 10 10:15:21 2011
@@ -26,6 +26,7 @@ import org.apache.axis2.context.Configur
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;
@@ -35,10 +36,25 @@ import java.util.List;
/**
* Replicates serializable properties
*/
+@SuppressWarnings("unused")
public final class Replicator {
private static final Log log = LogFactory.getLog(Replicator.class);
+
+ /**
+ * Replicate state using a custom StateClusteringCommand
+ *
+ * @param command The StateClusteringCommand which is used for replicating
state
+ * @param axisConfig The AxisConfiguration
+ * @throws ClusteringFault If replication fails
+ */
+ public static void replicateState(StateClusteringCommand command,
+ AxisConfiguration axisConfig) throws
ClusteringFault {
+
+ getStateManager(axisConfig).replicateState(command);
+ }
+
/**
* Replicates all serializable properties in the ConfigurationContext,
ServiceGroupContext &
* ServiceContext
@@ -54,8 +70,8 @@ public final class Replicator {
log.debug("Going to replicate state stored in ConfigurationContext," +
" ServiceGroupContext, ServiceContext associated with " +
msgContext + "...");
ConfigurationContext configurationContext =
msgContext.getConfigurationContext();
- StateManager stateManager = getContextManager(msgContext);
- List contexts = new ArrayList();
+ StateManager stateManager = getStateManager(msgContext);
+ List<AbstractContext> contexts = new ArrayList<AbstractContext>();
// Do we need to replicate state stored in ConfigurationContext?
if (!configurationContext.getPropertyDifferences().isEmpty()) {
@@ -76,8 +92,7 @@ public final class Replicator {
// Do the actual replication here
if (!contexts.isEmpty()) {
- AbstractContext[] contextArray =
- (AbstractContext[]) contexts.toArray(new
AbstractContext[contexts.size()]);
+ AbstractContext[] contextArray = contexts.toArray(new
AbstractContext[contexts.size()]);
stateManager.updateContexts(contextArray);
}
}
@@ -93,9 +108,9 @@ public final class Replicator {
return;
}
log.debug("Going to replicate state in " + abstractContext + "...");
- StateManager stateManager = getContextManager(abstractContext);
+ StateManager stateManager = getStateManager(abstractContext);
if (!abstractContext.getPropertyDifferences().isEmpty()) {
- synchronized (abstractContext) {
+ synchronized (abstractContext) { // This IDEA/FindBugs warning can
be ignored
stateManager.updateContext(abstractContext);
}
}
@@ -115,7 +130,7 @@ public final class Replicator {
return;
}
log.debug("Going to replicate selected properties in " +
abstractContext + "...");
- StateManager stateManager = getContextManager(abstractContext);
+ StateManager stateManager = getStateManager(abstractContext);
stateManager.updateContext(abstractContext, propertyNames);
}
@@ -123,10 +138,14 @@ public final class Replicator {
return
abstractContext.getRootContext().getAxisConfiguration().getClusteringAgent();
}
- private static StateManager getContextManager(AbstractContext
abstractContext) {
+ private static StateManager getStateManager(AbstractContext
abstractContext) {
return getClusterManager(abstractContext).getStateManager();
}
+ private static StateManager getStateManager(AxisConfiguration
axisConfiguration) {
+ return axisConfiguration.getClusteringAgent().getStateManager();
+ }
+
/**
* 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
Modified:
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java
URL:
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java?rev=1080171&r1=1080170&r2=1080171&view=diff
==============================================================================
---
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java
(original)
+++
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java
Thu Mar 10 10:15:21 2011
@@ -88,6 +88,14 @@ public interface StateManager extends Pa
void updateContexts(AbstractContext[] contexts) throws ClusteringFault;
/**
+ * Replicate state using a custom StateClusteringCommand
+ *
+ * @param command The custom StateClusteringCommand which can be used for
replicating state
+ * @throws ClusteringFault If replication fails
+ */
+ void replicateState(StateClusteringCommand command) throws ClusteringFault;
+
+ /**
* This method is called when {@link AbstractContext} is removed from the
system
*
* @param context The AbstractContext to be removed