[jboss-cvs] JBoss Messaging SVN: r4630 - in branches/Branch_Stable: 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
Tue Jul 1 07:01:29 EDT 2008
Author: clebert.suconic at jboss.com
Date: 2008-07-01 07:01:28 -0400 (Tue, 01 Jul 2008)
New Revision: 4630
Modified:
branches/Branch_Stable/src/main/org/jboss/jms/message/JBossObjectMessage.java
branches/Branch_Stable/src/main/org/jboss/jms/message/ObjectMessageProxy.java
branches/Branch_Stable/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java
branches/Branch_Stable/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java
Log:
JBMESSAGING-1277 - Merge from CP Branch
Modified: branches/Branch_Stable/src/main/org/jboss/jms/message/JBossObjectMessage.java
===================================================================
--- branches/Branch_Stable/src/main/org/jboss/jms/message/JBossObjectMessage.java 2008-07-01 06:14:34 UTC (rev 4629)
+++ branches/Branch_Stable/src/main/org/jboss/jms/message/JBossObjectMessage.java 2008-07-01 11:01:28 UTC (rev 4630)
@@ -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_Stable/src/main/org/jboss/jms/message/ObjectMessageProxy.java
===================================================================
--- branches/Branch_Stable/src/main/org/jboss/jms/message/ObjectMessageProxy.java 2008-07-01 06:14:34 UTC (rev 4629)
+++ branches/Branch_Stable/src/main/org/jboss/jms/message/ObjectMessageProxy.java 2008-07-01 11:01:28 UTC (rev 4630)
@@ -38,6 +38,8 @@
public class ObjectMessageProxy extends MessageProxy implements ObjectMessage
{
private static final long serialVersionUID = 8797295997477962825L;
+
+ private transient Serializable cachedObject;
public ObjectMessageProxy(long deliveryId, JBossObjectMessage message, int deliveryCount)
{
@@ -48,7 +50,7 @@
{
super(message);
}
-
+
public void setObject(Serializable object) throws JMSException
{
if (bodyReadOnly)
@@ -61,6 +63,20 @@
public Serializable getObject() throws JMSException
{
- return ((ObjectMessage)message).getObject();
+ if (cachedObject == null)
+ {
+ cachedObject = ((ObjectMessage)message).getObject();
+ }
+
+ return cachedObject;
}
+
+ protected void bodyChange() throws JMSException
+ {
+ super.bodyChange();
+
+ cachedObject = null;
+ }
+
+
}
Modified: branches/Branch_Stable/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java
===================================================================
--- branches/Branch_Stable/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java 2008-07-01 06:14:34 UTC (rev 4629)
+++ branches/Branch_Stable/src/main/org/jboss/messaging/core/impl/message/MessageSupport.java 2008-07-01 11:01:28 UTC (rev 4630)
@@ -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_Stable/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java
===================================================================
--- branches/Branch_Stable/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java 2008-07-01 06:14:34 UTC (rev 4629)
+++ branches/Branch_Stable/tests/src/org/jboss/test/messaging/jms/message/ObjectMessageTest.java 2008-07-01 11:01:28 UTC (rev 4630)
@@ -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();
+
+ assertSame (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