ARTEMIS-989 JMS2 context support custom session modes
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/0b829558 Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/0b829558 Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/0b829558 Branch: refs/heads/master Commit: 0b829558b32ac1fe34fab3f18cf2730a7a919e7c Parents: c7be36a Author: Justin Bertram <[email protected]> Authored: Thu Feb 23 09:46:59 2017 -0600 Committer: Clebert Suconic <[email protected]> Committed: Thu Feb 23 11:39:23 2017 -0500 ---------------------------------------------------------------------- .../jms/client/ActiveMQConnectionFactory.java | 5 ++- .../jms/consumer/JmsConsumerTest.java | 46 ++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/0b829558/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java ---------------------------------------------------------------------- diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java index 4d314ce..dee8157 100644 --- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java +++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQConnectionFactory.java @@ -48,6 +48,7 @@ import org.apache.activemq.artemis.api.core.UDPBroadcastEndpointFactory; import org.apache.activemq.artemis.api.core.client.ActiveMQClient; import org.apache.activemq.artemis.api.core.client.ClientSessionFactory; import org.apache.activemq.artemis.api.core.client.ServerLocator; +import org.apache.activemq.artemis.api.jms.ActiveMQJMSConstants; import org.apache.activemq.artemis.api.jms.JMSFactoryType; import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl; import org.apache.activemq.artemis.jms.referenceable.ConnectionFactoryObjectFactory; @@ -297,7 +298,9 @@ public class ActiveMQConnectionFactory implements ConnectionFactoryOptions, Exte case JMSContext.AUTO_ACKNOWLEDGE: case JMSContext.CLIENT_ACKNOWLEDGE: case JMSContext.DUPS_OK_ACKNOWLEDGE: - case JMSContext.SESSION_TRANSACTED: { + case JMSContext.SESSION_TRANSACTED: + case ActiveMQJMSConstants.PRE_ACKNOWLEDGE: + case ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE: { return; } default: http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/0b829558/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/consumer/JmsConsumerTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/consumer/JmsConsumerTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/consumer/JmsConsumerTest.java index 4856b5d..d242da8 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/consumer/JmsConsumerTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/consumer/JmsConsumerTest.java @@ -185,6 +185,52 @@ public class JmsConsumerTest extends JMSTestBase { } @Test + public void testIndividualACKJms2() throws Exception { + JMSContext context = cf.createContext(ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE); + jBossQueue = ActiveMQJMSClient.createQueue(JmsConsumerTest.Q_NAME); + JMSProducer producer = context.createProducer(); + JMSConsumer consumer = context.createConsumer(jBossQueue); + int noOfMessages = 100; + for (int i = 0; i < noOfMessages; i++) { + producer.send(jBossQueue, context.createTextMessage("m" + i)); + } + + context.start(); + + // Consume even numbers first + for (int i = 0; i < noOfMessages; i++) { + Message m = consumer.receive(500); + Assert.assertNotNull(m); + if (i % 2 == 0) { + m.acknowledge(); + } + } + + context.close(); + + context = cf.createContext(ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE); + + consumer = context.createConsumer(jBossQueue); + + // Consume odd numbers first + for (int i = 0; i < noOfMessages; i++) { + if (i % 2 == 0) { + continue; + } + + TextMessage m = (TextMessage) consumer.receive(1000); + Assert.assertNotNull(m); + m.acknowledge(); + Assert.assertEquals("m" + i, m.getText()); + } + + SimpleString queueName = new SimpleString(JmsConsumerTest.Q_NAME); + Assert.assertEquals(0, ((Queue) server.getPostOffice().getBinding(queueName).getBindable()).getDeliveringCount()); + Assert.assertEquals(0, getMessageCount((Queue) server.getPostOffice().getBinding(queueName).getBindable())); + context.close(); + } + + @Test public void testIndividualACKMessageConsumer() throws Exception { Connection conn = cf.createConnection(); Session session = conn.createSession(false, ActiveMQJMSConstants.INDIVIDUAL_ACKNOWLEDGE);
