You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by az...@apache.org on 2012/03/02 13:01:41 UTC
svn commit: r1296163 - in /axis/axis2/java/core/branches/1_6/modules:
clustering/src/org/apache/axis2/clustering/state/
clustering/src/org/apache/axis2/clustering/state/commands/
kernel/src/org/apache/axis2/clustering/state/
Author: azeez
Date: Fri Mar 2 12:01:41 2012
New Revision: 1296163
URL: http://svn.apache.org/viewvc?rev=1296163&view=rev
Log:
Merging the following changes from trunk to the 1_6 branch
1. Do not replicate if state manager is not available
2. Added method to suspend Member
3. Added custom state replication functionality
Modified:
axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/commands/StateClusteringCommandCollection.java
axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java
axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java
Modified: axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java?rev=1296163&r1=1296162&r2=1296163&view=diff
==============================================================================
--- axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java (original)
+++ axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/DefaultStateManager.java Fri Mar 2 12:01:41 2012
@@ -57,15 +57,15 @@ public class DefaultStateManager impleme
public void updateContext(AbstractContext context) throws ClusteringFault {
StateClusteringCommand cmd =
StateClusteringCommandFactory.getUpdateCommand(context,
- excludedReplicationPatterns,
- false);
+ excludedReplicationPatterns,
+ false);
if (cmd != null) {
sender.sendToGroup(cmd);
}
}
public void updateContext(AbstractContext context,
- String[] propertyNames) throws ClusteringFault {
+ String[] propertyNames) throws ClusteringFault {
StateClusteringCommand cmd =
StateClusteringCommandFactory.getUpdateCommand(context, propertyNames);
if (cmd != null) {
@@ -76,8 +76,14 @@ public class DefaultStateManager impleme
public void updateContexts(AbstractContext[] contexts) throws ClusteringFault {
StateClusteringCommandCollection cmd =
StateClusteringCommandFactory.getCommandCollection(contexts,
- excludedReplicationPatterns);
- sender.sendToGroup(cmd);
+ excludedReplicationPatterns);
+ if (!cmd.isEmpty()) {
+ sender.sendToGroup(cmd);
+ }
+ }
+
+ public void replicateState(StateClusteringCommand command) throws ClusteringFault {
+ sender.sendToGroup(command);
}
public void removeContext(AbstractContext context) throws ClusteringFault {
Modified: axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/commands/StateClusteringCommandCollection.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/commands/StateClusteringCommandCollection.java?rev=1296163&r1=1296162&r2=1296163&view=diff
==============================================================================
--- axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/commands/StateClusteringCommandCollection.java (original)
+++ axis/axis2/java/core/branches/1_6/modules/clustering/src/org/apache/axis2/clustering/state/commands/StateClusteringCommandCollection.java Fri Mar 2 12:01:41 2012
@@ -24,27 +24,29 @@ import org.apache.axis2.clustering.state
import org.apache.axis2.context.ConfigurationContext;
import java.util.ArrayList;
+import java.util.List;
/**
- *
+ * A StateClusteringCommand consisting of a collection of other StateClusteringCommands
*/
public class StateClusteringCommandCollection extends StateClusteringCommand {
- private final ArrayList commands;
+ private final List<StateClusteringCommand> commands;
- public StateClusteringCommandCollection(ArrayList commands) {
+ public StateClusteringCommandCollection(List<StateClusteringCommand> commands) {
this.commands = commands;
}
public void execute(ConfigurationContext configContext) throws ClusteringFault {
- for (int i = 0; i < commands.size(); i++) {
- StateClusteringCommand cmd = (StateClusteringCommand) commands.get(i);
- if (cmd != null) {
- cmd.execute(configContext);
- }
+ for (StateClusteringCommand command : commands) {
+ command.execute(configContext);
}
}
+ public boolean isEmpty(){
+ return commands != null && commands.isEmpty();
+ }
+
public String toString() {
return "StateClusteringCommandCollection";
}
Modified: axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java?rev=1296163&r1=1296162&r2=1296163&view=diff
==============================================================================
--- axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java (original)
+++ axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/Replicator.java Fri Mar 2 12:01:41 2012
@@ -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,28 @@ 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 {
+
+ StateManager stateManager = getStateManager(axisConfig);
+ if (stateManager != null) {
+ stateManager.replicateState(command);
+ }
+ }
+
/**
* Replicates all serializable properties in the ConfigurationContext, ServiceGroupContext &
* ServiceContext
@@ -54,8 +73,11 @@ 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);
+ if (stateManager == null) {
+ return;
+ }
+ List<AbstractContext> contexts = new ArrayList<AbstractContext>();
// Do we need to replicate state stored in ConfigurationContext?
if (!configurationContext.getPropertyDifferences().isEmpty()) {
@@ -76,8 +98,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 +114,11 @@ public final class Replicator {
return;
}
log.debug("Going to replicate state in " + abstractContext + "...");
- StateManager stateManager = getContextManager(abstractContext);
- if (!abstractContext.getPropertyDifferences().isEmpty()) {
- stateManager.updateContext(abstractContext);
+ StateManager stateManager = getStateManager(abstractContext);
+ if (stateManager != null && !abstractContext.getPropertyDifferences().isEmpty()) {
+ synchronized (abstractContext) { // This IDEA/FindBugs warning can be ignored
+ stateManager.updateContext(abstractContext);
+ }
}
}
@@ -113,18 +136,28 @@ public final class Replicator {
return;
}
log.debug("Going to replicate selected properties in " + abstractContext + "...");
- StateManager stateManager = getContextManager(abstractContext);
- stateManager.updateContext(abstractContext, propertyNames);
+ StateManager stateManager = getStateManager(abstractContext);
+ if (stateManager != null) {
+ stateManager.updateContext(abstractContext, propertyNames);
+ }
}
private static ClusteringAgent getClusterManager(AbstractContext abstractContext) {
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) {
+ ClusteringAgent clusteringAgent = axisConfiguration.getClusteringAgent();
+ if (clusteringAgent != null) {
+ return clusteringAgent.getStateManager();
+ }
+ return null;
+ }
+
/**
* 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/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java?rev=1296163&r1=1296162&r2=1296163&view=diff
==============================================================================
--- axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java (original)
+++ axis/axis2/java/core/branches/1_6/modules/kernel/src/org/apache/axis2/clustering/state/StateManager.java Fri Mar 2 12:01:41 2012
@@ -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