summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajith Muditha Attapattu <rajith@apache.org>2011-06-20 22:30:35 +0000
committerRajith Muditha Attapattu <rajith@apache.org>2011-06-20 22:30:35 +0000
commitb6650f4dda8be58935fba17f9ef494858b04a328 (patch)
treedfeb7de2da5fdcb56b72a9741410a922b1316141
parent83ba1fd120a2887ae9cecb5d0628e3c7064c391e (diff)
downloadqpid-python-b6650f4dda8be58935fba17f9ef494858b04a328.tar.gz
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
-rw-r--r--qpid/java/broker/src/main/java/org/apache/qpid/server/filter/PropertyExpression.java9
-rw-r--r--qpid/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java13
-rw-r--r--qpid/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java34
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();