[hornetq-commits] JBoss hornetq SVN: r9088 - in trunk: src/main/org/hornetq/jms/client and 2 other directories.
do-not-reply at jboss.org
do-not-reply at jboss.org
Fri Apr 9 13:43:11 EDT 2010
Author: timfox
Date: 2010-04-09 13:43:11 -0400 (Fri, 09 Apr 2010)
New Revision: 9088
Modified:
trunk/src/main/org/hornetq/api/jms/HornetQJMSConstants.java
trunk/src/main/org/hornetq/jms/client/HornetQMessage.java
trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/JMSCorrelationIDHeaderTest.java
trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/SimpleJMSMessage.java
trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/foreign/ForeignMessageTest.java
Log:
https://jira.jboss.org/jira/browse/HORNETQ-356
Modified: trunk/src/main/org/hornetq/api/jms/HornetQJMSConstants.java
===================================================================
--- trunk/src/main/org/hornetq/api/jms/HornetQJMSConstants.java 2010-04-09 16:35:58 UTC (rev 9087)
+++ trunk/src/main/org/hornetq/api/jms/HornetQJMSConstants.java 2010-04-09 17:43:11 UTC (rev 9088)
@@ -31,4 +31,7 @@
public static final String JBOSS_MESSAGING_BRIDGE_MESSAGE_ID_LIST = "HQ_BRIDGE_MSG_ID_LIST";
public static final int PRE_ACKNOWLEDGE = 100;
+
+ public static final String JMS_HORNETQ_ENABLE_BYTE_ARRAY_JMS_CORRELATION_ID_PROPERTY_NAME =
+ "hq.jms.support-bytes-id";
}
Modified: trunk/src/main/org/hornetq/jms/client/HornetQMessage.java
===================================================================
--- trunk/src/main/org/hornetq/jms/client/HornetQMessage.java 2010-04-09 16:35:58 UTC (rev 9087)
+++ trunk/src/main/org/hornetq/jms/client/HornetQMessage.java 2010-04-09 17:43:11 UTC (rev 9088)
@@ -99,8 +99,7 @@
for (Map.Entry<String, Object> entry : coreMessage.entrySet())
{
- if (entry.getKey().equals("type") ||
- entry.getKey().equals("durable") ||
+ if (entry.getKey().equals("type") || entry.getKey().equals("durable") ||
entry.getKey().equals("expiration") ||
entry.getKey().equals("timestamp") ||
entry.getKey().equals("priority"))
@@ -270,15 +269,36 @@
this(type, session);
setJMSTimestamp(foreign.getJMSTimestamp());
+
+ String value = System.getProperty(HornetQJMSConstants.JMS_HORNETQ_ENABLE_BYTE_ARRAY_JMS_CORRELATION_ID_PROPERTY_NAME);
- try
+ boolean supportBytesId = !"false".equals(value);
+
+ if (supportBytesId)
{
- byte[] corrIDBytes = foreign.getJMSCorrelationIDAsBytes();
- setJMSCorrelationIDAsBytes(corrIDBytes);
+ try
+ {
+ byte[] corrIDBytes = foreign.getJMSCorrelationIDAsBytes();
+ setJMSCorrelationIDAsBytes(corrIDBytes);
+ }
+ catch (JMSException e)
+ {
+ // specified as String
+ String corrIDString = foreign.getJMSCorrelationID();
+ if (corrIDString != null)
+ {
+ setJMSCorrelationID(corrIDString);
+ }
+ }
}
- catch (JMSException e)
+ else
{
- // specified as String
+ // Some providers, like WSMQ do automatic conversions between native byte[] correlation id
+ // and String correlation id. This makes it impossible for HQ to guarantee to return the correct
+ // type as set by the user
+ // So we allow the behaviour to be overridden by a system property
+ // https://jira.jboss.org/jira/browse/HORNETQ-356
+ // https://jira.jboss.org/jira/browse/HORNETQ-332
String corrIDString = foreign.getJMSCorrelationID();
if (corrIDString != null)
{
@@ -311,7 +331,7 @@
if (msgID == null)
{
SimpleString uid = message.getUserID();
-
+
msgID = uid == null ? null : uid.toString();
}
return msgID;
@@ -328,7 +348,7 @@
msgID = jmsMessageID;
}
-
+
public long getJMSTimestamp() throws JMSException
{
return message.getTimestamp();
@@ -382,7 +402,14 @@
{
if (jmsCorrelationID == null)
{
- jmsCorrelationID = message.getStringProperty(HornetQMessage.CORRELATIONID_HEADER_NAME);
+ try
+ {
+ jmsCorrelationID = message.getStringProperty(HornetQMessage.CORRELATIONID_HEADER_NAME);
+ }
+ catch (PropertyConversionException e)
+ {
+ jmsCorrelationID = null;
+ }
}
return jmsCorrelationID;
Modified: trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/JMSCorrelationIDHeaderTest.java
===================================================================
--- trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/JMSCorrelationIDHeaderTest.java 2010-04-09 16:35:58 UTC (rev 9087)
+++ trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/JMSCorrelationIDHeaderTest.java 2010-04-09 17:43:11 UTC (rev 9088)
@@ -67,6 +67,7 @@
}
+
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
Modified: trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/SimpleJMSMessage.java
===================================================================
--- trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/SimpleJMSMessage.java 2010-04-09 16:35:58 UTC (rev 9087)
+++ trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/SimpleJMSMessage.java 2010-04-09 17:43:11 UTC (rev 9088)
@@ -125,10 +125,7 @@
public String getJMSCorrelationID() throws JMSException
{
- if (isCorrelationIDBytes)
- {
- throw new JMSException("CorrelationID is a byte[] for this message");
- }
+
return correlationIDString;
}
Modified: trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/foreign/ForeignMessageTest.java
===================================================================
--- trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/foreign/ForeignMessageTest.java 2010-04-09 16:35:58 UTC (rev 9087)
+++ trunk/tests/jms-tests/src/org/hornetq/jms/tests/message/foreign/ForeignMessageTest.java 2010-04-09 17:43:11 UTC (rev 9088)
@@ -16,6 +16,7 @@
import javax.jms.Message;
import javax.jms.TextMessage;
+import org.hornetq.api.jms.HornetQJMSConstants;
import org.hornetq.jms.tests.message.MessageTestBase;
import org.hornetq.jms.tests.message.SimpleJMSMessage;
import org.hornetq.jms.tests.message.SimpleJMSTextMessage;
@@ -69,5 +70,69 @@
ProxyAssertSupport.assertNotNull(tm);
ProxyAssertSupport.assertEquals("hello from Brazil!", txt.getText());
}
+
+
+
+ public void testForeignMessageCorrelationIDBytesDisabled() throws Exception
+ {
+ System.setProperty(HornetQJMSConstants.JMS_HORNETQ_ENABLE_BYTE_ARRAY_JMS_CORRELATION_ID_PROPERTY_NAME, "false");
+
+ SimpleJMSMessage msg = new SimpleJMSMessage();
+
+ msg.setJMSCorrelationID("mycorrelationid");
+ byte[] bytes = new byte[] { 1, 4, 3, 6, 8};
+ msg.setJMSCorrelationIDAsBytes(bytes);
+ queueProd.send(msg);
+
+ Message rec = queueCons.receive();
+ ProxyAssertSupport.assertNotNull(rec);
+
+ assertNull(rec.getJMSCorrelationIDAsBytes());
+
+ assertEquals("mycorrelationid", msg.getJMSCorrelationID());
+ }
+
+ public void testForeignMessageCorrelationID() throws Exception
+ {
+ System.setProperty(HornetQJMSConstants.JMS_HORNETQ_ENABLE_BYTE_ARRAY_JMS_CORRELATION_ID_PROPERTY_NAME, "true");
+
+ SimpleJMSMessage msg = new SimpleJMSMessage();
+
+ msg.setJMSCorrelationID("mycorrelationid");
+ byte[] bytes = new byte[] { 1, 4, 3, 6, 8};
+ msg.setJMSCorrelationIDAsBytes(bytes);
+
+ queueProd.send(msg);
+
+ Message rec = queueCons.receive();
+ ProxyAssertSupport.assertNotNull(rec);
+
+ //Bytes correlation id takes precedence
+ byte[] bytesrec = rec.getJMSCorrelationIDAsBytes();
+
+ assertByteArraysEqual(bytes, bytesrec);
+
+ assertNull(rec.getJMSCorrelationID());
+ }
+
+ private void assertByteArraysEqual(final byte[] bytes1, final byte[] bytes2)
+ {
+ if (bytes1 == null | bytes2 == null)
+ {
+ ProxyAssertSupport.fail();
+ }
+
+ if (bytes1.length != bytes2.length)
+ {
+ ProxyAssertSupport.fail();
+ }
+
+ for (int i = 0; i < bytes1.length; i++)
+ {
+ ProxyAssertSupport.assertEquals(bytes1[i], bytes2[i]);
+ }
+
+ }
+
}
More information about the hornetq-commits
mailing list