Author: azeez
Date: Tue May 15 08:18:32 2007
New Revision: 538202

URL: http://svn.apache.org/viewvc?view=rev&rev=538202
Log:
Busy waiting of replication send requests when the TribesClusterManager has not 
still initialized.


Modified:
    webservices/axis2/trunk/java/modules/clustering/project.xml
    
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/handlers/ReplicationHandler.java
    
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/TribesClusterManager.java
    
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/TribesContextManager.java
    
webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/UpdateStateTestCase.java
    
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManager.java
    
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/AbstractContext.java

Modified: webservices/axis2/trunk/java/modules/clustering/project.xml
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/project.xml?view=diff&rev=538202&r1=538201&r2=538202
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/project.xml (original)
+++ webservices/axis2/trunk/java/modules/clustering/project.xml Tue May 15 
08:18:32 2007
@@ -21,7 +21,7 @@
     <extend>../../etc/project.xml</extend>
 
     <name>Apache Axis 2.0 - Cluster</name>
-    <id>axis2-cluster</id>
+    <id>axis2-clustering</id>
     <groupId>org.apache.axis2</groupId>
     <description>Clustering Support for Axis 2.0</description>
 

Modified: 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/handlers/ReplicationHandler.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/handlers/ReplicationHandler.java?view=diff&rev=538202&r1=538201&r2=538202
==============================================================================
--- 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/handlers/ReplicationHandler.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/handlers/ReplicationHandler.java
 Tue May 15 08:18:32 2007
@@ -71,14 +71,14 @@
                        ServiceGroupContext serviceGroupContext = 
message.getServiceGroupContext();
 
                        
-                       contextManager.updateState(configurationContext);
+                       contextManager.updateContext(configurationContext);
 
                        if (serviceGroupContext != null) {
-                               contextManager.updateState(serviceGroupContext);
+                               
contextManager.updateContext(serviceGroupContext);
                        }
 
                        if (serviceContext != null) {
-                               contextManager.updateState(serviceContext);
+                               contextManager.updateContext(serviceContext);
                        }
 
                }

Modified: 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/TribesClusterManager.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/TribesClusterManager.java?view=diff&rev=538202&r1=538201&r2=538202
==============================================================================
--- 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/TribesClusterManager.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/TribesClusterManager.java
 Tue May 15 08:18:32 2007
@@ -16,10 +16,6 @@
 
 package org.apache.axis2.cluster.tribes;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
 import org.apache.axiom.om.OMElement;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.cluster.ClusterManager;
@@ -41,156 +37,151 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+
 public class TribesClusterManager implements ClusterManager {
 
-       private TribesConfigurationManager configurationManager = null;
-       private TribesContextManager contextManager = null;
-       private ContextUpdater updater;
-       private static long timeout = 1000L; // this should be configured in 
the axis2.xml
-       private HashMap parameters = null;
-       Channel channel = null;
-       TransientTribesChannelInfo channelInfo = null;
-       TransientTribesMemberInfo memberInfo = null;
-       
+    private TribesConfigurationManager configurationManager;
+    private TribesContextManager contextManager;
+
+    private HashMap parameters = null;
+    private Channel channel = null;
+    private TransientTribesChannelInfo channelInfo = null;
+    private TransientTribesMemberInfo memberInfo = null;
+
     private static final Log log = 
LogFactory.getLog(TribesClusterManager.class);
 
-    public TribesClusterManager () {
-               contextManager = new TribesContextManager ();
-               configurationManager = new TribesConfigurationManager ();
-               parameters = new HashMap ();
+    public TribesClusterManager() {
+        parameters = new HashMap();
+    }
+
+    public ContextManager getContextManager() {
+        return contextManager;
     }
 
-       public ContextManager getContextManager() {
-               return contextManager;
-       }
+    public ConfigurationManager getConfigurationManager() {
+        return configurationManager;
+    }
 
-       public ConfigurationManager getConfigurationManager() {
-               return configurationManager;
-       }
+    public void init() throws ClusteringFault {
+        if (log.isDebugEnabled()) {
+            log.debug("Enter: TribesClusterManager::init");
+        }
 
-       public void init() throws ClusteringFault {
-               
-       if (log.isDebugEnabled())
-                       log.debug("Enter: TribesClusterManager::init");
-       
-               ChannelSender sender = new ChannelSender ();
+        ChannelSender sender = new ChannelSender();
 
-        ChannelListener listener = new ChannelListener (configurationManager, 
contextManager);
+        ChannelListener listener = new ChannelListener(configurationManager, 
contextManager);
 
-               channelInfo = new TransientTribesChannelInfo();
-               memberInfo = new TransientTribesMemberInfo();
+        channelInfo = new TransientTribesChannelInfo();
+        memberInfo = new TransientTribesMemberInfo();
 
-               contextManager.setSender(sender);
+        contextManager.setSender(sender);
         configurationManager.setSender(sender);
 
         try {
-                       ManagedChannel channel = new GroupChannel();
-                       this.channel = channel;
-                       channel.addChannelListener (listener);
-                       channel.addChannelListener(channelInfo);
-                       channel.addMembershipListener(memberInfo);
+            ContextUpdater updater = new ContextUpdater();
+            contextManager.setUpdater(updater);
+
+            ManagedChannel channel = new GroupChannel();
+            this.channel = channel;
+
+            channel.addChannelListener(listener);
+            channel.addChannelListener(channelInfo);
+            channel.addMembershipListener(memberInfo);
             channel.addMembershipListener(new TribesMembershipListener());
             channel.start(Channel.DEFAULT);
-                       sender.setChannel(channel);
-                       contextManager.setSender(sender);
-                       configurationManager.setSender(sender);
-
-                       Member[] members = channel.getMembers();
-                       TribesUtil.printMembers (members);
-
-                       updater = new ContextUpdater ();
-                       contextManager.setUpdater(updater);
-
-                       listener.setUpdater(updater);
-                       listener.setContextManager(contextManager);
-
-               } catch (ChannelException e) {
-                       
-               if (log.isDebugEnabled())
-                               log.debug("Exit: TribesClusterManager::init");
-               
-                       String message = "Error starting Tribes channel";
-                       throw new ClusteringFault (message, e);
-               }
-               
-       if (log.isDebugEnabled())
-                       log.debug("Exit: TribesClusterManager::init");
-       }
-
-//     private void registerTribesInfoService(ConfigurationContext 
configContext2) throws ClusteringFault {
-//             try {
-//                     AxisService service = AxisService.createService(
-//                                     
"org.apache.axis2.cluster.tribes.info.TribesInfoWebService", configContext
-//                                                     
.getAxisConfiguration(), RPCMessageReceiver.class);
-//
-//                     
configContext.getAxisConfiguration().addService(service);
-//             } catch (AxisFault e) {
-//                     String message = "Unable to create Tribes info web 
service";
-//                     throw new ClusteringFault (message, e);
-//             }
-//     }
-
-       public void setConfigurationManager(ConfigurationManager 
configurationManager) {
-               this.configurationManager = (TribesConfigurationManager) 
configurationManager;
-       }
-
-       public void setContextManager(ContextManager contextManager) {
-               this.contextManager = (TribesContextManager) contextManager;
-       }
-
-       public void addParameter(Parameter param) throws AxisFault {
-               parameters.put(param.getName(), param);
-       }
-
-       public void deserializeParameters(OMElement parameterElement) throws 
AxisFault {
-               throw new UnsupportedOperationException ();
-       }
-
-       public Parameter getParameter(String name) {
-               return (Parameter) parameters.get(name);
-       }
-
-       public ArrayList getParameters() {
-               ArrayList list = new ArrayList ();
-               for (Iterator it=parameters.keySet().iterator();it.hasNext();) {
-                       list.add(parameters.get(it.next()));
-               }
-               return list;
-       }
-
-       public boolean isParameterLocked(String parameterName) {
-
-               Parameter parameter = (Parameter) parameters.get(parameterName);
-               if (parameter!=null)
-                       return parameter.isLocked();
-
-               return false;
-       }
-
-       public void removeParameter(Parameter param) throws AxisFault {
-               parameters.remove(param.getName());
-       }
-
-       public void shutdown() throws ClusteringFault {
-               
-       if (log.isDebugEnabled())
-                       log.debug("Enter: TribesClusterManager::shutdown");
-       
-               if (channel!=null) {
-                       try {
-                               channel.stop(Channel.DEFAULT);
-                       } catch (ChannelException e) {
-                               
-                       if (log.isDebugEnabled())
-                                       log.debug("Exit: 
TribesClusterManager::shutdown");
-                       
-                               throw new ClusteringFault (e);
-                       }
-               }
-               
-       if (log.isDebugEnabled())
-                       log.debug("Exit: TribesClusterManager::shutdown");
-       }
+            sender.setChannel(channel);
+            contextManager.setSender(sender);
+            configurationManager.setSender(sender);
+
+            Member[] members = channel.getMembers();
+            TribesUtil.printMembers(members);
+
+            listener.setUpdater(updater);
+            listener.setContextManager(contextManager);
+
+        } catch (ChannelException e) {
+
+            if (log.isDebugEnabled()) {
+                log.debug("Exit: TribesClusterManager::init");
+            }
+
+            String message = "Error starting Tribes channel";
+            throw new ClusteringFault(message, e);
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("Exit: TribesClusterManager::init");
+        }
+    }
+
+    public void setConfigurationManager(ConfigurationManager 
configurationManager) {
+        this.configurationManager = (TribesConfigurationManager) 
configurationManager;
+    }
+
+    public void setContextManager(ContextManager contextManager) {
+        this.contextManager = (TribesContextManager) contextManager;
+    }
+
+    public void addParameter(Parameter param) throws AxisFault {
+        parameters.put(param.getName(), param);
+    }
+
+    public void deserializeParameters(OMElement parameterElement) throws 
AxisFault {
+        throw new UnsupportedOperationException();
+    }
+
+    public Parameter getParameter(String name) {
+        return (Parameter) parameters.get(name);
+    }
+
+    public ArrayList getParameters() {
+        ArrayList list = new ArrayList();
+        for (Iterator it = parameters.keySet().iterator(); it.hasNext();) {
+            list.add(parameters.get(it.next()));
+        }
+        return list;
+    }
+
+    public boolean isParameterLocked(String parameterName) {
+
+        Parameter parameter = (Parameter) parameters.get(parameterName);
+        if (parameter != null) {
+            return parameter.isLocked();
+        }
+
+        return false;
+    }
+
+    public void removeParameter(Parameter param) throws AxisFault {
+        parameters.remove(param.getName());
+    }
+
+    public void shutdown() throws ClusteringFault {
+
+        if (log.isDebugEnabled()) {
+            log.debug("Enter: TribesClusterManager::shutdown");
+        }
+
+        if (channel != null) {
+            try {
+                channel.stop(Channel.DEFAULT);
+            } catch (ChannelException e) {
+
+                if (log.isDebugEnabled()) {
+                    log.debug("Exit: TribesClusterManager::shutdown");
+                }
+
+                throw new ClusteringFault(e);
+            }
+        }
+
+        if (log.isDebugEnabled()) {
+            log.debug("Exit: TribesClusterManager::shutdown");
+        }
+    }
+
 
-       
 }

Modified: 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/TribesContextManager.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/TribesContextManager.java?view=diff&rev=538202&r1=538201&r2=538202
==============================================================================
--- 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/TribesContextManager.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/TribesContextManager.java
 Tue May 15 08:18:32 2007
@@ -16,6 +16,8 @@
 
 package org.apache.axis2.cluster.tribes.context;
 
+import org.apache.axiom.om.OMElement;
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.cluster.ClusteringFault;
 import org.apache.axis2.cluster.CommandType;
 import org.apache.axis2.cluster.context.ContextEvent;
@@ -31,9 +33,6 @@
 import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.AxisServiceGroup;
 import org.apache.axis2.description.Parameter;
-import org.apache.axis2.AxisFault;
-import org.apache.axiom.om.OMElement;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -47,32 +46,41 @@
     private ContextUpdater updater;
 
     private Map orphanedServiceCtxs = new HashMap();
-    private List addedServiceGrpCtxs = new ArrayList();
-    private List addedServiceCtxs = new ArrayList();
-    private List listeners = null;
+    private List listeners = new ArrayList();
     private Map parameters = new HashMap();
 
     private ChannelSender sender;
+    private ContextReplicationProcessor processor = new 
ContextReplicationProcessor();
 
     public void setSender(ChannelSender sender) {
         this.sender = sender;
     }
 
-    public TribesContextManager(ConfigurationContext configurationContext, 
ContextUpdater updater) {
-        this();
-        this.configContext = configurationContext;
-        this.updater = updater;
+    public TribesContextManager() {
     }
 
-    public TribesContextManager() {
-        listeners = new ArrayList();
+    public void addContext(final AbstractContext context) throws 
ClusteringFault {
+        processor.process(new AddContextCommand(), context);
+    }
+
+    public void removeContext(AbstractContext context) throws ClusteringFault {
+        processor.process(new RemoveContextCommand(), context);
+    }
+
+    public void updateContext(AbstractContext context) throws ClusteringFault {
+        processor.process(new UpdateContextCommand(), context);
+    }
+
+    public boolean isContextClusterable(AbstractContext context) {
+        return (context instanceof ConfigurationContext) ||
+               (context instanceof ServiceContext) ||
+               (context instanceof ServiceGroupContext);
     }
 
     public void notifyListeners(ContextEvent event, int eventType) {
 
         for (Iterator it = listeners.iterator(); it.hasNext();) {
             ContextManagerListener listener = (ContextManagerListener) 
it.next();
-
             if (eventType == ContextListenerEventType.ADD_CONTEXT) {
                 listener.contextAdded(event);
             } else if (eventType == ContextListenerEventType.REMOVE_CONTEXT) {
@@ -81,201 +89,16 @@
                 listener.contextUpdated(event);
             }
         }
-
-    }
-
-    public void addContext(AbstractContext context) throws ClusteringFault {
-       
-       if (log.isDebugEnabled())
-                       log.debug("Enter: TribesContextManager::addContext");
-       
-        ContextCommandMessage comMsg;
-
-        String contextId = getContextID(context);
-        String parentContextId = getContextID(context.getParent());
-
-        // The ServiceContex does not define a contextId
-        // therefore the service name is used
-        if (context instanceof ServiceContext) {
-
-            if (addedServiceCtxs.contains(parentContextId + contextId)) {
-               
-               if (log.isDebugEnabled())
-                               log.debug("Exit: 
TribesContextManager::addContext");
-               
-                return; // this is a duplicate replication request
-            }
-
-            if (updater.getServiceGroupProps(parentContextId) != null) {
-                updater.addServiceContext(parentContextId, contextId);
-                comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_CONTEXT,
-                                                   parentContextId,
-                                                   contextId,
-                                                   contextId,
-                                                   
ContextType.SERVICE_CONTEXT);
-                send(comMsg);
-            } else {
-                // put in the queue until the service group context is created
-                // with an id
-                comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_CONTEXT,
-                                                   parentContextId,
-                                                   contextId,
-                                                   contextId,
-                                                   
ContextType.SERVICE_CONTEXT);
-
-                AxisServiceGroup serviceGroupDesc = ((ServiceContext) context)
-                        .getServiceGroupContext().getDescription();
-                List list = (List) orphanedServiceCtxs.get(serviceGroupDesc
-                        .getServiceGroupName());
-                if (list == null) {
-                    list = new ArrayList();
-                    
orphanedServiceCtxs.put(serviceGroupDesc.getServiceGroupName(), list);
-                }
-                list.add(comMsg);
-            }
-        } else if (context instanceof ServiceGroupContext) {
-
-            if (addedServiceGrpCtxs.contains(contextId)) {
-               
-               if (log.isDebugEnabled())
-                               log.debug("Exit: 
TribesContextManager::addContext");
-               
-                return; // this is a duplicate replication request
-            }
-
-            ServiceGroupContext srvGrpCtx = (ServiceGroupContext) context;
-
-            // The new serialization code sets the service group name as it's 
id initially
-            if 
(srvGrpCtx.getId().equals(srvGrpCtx.getDescription().getServiceGroupName())) {
-               
-               if (log.isDebugEnabled())
-                               log.debug("Exit: 
TribesContextManager::addContext");
-               
-                return;
-            }
-
-            updater.addServiceGroupContext(contextId);
-
-            comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_GROUP_CONTEXT,
-                                               "",
-                                               contextId,
-                                               
srvGrpCtx.getDescription().getServiceGroupName(),
-                                               
ContextType.SERVICE_GROUP_CONTEXT);
-
-            send(comMsg);
-
-            // now iterate through the list of service contexts and replicate 
them
-            List list = (List) 
orphanedServiceCtxs.get(srvGrpCtx.getDescription()
-                    .getServiceGroupName());
-
-            if (list != null) {
-                for (Iterator it = list.iterator(); it.hasNext();) {
-
-                    ContextCommandMessage command = (ContextCommandMessage) 
it.next();
-                    updater.addServiceContext(contextId, 
command.getContextId());
-                    command.setParentId(contextId);
-
-                    send(command);
-
-                }
-
-                
orphanedServiceCtxs.remove(srvGrpCtx.getDescription().getServiceGroupName());
-            }
-        }
-        
-       if (log.isDebugEnabled())
-                       log.debug("Exit: TribesContextManager::addContext");
-    }
-
-    public void removeContext(AbstractContext context) throws ClusteringFault {
-       
-       if (log.isDebugEnabled())
-                       log.debug("Enter: TribesContextManager::removeContext");
-       
-        ContextCommandMessage comMsg = null;
-
-        String contextId = getContextID(context);
-        String parentContextId = getContextID(context.getParent());
-
-        if (context instanceof ServiceContext) {
-            updater.removeServiceContext(parentContextId, contextId);
-            comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_GROUP_CONTEXT,
-                                               parentContextId, contextId, 
contextId, ContextType.SERVICE_CONTEXT);
-        } else if (context instanceof ServiceGroupContext) {
-            updater.removeServiceGroupContext(contextId);
-            comMsg = new 
ContextCommandMessage(CommandType.REMOVE_SERVICE_GROUP_CONTEXT, "",
-                                               contextId, 
((ServiceGroupContext) context).getDescription()
-                    .getServiceGroupName(), ContextType.SERVICE_CONTEXT);
-        }
-
-        send(comMsg);
-        
-       if (log.isDebugEnabled())
-                       log.debug("Exit: TribesContextManager::removeContext");
-    }
-
-    public void updateState(AbstractContext context) throws ClusteringFault {
-
-       if (log.isDebugEnabled())
-                       log.debug("Enter: TribesContextManager::updateState");
-       
-        String contextId = getContextID(context);
-        String parentContextId = getContextID(context.getParent());
-
-        Map props = context.getProperties();
-
-        List mapEntryMsgs = null;
-
-        int contextType = 0;
-        if (context instanceof ServiceContext) {
-            contextType = ContextType.SERVICE_CONTEXT;
-            mapEntryMsgs = updater
-                    .updateStateOnServiceContext(parentContextId, contextId, 
props);
-        } else if (context instanceof ServiceGroupContext) {
-            contextType = ContextType.SERVICE_GROUP_CONTEXT;
-            mapEntryMsgs = updater.updateStateOnServiceGroupContext(contextId, 
props);
-        }
-
-        if (mapEntryMsgs != null) {
-            for (Iterator it = mapEntryMsgs.iterator(); it.hasNext();) {
-                ContextUpdateEntryCommandMessage msg = 
(ContextUpdateEntryCommandMessage) it.next();
-                send(msg);
-            }
-        }
-
-        ContextCommandMessage comMsg = new 
ContextCommandMessage(CommandType.UPDATE_STATE,
-                                                                 
parentContextId,
-                                                                 contextId,
-                                                                 contextId,
-                                                                 contextType);
-
-        send(comMsg);
-        
-       if (log.isDebugEnabled())
-                       log.debug("Exit: TribesContextManager::updateState");
-    }
-
-    public boolean isContextClusterable(AbstractContext context) {
-
-        if ((context instanceof ConfigurationContext) || (context instanceof 
ServiceContext)
-            || (context instanceof ServiceGroupContext)) {
-            return true;
-        }
-
-        return false;
     }
 
     private String getContextID(AbstractContext context) {
-
         String id = null;
-
         if (context instanceof ServiceContext) {
             AxisService axisService = ((ServiceContext) 
context).getAxisService();
             return axisService.getName();
         } else if (context instanceof ServiceGroupContext) {
             return ((ServiceGroupContext) context).getId();
         }
-
         return id;
     }
 
@@ -291,7 +114,6 @@
         if (configContext != null) {
             listener.setConfigurationContext(configContext);
         }
-
         listeners.add(listener);
     }
 
@@ -347,5 +169,219 @@
 
     public void deserializeParameters(OMElement parameterElement) throws 
AxisFault {
         throw new UnsupportedOperationException();
+    }
+
+    private interface ContextCommand {
+        void execute(AbstractContext context) throws ClusteringFault;
+    }
+
+    private class AddContextCommand implements ContextCommand {
+
+        public void execute(AbstractContext context) throws ClusteringFault {
+            if (log.isDebugEnabled()) {
+                log.debug("Enter: TribesContextManager::addContext");
+            }
+            ContextCommandMessage comMsg;
+
+            String contextId = getContextID(context);
+            String parentContextId = getContextID(context.getParent());
+
+            // The ServiceContex does not define a contextId
+            // therefore the service name is used
+            if (context instanceof ServiceContext) {
+
+                if (log.isDebugEnabled()) {
+                    log.debug("Exit: TribesContextManager::addContext");
+                }
+
+                if (updater.getServiceGroupProps(parentContextId) != null) {
+                    updater.addServiceContext(parentContextId, contextId);
+                    comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_CONTEXT,
+                                                       parentContextId,
+                                                       contextId,
+                                                       contextId,
+                                                       
ContextType.SERVICE_CONTEXT);
+                    send(comMsg);
+                } else {
+                    // put in the queue until the service group context is 
created
+                    // with an id
+                    comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_CONTEXT,
+                                                       parentContextId,
+                                                       contextId,
+                                                       contextId,
+                                                       
ContextType.SERVICE_CONTEXT);
+
+                    AxisServiceGroup serviceGroupDesc = ((ServiceContext) 
context)
+                            .getServiceGroupContext().getDescription();
+                    List list = (List) orphanedServiceCtxs.get(serviceGroupDesc
+                            .getServiceGroupName());
+                    if (list == null) {
+                        list = new ArrayList();
+                        
orphanedServiceCtxs.put(serviceGroupDesc.getServiceGroupName(), list);
+                    }
+                    list.add(comMsg);
+                }
+            } else if (context instanceof ServiceGroupContext) {
+
+                if (log.isDebugEnabled()) {
+                    log.debug("Exit: TribesContextManager::addContext");
+                }
+
+                ServiceGroupContext srvGrpCtx = (ServiceGroupContext) context;
+
+                // The new serialization code sets the service group name as 
it's id initially
+                if 
(srvGrpCtx.getId().equals(srvGrpCtx.getDescription().getServiceGroupName())) {
+
+                    if (log.isDebugEnabled()) {
+                        log.debug("Exit: TribesContextManager::addContext");
+                    }
+
+                    return;
+                }
+
+                updater.addServiceGroupContext(contextId);
+
+                comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_GROUP_CONTEXT,
+                                                   "",
+                                                   contextId,
+                                                   
srvGrpCtx.getDescription().getServiceGroupName(),
+                                                   
ContextType.SERVICE_GROUP_CONTEXT);
+
+                send(comMsg);
+
+                // now iterate through the list of service contexts and 
replicate them
+                List list = (List) 
orphanedServiceCtxs.get(srvGrpCtx.getDescription()
+                        .getServiceGroupName());
+
+                if (list != null) {
+                    for (Iterator it = list.iterator(); it.hasNext();) {
+
+                        ContextCommandMessage command = 
(ContextCommandMessage) it.next();
+                        updater.addServiceContext(contextId, 
command.getContextId());
+                        command.setParentId(contextId);
+
+                        send(command);
+
+                    }
+                    
orphanedServiceCtxs.remove(srvGrpCtx.getDescription().getServiceGroupName());
+                }
+            }
+
+            if (log.isDebugEnabled()) {
+                log.debug("Exit: TribesContextManager::addContext");
+            }
+        }
+    }
+
+    private class RemoveContextCommand implements ContextCommand {
+
+        public void execute(AbstractContext context) throws ClusteringFault {
+            if (log.isDebugEnabled()) {
+                log.debug("Enter: TribesContextManager::removeContext");
+            }
+
+            ContextCommandMessage comMsg = null;
+
+            String contextId = getContextID(context);
+            String parentContextId = getContextID(context.getParent());
+
+            if (context instanceof ServiceContext) {
+                updater.removeServiceContext(parentContextId, contextId);
+                comMsg = new 
ContextCommandMessage(CommandType.CREATE_SERVICE_GROUP_CONTEXT,
+                                                   parentContextId,
+                                                   contextId,
+                                                   contextId,
+                                                   
ContextType.SERVICE_CONTEXT);
+            } else if (context instanceof ServiceGroupContext) {
+                updater.removeServiceGroupContext(contextId);
+                comMsg = new 
ContextCommandMessage(CommandType.REMOVE_SERVICE_GROUP_CONTEXT,
+                                                   "",
+                                                   contextId,
+                                                   ((ServiceGroupContext) 
context).getDescription().getServiceGroupName(),
+                                                   
ContextType.SERVICE_CONTEXT);
+            }
+
+            send(comMsg);
+
+            if (log.isDebugEnabled()) {
+                log.debug("Exit: TribesContextManager::removeContext");
+            }
+        }
+    }
+
+    private class UpdateContextCommand implements ContextCommand {
+
+        public void execute(AbstractContext context) throws ClusteringFault {
+
+            if (log.isDebugEnabled()) {
+                log.debug("Enter: TribesContextManager::updateState");
+            }
+
+            String contextId = getContextID(context);
+            String parentContextId = getContextID(context.getParent());
+
+            Map props = context.getProperties();
+
+            List mapEntryMsgs = null;
+
+            int contextType = 0;
+            if (context instanceof ServiceContext) {
+                contextType = ContextType.SERVICE_CONTEXT;
+                mapEntryMsgs = updater
+                        .updateStateOnServiceContext(parentContextId, 
contextId, props);
+            } else if (context instanceof ServiceGroupContext) {
+                contextType = ContextType.SERVICE_GROUP_CONTEXT;
+                mapEntryMsgs = 
updater.updateStateOnServiceGroupContext(contextId, props);
+            }
+
+            if (mapEntryMsgs != null) {
+                for (Iterator it = mapEntryMsgs.iterator(); it.hasNext();) {
+                    ContextUpdateEntryCommandMessage msg = 
(ContextUpdateEntryCommandMessage) it.next();
+                    send(msg);
+                }
+            }
+
+            ContextCommandMessage comMsg = new 
ContextCommandMessage(CommandType.UPDATE_STATE,
+                                                                     
parentContextId,
+                                                                     contextId,
+                                                                     contextId,
+                                                                     
contextType);
+
+            send(comMsg);
+
+            if (log.isDebugEnabled()) {
+                log.debug("Exit: TribesContextManager::updateState");
+            }
+        }
+    }
+
+    private class ContextReplicationProcessor {
+        public void process(final ContextCommand cmd,
+                            final AbstractContext context) throws 
ClusteringFault {
+
+            // If the updater is NULL, it means the TribesClusterManager is 
still being initailized
+            // So we need to busy wait.
+            if (updater == null) {
+                Thread processorThread = new Thread("ProcessorThread") {
+                    public void run() {
+                        while (updater == null) {
+                            try {
+                                Thread.sleep(1000);
+                            } catch (InterruptedException e) {
+                                e.printStackTrace();
+                            }
+                        }
+                        try {
+                            cmd.execute(context);
+                        } catch (ClusteringFault clusteringFault) {
+                            throw new RuntimeException(clusteringFault);
+                        }
+                    }
+                };
+                processorThread.start();
+            } else {
+                cmd.execute(context);
+            }
+        }
     }
 }

Modified: 
webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/UpdateStateTestCase.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/UpdateStateTestCase.java?view=diff&rev=538202&r1=538201&r2=538202
==============================================================================
--- 
webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/UpdateStateTestCase.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/clustering/test/org/apache/axis2/clustering/UpdateStateTestCase.java
 Tue May 15 08:18:32 2007
@@ -70,9 +70,9 @@
                
clusterManager1.getContextManager().addContext(serviceGroupContext1);
                clusterManager1.getContextManager().addContext(serviceContext1);
 
-               
clusterManager1.getContextManager().updateState(configurationContext1);
-               
clusterManager1.getContextManager().updateState(serviceGroupContext1);
-               
clusterManager1.getContextManager().updateState(serviceContext1);
+               
clusterManager1.getContextManager().updateContext(configurationContext1);
+               
clusterManager1.getContextManager().updateContext(serviceGroupContext1);
+               
clusterManager1.getContextManager().updateContext(serviceContext1);
 
                Thread.sleep(1000);
        }
@@ -121,8 +121,8 @@
                serviceGroupContext1.getProperties().remove(key2);
                serviceContext1.getProperties().remove(key3);
 
-               
clusterManager1.getContextManager().updateState(serviceContext1);
-               
clusterManager1.getContextManager().updateState(serviceGroupContext1);
+               
clusterManager1.getContextManager().updateContext(serviceContext1);
+               
clusterManager1.getContextManager().updateContext(serviceGroupContext1);
 
                Thread.sleep(1000);
 
@@ -153,8 +153,8 @@
                serviceGroupContext1.setProperty(key2, val3);
                serviceContext1.setProperty(key3, val2);
 
-               
clusterManager1.getContextManager().updateState(serviceContext1);
-               
clusterManager1.getContextManager().updateState(serviceGroupContext1);
+               
clusterManager1.getContextManager().updateContext(serviceContext1);
+               
clusterManager1.getContextManager().updateContext(serviceGroupContext1);
 
                Thread.sleep(1000);
 

Modified: 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManager.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManager.java?view=diff&rev=538202&r1=538201&r2=538202
==============================================================================
--- 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManager.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManager.java
 Tue May 15 08:18:32 2007
@@ -26,7 +26,7 @@
 
     public void removeContext(AbstractContext context) throws ClusteringFault;
 
-    public void updateState(AbstractContext context) throws ClusteringFault;
+    public void updateContext(AbstractContext context) throws ClusteringFault;
 
     public boolean isContextClusterable(AbstractContext context) throws 
ClusteringFault;
 

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=538202&r1=538201&r2=538202
==============================================================================
--- 
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
 Tue May 15 08:18:32 2007
@@ -185,7 +185,7 @@
         if (clusterManager != null) {
                ContextManager contextManager = 
clusterManager.getContextManager();
                if (contextManager!=null && contextManager.isContextClusterable 
(this))
-                       contextManager.updateState(this);
+                       contextManager.updateContext(this);
         }
 
         //Other logic needed for flushing the contexts



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to