From b6650f4dda8be58935fba17f9ef494858b04a328 Mon Sep 17 00:00:00 2001 From: Rajith Muditha Attapattu Date: Mon, 20 Jun 2011 22:30:35 +0000 Subject: QPID-3273 The JMS delivery mode is now used evaluated as a string instead of an integer. Added a test case to cover the JIRA. There was an existing test case (testUsingOnMessage) that had delivery mode in it's selector, but for some reason it was commented out. I decided to add a new one as I was not sure why the delivery mode was taken out of the selector in that test case. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1137804 13f79535-47bb-0310-9956-ffa450edef68 --- .../qpid/server/filter/PropertyExpression.java | 9 +++--- .../org/apache/qpid/filter/PropertyExpression.java | 13 +++++---- .../qpid/test/client/message/SelectorTest.java | 34 ++++++++++++++++++++++ 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java index 11fdeae2b1..9848f90ea9 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java @@ -37,8 +37,8 @@ import org.apache.qpid.server.queue.Filterable; public class PropertyExpression implements Expression { // Constants - defined the same as JMS - private static final int NON_PERSISTENT = 1; - private static final int PERSISTENT = 2; + private static enum JMSDeliveryMode { NON_PERSISTENT, PERSISTENT } + private static final int DEFAULT_PRIORITY = 4; private static final Logger _logger = org.apache.log4j.Logger.getLogger(PropertyExpression.class); @@ -172,13 +172,14 @@ public class PropertyExpression implements Expression { public Object evaluate(Filterable message) { - int mode = message.isPersistent() ? PERSISTENT : NON_PERSISTENT; + JMSDeliveryMode mode = message.isPersistent() ? JMSDeliveryMode.PERSISTENT : + JMSDeliveryMode.NON_PERSISTENT; if (_logger.isDebugEnabled()) { _logger.debug("JMSDeliveryMode is :" + mode); } - return mode; + return mode.toString(); } } diff --git a/qpid/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java b/qpid/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java index b7b6bd57bc..574a1b3888 100644 --- a/qpid/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java +++ b/qpid/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java @@ -19,6 +19,7 @@ package org.apache.qpid.filter; import java.util.HashMap; +import javax.jms.DeliveryMode; import javax.jms.JMSException; import org.apache.qpid.AMQInternalException; @@ -32,7 +33,7 @@ import org.slf4j.LoggerFactory; public class PropertyExpression implements Expression { // Constants - defined the same as JMS - private static final int NON_PERSISTENT = 1; + private static enum JMSDeliveryMode { NON_PERSISTENT, PERSISTENT } private static final int DEFAULT_PRIORITY = 4; private static final Logger _logger = LoggerFactory.getLogger(PropertyExpression.class); @@ -79,22 +80,24 @@ public class PropertyExpression implements Expression { public Object evaluate(AbstractJMSMessage message) { + + JMSDeliveryMode mode = JMSDeliveryMode.NON_PERSISTENT; try { - int mode = message.getJMSDeliveryMode(); + mode = message.getJMSDeliveryMode() == DeliveryMode.PERSISTENT ? + JMSDeliveryMode.PERSISTENT : JMSDeliveryMode.NON_PERSISTENT; + if (_logger.isDebugEnabled()) { _logger.debug("JMSDeliveryMode is :" + mode); } - - return mode; } catch (JMSException e) { _logger.warn("Error evaluating property",e); } - return NON_PERSISTENT; + return mode.toString(); } }); diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java index 49a608190d..212374e8be 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java @@ -23,6 +23,7 @@ package org.apache.qpid.test.client.message; import java.util.concurrent.CountDownLatch; import javax.jms.DeliveryMode; +import javax.jms.Destination; import javax.jms.InvalidSelectorException; import javax.jms.JMSException; import javax.jms.Message; @@ -30,6 +31,7 @@ import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.MessageProducer; import javax.jms.Session; +import javax.jms.TextMessage; import junit.framework.Assert; @@ -280,6 +282,38 @@ public class SelectorTest extends QpidBrokerTestCase implements MessageListener Assert.assertNotNull("Msg5 should not be null", msg5); } + public void testSelectorWithJMSDeliveryMode() throws Exception + { + Session session = _connection.createSession(false, Session.SESSION_TRANSACTED); + + Destination dest1 = session.createTopic("test1"); + Destination dest2 = session.createTopic("test2"); + + MessageProducer prod1 = session.createProducer(dest1); + MessageProducer prod2 = session.createProducer(dest2); + MessageConsumer consumer1 = session.createConsumer(dest1,"JMSDeliveryMode = 'PERSISTENT'"); + MessageConsumer consumer2 = session.createConsumer(dest2,"JMSDeliveryMode = 'NON_PERSISTENT'"); + + Message msg1 = session.createTextMessage("Persistent"); + prod1.send(msg1); + prod2.send(msg1); + + prod1.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + prod2.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + + Message msg2 = session.createTextMessage("Non_Persistent"); + prod1.send(msg2); + prod2.send(msg2); + + TextMessage m1 = (TextMessage)consumer1.receive(1000); + assertEquals("Consumer1 should receive the persistent message","Persistent",m1.getText()); + assertNull("Consumer1 should not receiver another message",consumer1.receive(1000)); + + TextMessage m2 = (TextMessage)consumer2.receive(1000); + assertEquals("Consumer2 should receive the non persistent message","Non_Persistent",m2.getText()); + assertNull("Consumer2 should not receiver another message",consumer2.receive(1000)); + } + public static void main(String[] argv) throws Exception { SelectorTest test = new SelectorTest(); -- cgit v1.2.1