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


Reply via email to