[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