[jboss-cvs] JBoss Messaging SVN: r4622 - in branches/Branch_JBossMessaging_1_4_0_SP3_CP: src/main/org/jboss/messaging/core/impl/message and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jun 27 16:29:26 EDT 2008


Author: clebert.suconic at jboss.com
Date: 2008-06-27 16:29:26 -0400 (Fri, 27 Jun 2008)
New Revision: 4622

Modified:
   branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/message/JBossObjectMessage.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java
   branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java
Log:
JBMESSAGING-1386 and JBMESSAGING-1277 - Guaranteeing object isolation on ObjectMessage

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/message/JBossObjectMessage.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/message/JBossObjectMessage.java	2008-06-27 20:03:57 UTC (rev 4621)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/jms/message/JBossObjectMessage.java	2008-06-27 20:29:26 UTC (rev 4622)
@@ -113,6 +113,7 @@
    public void setObject(Serializable object) throws JMSException
    {  
       payload = object;
+      payloadAsByteArray = null;
       
       //Trigger serialization
       getPayloadAsByteArray();
@@ -122,7 +123,7 @@
 
    public Serializable getObject() throws JMSException
    {
-      return (Serializable)getPayload();     
+      return (Serializable)readPayload();     
    }
 
    // JBossMessage overrides ----------------------------------------

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java	2008-06-27 20:03:57 UTC (rev 4621)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java	2008-06-27 20:29:26 UTC (rev 4622)
@@ -239,21 +239,9 @@
 		}
 		else if (payloadAsByteArray != null)
 		{
-			ByteArrayInputStream bis = new ByteArrayInputStream(payloadAsByteArray);
-			DataInputStream dis = new DataInputStream(bis);
-			try
-			{
-				payload = StreamUtils.readObject(dis, true);
-			}
-			catch (Exception e)
-			{
-				RuntimeException e2 = new RuntimeException(e.getMessage());
-				e2.setStackTrace(e.getStackTrace());
-				throw e2;
-			}
-
-			payloadAsByteArray = null;
-			
+		   
+		   payload = readPayload();
+		   payloadAsByteArray = null;
 		   return payload;
 		}
 		else
@@ -261,7 +249,7 @@
 			return null;
 		}
 	}
-	
+
 	public void setPayload(Object payload)
 	{
 		this.payload = payload;
@@ -389,6 +377,30 @@
 
 	// Package protected ---------------------------------------------
 
+	protected synchronized Object readPayload()
+   {
+	   if (payloadAsByteArray == null)
+	   {
+	      return payload;
+	   }
+	   else
+	   {
+         ByteArrayInputStream bis = new ByteArrayInputStream(payloadAsByteArray);
+         DataInputStream dis = new DataInputStream(bis);
+         try
+         {
+            return StreamUtils.readObject(dis, true);
+         }
+         catch (Exception e)
+         {
+            RuntimeException e2 = new RuntimeException(e.getMessage());
+            e2.setStackTrace(e.getStackTrace());
+            throw e2;
+         }
+	   }
+   }
+   
+
 	// Protected -----------------------------------------------------
 
    // Certain MessageTypes will need different behaviors. For example ObjectMessages won't use container types

Modified: branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java
===================================================================
--- branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java	2008-06-27 20:03:57 UTC (rev 4621)
+++ branches/Branch_JBossMessaging_1_4_0_SP3_CP/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java	2008-06-27 20:29:26 UTC (rev 4622)
@@ -32,6 +32,9 @@
 import javax.jms.Message;
 import javax.jms.ObjectMessage;
 
+import org.jboss.jms.message.JBossObjectMessage;
+import org.jboss.jms.message.ObjectMessageProxy;
+
 /**
  * A test that sends/receives object messages to the JMS provider and verifies their integrity.
  *
@@ -69,6 +72,59 @@
       message = null;
       super.tearDown();
    }
+   
+   public void testObjectIsolation() throws Exception
+   {
+      ObjectMessage msgTest = session.createObjectMessage();
+      ArrayList list = new ArrayList();
+      list.add("hello");
+      msgTest.setObject(list);
+      
+      list.clear();
+      
+      list = (ArrayList) msgTest.getObject();
+      
+      assertEquals(1, list.size());
+      assertEquals("hello", list.get(0));
+      
+      list.add("hello2");
+      
+      msgTest.setObject(list);
+      
+      list.clear();
+      
+      list = (ArrayList) msgTest.getObject();
+      
+      assertEquals(2, list.size());
+      assertEquals("hello", list.get(0));
+      assertEquals("hello2", list.get(1));
+      
+      msgTest.setObject(list);
+      list.add("hello3");
+      msgTest.setObject(list);
+      
+      list = (ArrayList) msgTest.getObject();
+      assertEquals(3, list.size());
+      assertEquals("hello", list.get(0));
+      assertEquals("hello2", list.get(1));
+      assertEquals("hello3", list.get(2));
+      
+      list = (ArrayList) msgTest.getObject();
+      
+      list.clear();
+      
+      queueProd.send(msgTest);
+      
+      msgTest = (ObjectMessage) queueCons.receive(5000);
+      
+      list = (ArrayList) msgTest.getObject();
+      
+      assertEquals(3, list.size());
+      assertEquals("hello", list.get(0));
+      assertEquals("hello2", list.get(1));
+      assertEquals("hello3", list.get(2));
+      
+   }
 
 
    public void testClassLoaderIsolation() throws Exception
@@ -111,9 +167,62 @@
 
    }
 
+   public void testReadOnEmptyObjectMessage() throws Exception
+   {
+      ObjectMessage obm = (ObjectMessage) message;
+      assertNull(obm.getObject());
+      
+      queueProd.send(message);
+      ObjectMessage r = (ObjectMessage) queueCons.receive();
+      
+      assertNull(r.getObject());
+      
+   } 
 
-   public void testVecorOnObjectMessage() throws Exception
+   public void testReadOnCopy() throws Exception
    {
+
+      queueProd.setDeliveryMode(DeliveryMode.PERSISTENT);
+
+      ObjectMessage om = (ObjectMessage) message;
+      
+      om.setBooleanProperty("hello", true);
+
+      SomeObject testObject = new SomeObject(3, 7);
+
+      om.setObject(testObject);
+
+      queueProd.send(message);
+
+      ObjectMessage r = (ObjectMessage) queueCons.receive();
+      
+      assertEquals(true, r.getBooleanProperty("hello") );
+
+      Object testObject2 = r.getObject();
+
+      assertEquals("org.jboss.test.messaging.jms.message.SomeObject",
+         testObject2.getClass().getName());
+      assertNotSame(testObject, testObject2);
+      assertSame(testObject.getClass(), testObject2.getClass());
+      assertSame(testObject.getClass().getClassLoader(),
+         testObject2.getClass().getClassLoader());
+      
+      Object testObject3 = r.getObject();
+      
+      assertNotSame (testObject3, testObject2);
+      
+      JBossObjectMessage original = (JBossObjectMessage)(((ObjectMessageProxy)r).getMessage());
+      JBossObjectMessage msgCopy = new JBossObjectMessage(original);
+      
+      Object testObject4 = msgCopy.getObject();
+      
+      assertNotSame(testObject4, testObject3);
+      
+
+   }
+
+   public void testVectorOnObjectMessage() throws Exception
+   {
       java.util.Vector vectorOnMessage = new java.util.Vector();
       vectorOnMessage.add("world!");
       ((ObjectMessage)message).setObject(vectorOnMessage);




More information about the jboss-cvs-commits mailing list