[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