You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by az...@apache.org on 2007/05/19 11:04:23 UTC

svn commit: r539716 [2/2] - in /webservices/axis2/trunk/java/modules: clustering/src/org/apache/axis2/cluster/handlers/ clustering/src/org/apache/axis2/cluster/listeners/ clustering/src/org/apache/axis2/cluster/tribes/ clustering/src/org/apache/axis2/c...

Modified: webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/info/TransientTribesChannelInfo.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/info/TransientTribesChannelInfo.java?view=diff&rev=539716&r1=539715&r2=539716
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/info/TransientTribesChannelInfo.java (original)
+++ webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/info/TransientTribesChannelInfo.java Sat May 19 02:04:21 2007
@@ -19,7 +19,7 @@
 import java.io.Serializable;
 
 import org.apache.axis2.cluster.CommandType;
-import org.apache.axis2.cluster.tribes.context.ContextCommandMessage;
+import org.apache.axis2.cluster.context.ContextCommandMessage;
 import org.apache.catalina.tribes.ChannelListener;
 import org.apache.catalina.tribes.Member;
 

Copied: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/CommandMessage.java (from r538503, webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/CommandMessage.java)
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/CommandMessage.java?view=diff&rev=539716&p1=webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/CommandMessage.java&r1=538503&p2=webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/CommandMessage.java&r2=539716
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/CommandMessage.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/CommandMessage.java Sat May 19 02:04:21 2007
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package org.apache.axis2.cluster.tribes;
+package org.apache.axis2.cluster;
 
 import java.io.Serializable;
 
-public class CommandMessage implements Serializable {
+public abstract class CommandMessage implements Serializable {
 
 	protected int commandType;
 
@@ -29,9 +29,11 @@
 	public void setCommandType(int commandType) {
 		this.commandType = commandType;
 	}
-	
-	public CommandMessage (int commandType) {
+
+    protected CommandMessage() {
+    }
+
+    public CommandMessage (int commandType) {
 		this.commandType = commandType;
 	}
-	
 }

Copied: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextCommandMessage.java (from r538503, webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/ContextCommandMessage.java)
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextCommandMessage.java?view=diff&rev=539716&p1=webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/ContextCommandMessage.java&r1=538503&p2=webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextCommandMessage.java&r2=539716
==============================================================================
--- webservices/axis2/trunk/java/modules/clustering/src/org/apache/axis2/cluster/tribes/context/ContextCommandMessage.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextCommandMessage.java Sat May 19 02:04:21 2007
@@ -14,67 +14,27 @@
  * limitations under the License.
  */
 
-package org.apache.axis2.cluster.tribes.context;
+package org.apache.axis2.cluster.context;
 
-import org.apache.axis2.cluster.tribes.CommandMessage;
+import org.apache.axis2.cluster.ClusteringFault;
+import org.apache.axis2.cluster.CommandMessage;
+import org.apache.axis2.context.ConfigurationContext;
 
-public class ContextCommandMessage extends CommandMessage {
+public abstract class ContextCommandMessage extends CommandMessage {
 
-	private String parentId;
-	private String contextId;
-	private String axisDescriptionName;
-	private int contextType;
-
-	public ContextCommandMessage(int commandType, String parentId, String contextId,
-			String axisDescriptionName, int contextType) {
-		super (commandType);
-		this.parentId = parentId;
-		this.contextId = contextId;
-		this.axisDescriptionName = axisDescriptionName;
-		this.contextType = contextType;
-	}
-
-	public String getContextId() {
-		return contextId;
-	}
-
-	public void setContextId(String contextId) {
-		this.contextId = contextId;
-	}
-
-	public String getParentId() {
-		return parentId;
-	}
-
-	public void setParentId(String parentId) {
-		this.parentId = parentId;
-	}
-
-	public String toString() {
-		StringBuilder builder = new StringBuilder();
-		builder.append("TribesCommandMessage [");
-		builder.append(getCommandType() + ",");
-		builder.append(parentId + ",");
-		builder.append(contextId + ",");
-		builder.append(axisDescriptionName + "]");
-
-		return builder.toString();
-	}
-
-	public String getAxisDescriptionName() {
-		return axisDescriptionName;
-	}
-
-	public void setAxisDescriptionName(String axisDescriptionName) {
-		this.axisDescriptionName = axisDescriptionName;
-	}
-
-	public int getContextType() {
-		return contextType;
-	}
-
-	public void setContextType(int contextType) {
-		this.contextType = contextType;
-	}
+    public static final int CREATE_SERVICE_GROUP_CONTEXT_MSG = 0;
+    public static final int CREATE_SERVICE_CONTEXT_MSG = 1;
+    public static final int CREATE_SESSION_CONTEXT_MSG = 2;
+    public static final int UPDATE_SERVICE_GROUP_CONTEXT_MSG = 3;
+    public static final int UPDATE_SERVICE_CONTEXT_MSG = 4;
+    public static final int UPDATE_CONFIGURATION_CONTEXT_MSG = 5;
+    public static final int DELETE_SERVICE_GROUP_CONTEXT_MSG = 6;
+    public static final int DELETE_SERVICE_CONTEXT_MSG = 7;
 
+    protected ContextCommandMessage() {
+    }
+
+    public abstract void execute(ConfigurationContext configContext) throws ClusteringFault;
+
+    public abstract int getMessageType();
 }

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManagerListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManagerListener.java?view=diff&rev=539716&r1=539715&r2=539716
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManagerListener.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/cluster/context/ContextManagerListener.java Sat May 19 02:04:21 2007
@@ -16,11 +16,16 @@
 
 package org.apache.axis2.cluster.context;
 
+import org.apache.axis2.cluster.ClusteringFault;
 import org.apache.axis2.context.ConfigurationContext;
 
 public interface ContextManagerListener {
-    public void contextAdded(ContextEvent event);
-    public void contextRemoved(ContextEvent event);
-    public void contextUpdated(ContextEvent event);
-    public void setConfigurationContext (ConfigurationContext configurationContext);
+    
+    public void contextAdded(ContextCommandMessage message) throws ClusteringFault;
+
+    public void contextRemoved(ContextCommandMessage message) throws ClusteringFault;
+
+    public void contextUpdated(ContextCommandMessage message) throws ClusteringFault;
+
+    public void setConfigurationContext(ConfigurationContext configurationContext);
 }

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=539716&r1=539715&r2=539716
==============================================================================
--- 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 Sat May 19 02:04:21 2007
@@ -23,6 +23,7 @@
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.axis2.i18n.Messages;
 
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -41,6 +42,7 @@
 
     protected transient AbstractContext parent;
     protected transient Map properties;
+    private transient Map propertyDifferences = new HashMap();
 
     protected AbstractContext(AbstractContext parent) {
         this.parent = parent;
@@ -50,12 +52,16 @@
     }
 
     /**
-     * @return Returns AbstractContext.
+     * @return Returns the parent of this context.
      */
     public AbstractContext getParent() {
         return parent;
     }
 
+    /**
+     * @return The properties
+     * @deprecated
+     */
     public Map getProperties() {
         if (this.properties == null) {
             this.properties = new HashMap();
@@ -64,24 +70,108 @@
     }
 
     /**
+     * An iterator over a collection of <code>String</code> objects, which are the
+     * keys in the properties object.
+     *
+     * @return Iterator over a collection of keys
+     */
+    public Iterator getPropertyNames() {
+        return properties.keySet().iterator();
+    }
+
+    /**
      * Retrieves an object given a key.
      *
      * @param key - if not found, will return null
      * @return Returns the property.
      */
     public Object getProperty(String key) {
-        Object obj;
-
-        obj = properties == null ? null : properties.get(key);
-
+        Object obj = properties == null ? null : properties.get(key);
         if ((obj == null) && (parent != null)) {
             obj = parent.getProperty(key);
-        }
+        } else {
 
+            // Assume that a property is which is read may be updated.
+            // i.e. The object pointed to by 'value' may be modified after it is read
+            propertyDifferences.put(key, new PropertyDifference(key, false));
+        }
         return obj;
     }
 
     /**
+     * Store a property in this context
+     *
+     * @param key
+     * @param value
+     */
+    public void setProperty(String key, Object value) {
+        if (this.properties == null) {
+            this.properties = new HashMap();
+        }
+        properties.put(key, value);
+        propertyDifferences.put(key, new PropertyDifference(key, false));
+    }
+
+    /**
+     * Store a property in this context.
+     * But these properties should not be replicated when Axis2 is clustered.
+     *
+     * @param key
+     * @param value
+     */
+    public void setNonReplicableProperty(String key, Object value) {
+        if (this.properties == null) {
+            this.properties = new HashMap();
+        }
+        properties.put(key, value);
+    }
+
+    /**
+     * Remove a property. Only properties at this level will be removed.
+     * Properties of the parents cannot be removed using this method.
+     *
+     * @param key
+     */
+    public void removeProperty(String key) {
+        if (properties != null) {
+            properties.remove(key);
+        }
+        propertyDifferences.put(key, new PropertyDifference(key, true));
+    }
+
+    /**
+     * Remove a property. Only properties at this level will be removed.
+     * Properties of the parents cannot be removed using this method.
+     * The removal of the property will not be replicated when Axis2 is clustered.
+     *
+     * @param key
+     */
+    public void removePropertyNonReplicable(String key) {
+        if (properties != null) {
+            properties.remove(key);
+        }
+    }
+
+    /**
+     * Get the property differences since the last transmission by the clustering
+     * mechanism
+     *
+     * @return The property differences
+     */
+    public Map getPropertyDifferences() {
+        return Collections.unmodifiableMap(propertyDifferences);
+    }
+
+    /**
+     * Once the clustering mechanism transmits the property differences,
+     * it should call this method to avoid retransmitting stuff that has already
+     * been sent.
+     */
+    public void clearPropertyDifferences() {
+        propertyDifferences.clear();
+    }
+
+    /**
      * @param context
      */
     public void setParent(AbstractContext context) {
@@ -118,35 +208,17 @@
      */
     public void mergeProperties(Map props) {
         if (props != null) {
-            Iterator iterator = props.keySet().iterator();
-
-            while (iterator.hasNext()) {
+            if (this.properties == null) {
+                this.properties = new HashMap();
+            }
+            for (Iterator iterator = props.keySet().iterator();
+                 iterator.hasNext();) {
                 Object key = iterator.next();
-
-                if (this.properties == null) {
-                    this.properties = new HashMap();
-                }
-
                 this.properties.put(key, props.get(key));
             }
-
         }
     }
 
-
-    /**
-     * Store a property for message context
-     *
-     * @param key
-     * @param value
-     */
-    public void setProperty(String key, Object value) {
-        if (this.properties == null) {
-            this.properties = new HashMap();
-        }
-        properties.put(key, value);
-    }
-
     /**
      * ServiceContext and ServiceGroupContext are not getting automatically garbage collected. And there
      * is no specific way for some one to go and make it garbage collectible.
@@ -183,9 +255,10 @@
 
         //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);
+            ContextManager contextManager = clusterManager.getContextManager();
+            if (contextManager != null && contextManager.isContextClusterable(this)) {
+                contextManager.updateContext(this);
+            }
         }
 
         //Other logic needed for flushing the contexts

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java?view=diff&rev=539716&r1=539715&r2=539716
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ConfigurationContext.java Sat May 19 02:04:21 2007
@@ -237,8 +237,7 @@
         }
     }
 
-    public void registerServiceGroupContextintoSoapSessionTable(
-            ServiceGroupContext serviceGroupContext) {
+    public void registerServiceGroupContextintoSoapSessionTable(ServiceGroupContext serviceGroupContext) {
         String id = serviceGroupContext.getId();
         serviceGroupContextMap.put(id, serviceGroupContext);
         serviceGroupContext.touch();

Added: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/PropertyDifference.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/PropertyDifference.java?view=auto&rev=539716
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/PropertyDifference.java (added)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/PropertyDifference.java Sat May 19 02:04:21 2007
@@ -0,0 +1,60 @@
+/*                                                                             
+ * Copyright 2004,2005 The Apache Software Foundation.                         
+ *                                                                             
+ * Licensed under the Apache License, Version 2.0 (the "License");             
+ * you may not use this file except in compliance with the License.            
+ * You may obtain a copy of the License at                                     
+ *                                                                             
+ *      http://www.apache.org/licenses/LICENSE-2.0                             
+ *                                                                             
+ * Unless required by applicable law or agreed to in writing, software         
+ * distributed under the License is distributed on an "AS IS" BASIS,           
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.    
+ * See the License for the specific language governing permissions and         
+ * limitations under the License.                                              
+ */
+package org.apache.axis2.context;
+
+import java.io.Serializable;
+
+/**
+ * This class holds the difference between two properties which are stored in the
+ * AbstractContext
+ */
+public class PropertyDifference implements Serializable {
+
+    private String key;
+    private Object value;
+    private boolean isRemoved;
+
+    public PropertyDifference(String key, boolean isRemoved) {
+        this.key = key;
+        this.isRemoved = isRemoved;
+    }
+
+    public PropertyDifference(String key, Object value, boolean isRemoved) {
+        this.key = key;
+        this.value = value;
+        this.isRemoved = isRemoved;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    public boolean isRemoved() {
+        return isRemoved;
+    }
+
+    public void setRemoved(boolean removed) {
+        isRemoved = removed;
+    }
+}

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ServiceGroupContext.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ServiceGroupContext.java?view=diff&rev=539716&r1=539715&r2=539716
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ServiceGroupContext.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/context/ServiceGroupContext.java Sat May 19 02:04:21 2007
@@ -17,6 +17,7 @@
 
 package org.apache.axis2.context;
 
+import org.apache.axiom.om.util.UUIDGenerator;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.cluster.ClusterManager;
 import org.apache.axis2.cluster.context.ContextManager;
@@ -28,7 +29,6 @@
 import org.apache.axis2.util.ObjectStateUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.axiom.om.util.UUIDGenerator;
 
 import java.io.Externalizable;
 import java.io.IOException;
@@ -132,6 +132,18 @@
      * @throws AxisFault if something goes wrong
      */
     public ServiceContext getServiceContext(AxisService service) throws AxisFault {
+        return getServiceContext(service, true);
+    }
+
+    /**
+     * @param service
+     * @param replicate Indicates whether the newly created ServiceContext
+     *                  has to be replicated across the cluster
+     * @return
+     * @throws AxisFault
+     */
+    public ServiceContext getServiceContext(AxisService service,
+                                            boolean replicate) throws AxisFault {
         AxisService axisService = axisServiceGroup.getService(service.getName());
         if (axisService == null) {
             throw new AxisFault(Messages.getMessage("invalidserviceinagroup",
@@ -147,13 +159,16 @@
             getRootContext().contextCreated(serviceContext);
             serviceContextMap.put(service.getName(), serviceContext);
 
-            ClusterManager clusterManager = axisService.getAxisConfiguration().getClusterManager();
-            if (clusterManager != null) {
-            	ContextManager contextManager = clusterManager.getContextManager();
-            	if (contextManager!=null)
-            		contextManager.addContext(serviceContext);
+            if (replicate) {
+                ClusterManager clusterManager =
+                        axisService.getAxisConfiguration().getClusterManager();
+                if (clusterManager != null) {
+                    ContextManager contextManager = clusterManager.getContextManager();
+                    if (contextManager != null) {
+                        contextManager.addContext(serviceContext);
+                    }
+                }
             }
-
         }
         return serviceContext;
     }
@@ -366,7 +381,7 @@
         // trace point
         if (log.isTraceEnabled()) {
             log.trace(myClassName + ":readExternal():  BEGIN  bytes available in stream [" +
-                    in.available() + "]  ");
+                      in.available() + "]  ");
         }
 
         // serialization version ID
@@ -539,7 +554,7 @@
     private void checkActivateWarning(String methodname) {
         if (needsToBeReconciled) {
             log.warn(myClassName + ":" + methodname + "(): ****WARNING**** " + myClassName +
-                    ".activate(configurationContext) needs to be invoked.");
+                     ".activate(configurationContext) needs to be invoked.");
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org