[jboss-svn-commits] JBL Code SVN: r23551 - in labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta: src/org/jboss/internal/soa/esb/message/format/xml and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Oct 22 10:28:32 EDT 2008


Author: kevin.conner at jboss.com
Date: 2008-10-22 10:28:32 -0400 (Wed, 22 Oct 2008)
New Revision: 23551

Modified:
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/AttachmentImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/BodyImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/ContextImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/HeaderImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/PropertiesImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/AttachmentImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/BodyImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/ContextImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/HeaderImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/PropertiesImpl.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/message/Body.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/SerializedMessageUnitTest.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/XMLMessageUnitTest.java
Log:
Handle concurrent access to messages: JBESB-2113

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/AttachmentImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/AttachmentImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/AttachmentImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -42,7 +42,10 @@
 
 	public Object get(String name)
 	{
-                return SerializedValueImpl.unwrap(_table.get(name));
+		synchronized(_table)
+		{
+			return SerializedValueImpl.unwrap(_table.get(name));
+		}
 	}
 
 	public Object put(String name, Object value) 
@@ -50,30 +53,45 @@
 		if (value instanceof Serializable)
 		{
                     final Serializable wrapped = SerializedValueImpl.wrap((Serializable)value) ;
-                    final Serializable previous = _table.put(name, wrapped) ;
-                    return SerializedValueImpl.unwrap(previous);
+                    synchronized(_table)
+                    {
+                        final Serializable previous = _table.put(name, wrapped) ;
+                        return SerializedValueImpl.unwrap(previous);
+                    }
 		}
 		throw new IllegalArgumentException("value must be Serializable");
 	}
 
 	public Object remove(String name) 
 	{
-		return SerializedValueImpl.unwrap(_table.remove(name));
+		synchronized(_table)
+		{
+			return SerializedValueImpl.unwrap(_table.remove(name));
+		}
 	}
 
 	public String[] getNames() 
 	{
-		return _table.keySet().toArray(new String[_table.size()]);
+		synchronized(_table)
+		{
+			return _table.keySet().toArray(new String[_table.size()]);
+		}
 	}
 
 	public Object itemAt(int index) throws IndexOutOfBoundsException 
 	{
-		return SerializedValueImpl.unwrap(_list.get(index));
+		synchronized(_list)
+		{
+			return SerializedValueImpl.unwrap(_list.get(index));
+		}
 	}
 
 	public Object removeItemAt(int index) throws IndexOutOfBoundsException 
 	{
-		return SerializedValueImpl.unwrap(_list.remove(index));
+		synchronized(_list)
+		{
+			return SerializedValueImpl.unwrap(_list.remove(index));
+		}
 	}
 
 	public Object replaceItemAt(int index, Object value) throws IndexOutOfBoundsException 
@@ -81,8 +99,11 @@
 		if (value instanceof Serializable)
 		{
                     final Serializable wrapped = SerializedValueImpl.wrap((Serializable)value) ;
-                    final Serializable previous = _list.set(index, wrapped) ;
-                    return SerializedValueImpl.unwrap(previous);
+                    synchronized(_list)
+                    {
+                        final Serializable previous = _list.set(index, wrapped) ;
+                        return SerializedValueImpl.unwrap(previous);
+                    }
 		}
 		throw new IllegalArgumentException("value must be Serializable");
 	}
@@ -90,7 +111,10 @@
 	public void addItem(Object value) 
 	{
 		if (value instanceof Serializable)
-		    _list.add(SerializedValueImpl.wrap((Serializable)value)) ;
+			synchronized(_list)
+			{
+				_list.add(SerializedValueImpl.wrap((Serializable)value)) ;
+			}
 		else
 			throw new IllegalArgumentException("value must be Serializable");
 	}
@@ -98,27 +122,43 @@
 	public void addItemAt(int index, Object value) throws IndexOutOfBoundsException 
 	{
 		if (value instanceof Serializable)
-			_list.add(index, SerializedValueImpl.wrap((Serializable)value));
+			synchronized(_list)
+			{
+				_list.add(index, SerializedValueImpl.wrap((Serializable)value));
+			}
 		else
 			throw new IllegalArgumentException("value must be Serializable");
 	}
 
 	public int getNamedCount() 
 	{
-		return _table.size();
+		synchronized(_table)
+		{
+			return _table.size();
+		}
 	}
 	
 	public int getUnnamedCount() 
 	{
-		return _list.size();
+		synchronized(_list)
+		{
+			return _list.size();
+		}
 	}
 	
 	public String toString() 
 	{ 
-		return new StringBuilder()
-		.append("attachments: [ Named:").append(_table.toString())
-		.append(", Unnamed:").append(_list.toString())
-		.toString()+" ]";
+		final String tableVal ;
+		synchronized(_table)
+		{
+			tableVal = _table.toString() ;
+		}
+		final String listVal ;
+		synchronized(_list)
+		{
+			listVal = _list.toString() ;
+		}
+		return "attachments: [ Named:" + tableVal + ", Unnamed:" + listVal +" ]";
 	}
 	
 	private void readObject(final ObjectInputStream stream)

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/BodyImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/BodyImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/BodyImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -1,6 +1,8 @@
 package org.jboss.internal.soa.esb.message.format.serialized;
 
 import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.Map;
@@ -70,7 +72,7 @@
 		add(Body.DEFAULT_LOCATION, value);
 	}
 
-	public void add(String name, Object value)
+	public synchronized void add(String name, Object value)
 	{
 		AssertArgument.isNotNull(value, "value");
 		AssertArgument.isNotNull(name, "name");
@@ -88,14 +90,14 @@
 		return get(Body.DEFAULT_LOCATION);
 	}
 
-	public Object get(String name)
+	public synchronized Object get(String name)
 	{
 		AssertArgument.isNotNull(name, "name");
 
                 return SerializedValueImpl.unwrap(_objects.get(name));
 	}
 
-	public String[] getNames()
+	public synchronized String[] getNames()
 	{
 	    final Set<String> keys = _objects.keySet() ;
 	    return keys.toArray(new String[0]) ;
@@ -103,14 +105,17 @@
 
         public Enumeration<String> getEnumeratedNames()
         {
-            return _objects.keys() ;
+            return Collections.enumeration(Arrays.asList(getNames())) ;
         }
 
-	public Object remove(String name)
+	public synchronized Object remove(String name)
 	{
             return SerializedValueImpl.unwrap(_objects.remove(name));
 	}
 
+	/**
+	 * This method is not thread safe.
+	 */
 	public void replace(Body b)
 	{
 		if (b == null)
@@ -121,6 +126,9 @@
 		_objects = ((BodyImpl) b)._objects;
 	}
 
+	/**
+	 * This method is not thread safe.
+	 */
 	public void merge(Body b)
 	{
 		if (b == null)
@@ -143,18 +151,18 @@
 
 	public String toString()
 	{
-		String toReturn = "body: [ ";
+		StringBuilder toReturn = new StringBuilder("body: [ ");
 		byte[] content = getByteArray();
 		
 		if (content != null)
-			toReturn += "byte[]: " + Util.format(new String(content));
+			toReturn.append("byte[]: ").append(Util.format(new String(content))).append(", ");
 
-                if (content != null)
-                    toReturn += ", ";
+		synchronized(this)
+		{
+			toReturn.append("objects: ").append(_objects.toString());
+		}
 
-                toReturn += "objects: " + _objects.toString();
-
-		return toReturn + " ]";
+		return toReturn.append(" ]").toString();
 	}
 
 	// copy constructor.
@@ -166,7 +174,7 @@
 	
 	protected void initialiseMap(final Map<String, Serializable> payload)
 	{
-	    synchronized(_objects)
+	    synchronized(this)
 	    {
 	        _objects.clear() ;
 	        _objects.putAll(payload) ;

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/ContextImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/ContextImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/ContextImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -30,6 +30,9 @@
  * @author mark.little at jboss.com
  */
 
+/**
+ * This class is not thread safe and will be duplicated during InVM operations.
+ */
 public class ContextImpl implements Context, java.io.Serializable
 {
     /**

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/HeaderImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/HeaderImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/HeaderImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -32,6 +32,8 @@
 
 /**
  * The message header. Contains such things as routing information.
+ * 
+ * This class is not thread safe and will be duplicated during InVM operations.
  */
 
 public class HeaderImpl implements Header, Serializable

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/PropertiesImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/PropertiesImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/serialized/PropertiesImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -29,7 +29,7 @@
 {
 	private static final long serialVersionUID = 0x0;
 
-	public Object getProperty(String name)
+	public synchronized Object getProperty(String name)
 	{
 		return SerializedValueImpl.unwrap(_table.get(name));
 	}
@@ -45,26 +45,29 @@
 		if (value instanceof Serializable)
 		{
                     final Serializable wrapped = SerializedValueImpl.wrap((Serializable)value) ;
-                    final Serializable previous = _table.put(name, wrapped) ;
-                    return SerializedValueImpl.unwrap(previous);
+                    synchronized(this)
+                    {
+                        final Serializable previous = _table.put(name, wrapped) ;
+                        return SerializedValueImpl.unwrap(previous);
+                    }
 		}
 		else
 			throw new IllegalArgumentException("Value must be serializable");
 	}
 
-	public Object remove(String name)
+	public synchronized Object remove(String name)
 	{
 		return SerializedValueImpl.unwrap(_table.remove(name));
 	}
 	
-	public int size() {return _table.size(); } 
+	public synchronized int size() {return _table.size(); } 
 
-	public String[] getNames()
+	public synchronized String[] getNames()
 	{
 		return _table.keySet().toArray(new String[0]);
 	}
 
-	public String toString()
+	public synchronized String toString()
 	{
 		return "properties: [ "+_table.toString()+" ]";
 	}

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/AttachmentImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/AttachmentImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/AttachmentImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -23,7 +23,7 @@
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map.Entry;
 
 import javax.xml.namespace.QName;
@@ -66,70 +66,111 @@
         
 	public Object get(String name)
 	{
-		return unwrap(_table.get(name));
+		synchronized(_table)
+		{
+				return unwrap(_table.get(name));
+		}
 	}
 
 	public Object put(String name, Object value)
 	{
         assertValidAttachment(value);
-		return unwrap(_table.put(name, new SerializedValueImpl((Serializable) value)));
+		synchronized(_table)
+		{
+			return unwrap(_table.put(name, new SerializedValueImpl((Serializable) value)));
+		}
     }
 
     public Object remove(String name)
 	{
-		return unwrap(_table.remove(name));
+		synchronized(_table)
+		{
+			return unwrap(_table.remove(name));
+		}
 	}
 
 	public String[] getNames()
 	{
-		return _table.keySet().toArray(new String[0]);
+		synchronized(_table)
+		{
+			return _table.keySet().toArray(new String[0]);
+		}
 	}
 
 	public Object itemAt(int index) throws IndexOutOfBoundsException
 	{
-		return unwrap(_list.get(index));
+		synchronized(_list)
+		{
+			return unwrap(_list.get(index));
+		}
 	}
 
 	public Object removeItemAt(int index) throws IndexOutOfBoundsException
 	{
-		return unwrap(_list.remove(index));
+		synchronized(_list)
+		{
+			return unwrap(_list.remove(index));
+		}
 	}
 
 	public Object replaceItemAt(int index, Object value)
 			throws IndexOutOfBoundsException
 	{
         assertValidAttachment(value);
-        return unwrap(_list.set(index, new SerializedValueImpl((Serializable) value)));
+        synchronized(_list)
+        {
+            return unwrap(_list.set(index, new SerializedValueImpl((Serializable) value)));
+        }
 	}
 
 	public void addItem(Object value)
 	{
         assertValidAttachment(value);
-        _list.add(new SerializedValueImpl((Serializable) value));
+        synchronized(_list)
+        {
+            _list.add(new SerializedValueImpl((Serializable) value));
+        }
 	}
 
 	public void addItemAt(int index, Object value)
 			throws IndexOutOfBoundsException
 	{
         assertValidAttachment(value);
-        _list.add(index, new SerializedValueImpl((Serializable) value));
+        synchronized(_list)
+        {
+            _list.add(index, new SerializedValueImpl((Serializable) value));
+        }
 	}
 
 	public int getNamedCount()
 	{
-		return _table.size();
+		synchronized(_table)
+		{
+			return _table.size();
+		}
 	}
 
 	public int getUnnamedCount()
 	{
-		return _list.size();
+		synchronized(_list)
+		{
+			return _list.size();
+		}
 	}
 
 	public String toString()
 	{
-		return new StringBuilder().append("attachments: [ Named:").append(
-				_table.toString()).append(", Unnamed:").append(_list.toString())
-				.toString()+" ]";
+		final String tableVal ;
+		synchronized(_table)
+		{
+			tableVal = _table.toString() ;
+		}
+		final String listVal ;
+		synchronized (_list)
+		{
+			listVal = _list.toString() ;
+		}
+		return "attachments: [ Named:" + tableVal + ", Unnamed:" + listVal + " ]";
 	}
 
 	/**
@@ -141,19 +182,25 @@
 	protected void writeChildContent(XMLStreamWriter out)
 	        throws XMLStreamException
 	{
-            for (SerializedValueImpl value : _list)
+            synchronized(_list)
             {
-                final TextElement unnamed = new TextElement(value.getSerialisedForm()) ;
-                StreamHelper.writeElement(out, XMLUtil.ESB_QNAME_ATTACHMENT_UNNAMED, unnamed) ;
+                for (SerializedValueImpl value : _list)
+                {
+                    final TextElement unnamed = new TextElement(value.getSerialisedForm()) ;
+                    StreamHelper.writeElement(out, XMLUtil.ESB_QNAME_ATTACHMENT_UNNAMED, unnamed) ;
+                }
             }
             
-            for (Entry<String, SerializedValueImpl> entry : _table.entrySet())
+            synchronized(_table)
             {
-                final TextElement named = new TextElement(entry.getValue().getSerialisedForm()) ;
-                final String origNamedURI = StreamHelper.writeStartElement(out, XMLUtil.ESB_QNAME_ATTACHMENT_NAMED) ;
-                StreamHelper.writeAttribute(out, XMLUtil.ESB_QNAME_ATTRIBUTE_ATTACHMENT_NAMED_NAME, entry.getKey()) ;
-                named.writeContent(out) ;
-                StreamHelper.writeEndElement(out, XMLUtil.ESB_QNAME_ATTACHMENT_NAMED.getPrefix(), origNamedURI) ;
+                for (Entry<String, SerializedValueImpl> entry : _table.entrySet())
+                {
+                    final TextElement named = new TextElement(entry.getValue().getSerialisedForm()) ;
+                    final String origNamedURI = StreamHelper.writeStartElement(out, XMLUtil.ESB_QNAME_ATTACHMENT_NAMED) ;
+                    StreamHelper.writeAttribute(out, XMLUtil.ESB_QNAME_ATTRIBUTE_ATTACHMENT_NAMED_NAME, entry.getKey()) ;
+                    named.writeContent(out) ;
+                    StreamHelper.writeEndElement(out, XMLUtil.ESB_QNAME_ATTACHMENT_NAMED.getPrefix(), origNamedURI) ;
+                }
             }
 	}
 	    
@@ -200,5 +247,5 @@
     }
 
 	private ArrayList<SerializedValueImpl> _list = new ArrayList<SerializedValueImpl>();
-	private Hashtable<String, SerializedValueImpl> _table = new Hashtable<String, SerializedValueImpl>();
+	private HashMap<String, SerializedValueImpl> _table = new HashMap<String, SerializedValueImpl>();
 }

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/BodyImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/BodyImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/BodyImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -1,8 +1,10 @@
 package org.jboss.internal.soa.esb.message.format.xml;
 
 import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collections;
 import java.util.Enumeration;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 import java.util.Map.Entry;
@@ -76,7 +78,7 @@
 		add(Body.DEFAULT_LOCATION, value);
 	}
 
-	public void add(String name, Object value)
+	public synchronized void add(String name, Object value)
 	{
 		AssertArgument.isNotNull(value, "value");
 		AssertArgument.isNotNull(name, "name");
@@ -89,14 +91,14 @@
 		return get(Body.DEFAULT_LOCATION);
 	}
 
-	public Object get(String name)
+	public synchronized Object get(String name)
 	{
 		AssertArgument.isNotNull(name, "name");
 
 		return unwrap(_objects.get(name));
 	}
 
-	public String[] getNames()
+	public synchronized String[] getNames()
 	{
 		Set<String> keys = _objects.keySet();
                 return keys.toArray(new String[0]) ;
@@ -104,10 +106,10 @@
 	
         public Enumeration<String> getEnumeratedNames()
         {
-            return _objects.keys() ;
+            return Collections.enumeration(Arrays.asList(getNames())) ;
         }
 
-	public Object remove(String name)
+	public synchronized Object remove(String name)
 	{
 		return unwrap(_objects.remove(name));
 	}
@@ -118,7 +120,7 @@
          * @throws XMLStreamException For errors during output.
          */
         @Override
-	protected void writeChildContent(XMLStreamWriter out)
+	protected synchronized void writeChildContent(XMLStreamWriter out)
 	        throws XMLStreamException
 	{
             /*
@@ -215,6 +217,9 @@
 		return getByteArray();
 	}
 
+	/**
+	 * This method is not thread safe.
+	 */
 	public void replace(Body b)
 	{
 		if (b == null)
@@ -225,6 +230,9 @@
 		_objects = ((BodyImpl) b)._objects;
 	}
 
+	/**
+	 * This method is not thread safe.
+	 */
 	public void merge(Body b)
 	{
 		if (b == null)
@@ -247,21 +255,18 @@
 
 	public String toString()
 	{
-		String toReturn = "body: [ ";
+		StringBuilder toReturn = new StringBuilder("body: [ ");
 		byte[] content = getByteArray();
 
 		if (content != null)
-			toReturn += "byte[]: " + Util.format(new String(content));
+			toReturn.append("byte[]: ").append(Util.format(new String(content))).append(", ");
 
-		if (_objects != null)
+		synchronized(this)
 		{
-			if (content != null)
-				toReturn += ", ";
-
-			toReturn += "objects: " + _objects.toString();
+			toReturn.append("objects: ").append(_objects);
 		}
 
-		return toReturn + " ]";
+		return toReturn.append(" ]").toString() ;
 	}
 
 	// copy constructor (almost - doesn't copy, just references).
@@ -278,7 +283,7 @@
         
         protected void initialiseMap(final Map<String, Serializable> payload)
         {
-            synchronized(_objects)
+            synchronized(this)
             {
                 _objects.clear() ;
                 for(Entry<String, Serializable> entry: payload.entrySet())
@@ -288,5 +293,5 @@
             }
         }
         
-	private Hashtable<String, MarshalValueImpl> _objects = new Hashtable<String, MarshalValueImpl>();
+	private HashMap<String, MarshalValueImpl> _objects = new HashMap<String, MarshalValueImpl>();
 }
\ No newline at end of file

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/ContextImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/ContextImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/ContextImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -40,6 +40,9 @@
  * @author mark.little at jboss.com
  */
 
+/**
+ * This class is not thread safe and will be duplicated during InVM operations.
+ */
 public class ContextImpl extends ElementContent implements Context
 {
     /**

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/HeaderImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/HeaderImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/HeaderImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -32,6 +32,8 @@
 
 /**
  * The message header. Contains such things as routing information.
+ * 
+ * This class is not thread safe and will be duplicated during InVM operations.
  */
 
 public class HeaderImpl extends ElementContent implements Header

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/PropertiesImpl.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/PropertiesImpl.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/message/format/xml/PropertiesImpl.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -21,7 +21,7 @@
 package org.jboss.internal.soa.esb.message.format.xml;
 
 import java.io.Serializable;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.Map.Entry;
 
 import javax.xml.namespace.QName;
@@ -57,7 +57,7 @@
         parse(in) ;
     }
 
-	public Object getProperty(String name)
+	public synchronized Object getProperty(String name)
 	{
 		return unwrap(_table.get(name));
 	}
@@ -68,7 +68,7 @@
 		return (null == oRet) ? defaultVal : oRet;
 	}
 
-	public Object setProperty(String name, Object value)
+	public synchronized Object setProperty(String name, Object value)
 	{
         AssertArgument.isNotNull(name, "name");
         AssertArgument.isNotNull(value, "value");
@@ -80,17 +80,17 @@
         return unwrap(_table.put(name, new SerializedValueImpl((Serializable)value)));
     }
 
-	public Object remove(String name)
+	public synchronized Object remove(String name)
 	{
 		return unwrap(_table.remove(name));
 	}
 
-	public int size()
+	public synchronized int size()
 	{
 		return _table.size();
 	}
 
-	public String[] getNames()
+	public synchronized String[] getNames()
 	{
 		return _table.keySet().toArray(new String[0]);
 	}
@@ -101,7 +101,7 @@
          * @throws XMLStreamException For errors during output.
          */
 	@Override
-	protected void writeChildContent(XMLStreamWriter out)
+	protected synchronized void writeChildContent(XMLStreamWriter out)
 	        throws XMLStreamException
 	{
 	    for (Entry<String, SerializedValueImpl> entry: _table.entrySet())
@@ -150,7 +150,7 @@
             }
         }
         
-	public String toString()
+	public synchronized String toString()
 	{
 		return "properties: [ "+_table.toString()+" ]";
 	}
@@ -160,6 +160,6 @@
 	    return (value == null ? null : value.getValue()) ;
 	}
 	
-	private Hashtable<String, SerializedValueImpl> _table = new Hashtable<String, SerializedValueImpl>();
+	private HashMap<String, SerializedValueImpl> _table = new HashMap<String, SerializedValueImpl>();
 
 }

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/message/Body.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/message/Body.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/soa/esb/message/Body.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -168,6 +168,8 @@
 	/**
 	 * Replace this body instance with the one given.
 	 * 
+	 * This method is not thread safe.
+	 * 
 	 * @param b
 	 *            the body to be replaced with.
 	 */
@@ -178,6 +180,8 @@
 	 * Merge two bodies. Any duplicate entries in the current instance will be
 	 * lost in favour of the new instance.
 	 * 
+	 * This method is not thread safe.
+	 * 
 	 * @param b
 	 *            the body to be merged with.
 	 */

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/SerializedMessageUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/SerializedMessageUnitTest.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/SerializedMessageUnitTest.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -308,12 +308,11 @@
 		assertEquals(names.length, 2);
 		
 		/*
-		 * The array comes back ordered alphabetically.
+		 * The array is not ordered.
 		 */
+		assertTrue("Check for bar", "bar".equals(names[0]) || "bar".equals(names[1]));
+		assertTrue("Check for foo", "foo".equals(names[0]) || "foo".equals(names[1]));
 		
-		assertEquals(names[0], "bar");
-		assertEquals(names[1], "foo");
-		
 		try
 		{
 			ByteArrayOutputStream s = new ByteArrayOutputStream();
@@ -338,8 +337,11 @@
 			assertNotNull(names);
 			
 			assertEquals(names.length, 2);
-			assertEquals(names[0], "foo");
-			assertEquals(names[1], "bar");
+			/*
+			 * The array is not ordered.
+			 */
+			assertTrue("Check for bar", "bar".equals(names[0]) || "bar".equals(names[1]));
+			assertTrue("Check for foo", "foo".equals(names[0]) || "foo".equals(names[1]));
 		}
 		catch (Exception ex)
 		{			

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/XMLMessageUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/XMLMessageUnitTest.java	2008-10-22 10:58:39 UTC (rev 23550)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/soa/esb/message/tests/XMLMessageUnitTest.java	2008-10-22 14:28:32 UTC (rev 23551)
@@ -274,12 +274,11 @@
 		assertEquals(names.length, 2);
 		
 		/*
-		 * The array comes back ordered alphabetically.
+		 * The array is not ordered.
 		 */
+		assertTrue("Check for bar", "bar".equals(names[0]) || "bar".equals(names[1]));
+		assertTrue("Check for foo", "foo".equals(names[0]) || "foo".equals(names[1]));
 		
-		assertEquals(names[0], "bar");
-		assertEquals(names[1], "foo");
-		
 		try
 		{
 			final String xmlRepresentation = msgToXML((MessageImpl)msg) ;
@@ -300,11 +299,10 @@
 			assertEquals(names.length, 2);	
 			
 			/*
-			 * The array comes back ordered alphabetically.
+			 * The array is not ordered.
 			 */
-			
-			assertEquals(names[0], "bar");
-			assertEquals(names[1], "foo");
+			assertTrue("Check for bar", "bar".equals(names[0]) || "bar".equals(names[1]));
+			assertTrue("Check for foo", "foo".equals(names[0]) || "foo".equals(names[1]));
 		}
 		catch (Exception ex)
 		{




More information about the jboss-svn-commits mailing list