You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2016/04/04 18:05:59 UTC

[2/2] activemq-artemis git commit: ARTEMIS-462 JMSXGroupID on JMS 2 producer

ARTEMIS-462 JMSXGroupID on JMS 2 producer


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/69a97c36
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/69a97c36
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/69a97c36

Branch: refs/heads/master
Commit: 69a97c3678b0b3f061736285bb73c96385d6a2eb
Parents: d476ca1
Author: jbertram <jb...@apache.org>
Authored: Wed Mar 30 16:23:38 2016 -0500
Committer: Clebert Suconic <cl...@apache.org>
Committed: Mon Apr 4 12:05:39 2016 -0400

----------------------------------------------------------------------
 .../artemis/jms/client/ActiveMQMessage.java     | 20 +++++++-
 .../integration/jms/client/GroupingTest.java    | 53 ++++++++++++++++++++
 2 files changed, 71 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/69a97c36/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java
----------------------------------------------------------------------
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java
index eee6327..7b2ee5b 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessage.java
@@ -656,8 +656,8 @@ public class ActiveMQMessage implements javax.jms.Message {
    public void setStringProperty(final String name, final String value) throws JMSException {
       checkProperty(name);
 
-      if (MessageUtil.JMSXGROUPID.equals(name)) {
-         message.putStringProperty(org.apache.activemq.artemis.api.core.Message.HDR_GROUP_ID, SimpleString.toSimpleString(value));
+      if (handleGroupID(name, value)) {
+         return;
       }
       else {
          message.putStringProperty(new SimpleString(name), SimpleString.toSimpleString(value));
@@ -666,6 +666,10 @@ public class ActiveMQMessage implements javax.jms.Message {
 
    @Override
    public void setObjectProperty(final String name, final Object value) throws JMSException {
+      if (handleGroupID(name, value)) {
+         return;
+      }
+
       if (ActiveMQJMSConstants.JMS_ACTIVEMQ_OUTPUT_STREAM.equals(name)) {
          setOutputStream((OutputStream) value);
 
@@ -950,5 +954,17 @@ public class ActiveMQMessage implements javax.jms.Message {
       }
    }
 
+   private boolean handleGroupID(final String name, final Object value) {
+      boolean result = false;
+
+      if (MessageUtil.JMSXGROUPID.equals(name)) {
+         message.putStringProperty(org.apache.activemq.artemis.api.core.Message.HDR_GROUP_ID, SimpleString.toSimpleString(value.toString()));
+
+         result = true;
+      }
+
+      return result;
+   }
+
    // Inner classes -------------------------------------------------
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/69a97c36/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/GroupingTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/GroupingTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/GroupingTest.java
index 10e6b95..a73e3e5 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/GroupingTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/client/GroupingTest.java
@@ -29,13 +29,17 @@ import org.junit.Test;
 
 import javax.jms.Connection;
 import javax.jms.ConnectionFactory;
+import javax.jms.JMSConsumer;
+import javax.jms.JMSContext;
 import javax.jms.JMSException;
+import javax.jms.JMSProducer;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;
 import javax.jms.Queue;
 import javax.jms.Session;
 import javax.jms.TextMessage;
+import java.util.UUID;
 
 /**
  * GroupingTest
@@ -114,6 +118,55 @@ public class GroupingTest extends JMSTestBase {
    }
 
    @Test
+   public void testGroupingWithJMS2Producer() throws Exception {
+      final String groupID = UUID.randomUUID().toString();
+      JMSContext ctx = addContext(getCF().createContext(JMSContext.SESSION_TRANSACTED));
+
+      JMSProducer producer = ctx.createProducer().setProperty("JMSXGroupID", groupID);
+
+      JMSConsumer consumer1 = ctx.createConsumer(queue);
+      JMSConsumer consumer2 = ctx.createConsumer(queue);
+      JMSConsumer consumer3 = ctx.createConsumer(queue);
+
+      ctx.start();
+
+      for (int j = 0; j < 100; j++) {
+         TextMessage message = ctx.createTextMessage("Message" + j);
+
+         producer.send(queue, message);
+
+         String prop = message.getStringProperty("JMSXGroupID");
+
+         assertNotNull(prop);
+         assertEquals(groupID, prop);
+      }
+
+      ctx.commit();
+
+      //All msgs should go to the first consumer
+      for (int j = 0; j < 100; j++) {
+         TextMessage tm = (TextMessage) consumer1.receive(10000);
+
+         assertNotNull(tm);
+
+         tm.acknowledge();
+
+         assertEquals("Message" + j, tm.getText());
+
+         assertEquals(tm.getStringProperty("JMSXGroupID"), groupID);
+
+         tm = (TextMessage) consumer2.receiveNoWait();
+         assertNull(tm);
+         tm = (TextMessage) consumer3.receiveNoWait();
+         assertNull(tm);
+      }
+
+      ctx.commit();
+
+      ctx.close();
+   }
+
+   @Test
    public void testManyGroups() throws Exception {
       ConnectionFactory fact = getCF();
       Assume.assumeFalse("only makes sense withOUT auto-group", ((ActiveMQConnectionFactory) fact).isAutoGroup());