You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/06/13 20:04:12 UTC
svn commit: r1135203 - in /camel/trunk/components/camel-jms/src:
main/java/org/apache/camel/component/jms/
test/java/org/apache/camel/component/jms/
Author: davsclaus
Date: Mon Jun 13 18:04:11 2011
New Revision: 1135203
URL: http://svn.apache.org/viewvc?rev=1135203&view=rev
Log:
CAMEL-4100: camel-jms now supports delivery mode as PERSISTENT / NON_PERSISTENT as well.
Modified:
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerWithJMSHeaderTest.java
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteDeliveryModePreserveQoSTest.java
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java?rev=1135203&r1=1135202&r2=1135203&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsBinding.java Mon Jun 13 18:04:11 2011
@@ -308,9 +308,7 @@ public class JmsBinding {
} else if (headerName.equals("JMSPriority")) {
jmsMessage.setJMSPriority(ExchangeHelper.convertToType(exchange, Integer.class, headerValue));
} else if (headerName.equals("JMSDeliveryMode")) {
- Integer deliveryMode = ExchangeHelper.convertToType(exchange, Integer.class, headerValue);
- jmsMessage.setJMSDeliveryMode(deliveryMode);
- jmsMessage.setIntProperty(JmsConstants.JMS_DELIVERY_MODE, deliveryMode);
+ JmsMessageHelper.setJMSDeliveryMode(exchange, jmsMessage, headerValue);
} else if (headerName.equals("JMSExpiration")) {
jmsMessage.setJMSExpiration(ExchangeHelper.convertToType(exchange, Long.class, headerValue));
} else {
@@ -350,7 +348,7 @@ public class JmsBinding {
if (headerName.startsWith("JMSX")) {
return false;
}
- // IBM WebSphereMQ uses JMS_IBM as special headers
+ // vendors will use JMS_XXX as their special headers (where XXX is vendor name, such as JMS_IBM)
if (headerName.startsWith("JMS_")) {
return false;
}
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java?rev=1135203&r1=1135202&r2=1135203&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageHelper.java Mon Jun 13 18:04:11 2011
@@ -20,10 +20,14 @@ import java.util.Enumeration;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
+import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
+import org.apache.camel.Exchange;
+import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.util.ExchangeHelper;
import org.apache.camel.util.ObjectHelper;
import static org.apache.camel.component.jms.JmsConfiguration.QUEUE_PREFIX;
@@ -214,4 +218,42 @@ public final class JmsMessageHelper {
return null;
}
+ /**
+ * Sets the JMSDeliveryMode on the message.
+ *
+ * @param exchange the exchange
+ * @param message the message
+ * @param deliveryMode the delivery mode, either as a String or integer
+ * @throws javax.jms.JMSException is thrown if error setting the delivery mode
+ */
+ public static void setJMSDeliveryMode(Exchange exchange, Message message, Object deliveryMode) throws JMSException {
+ int mode = Message.DEFAULT_DELIVERY_MODE;
+
+ if (deliveryMode instanceof String) {
+ String s = (String) deliveryMode;
+ if ("PERSISTENT".equalsIgnoreCase(s)) {
+ mode = DeliveryMode.PERSISTENT;
+ } else if ("NON_PERSISTENT".equalsIgnoreCase(s)) {
+ mode = DeliveryMode.NON_PERSISTENT;
+ } else {
+ // it may be a number in the String so try that
+ Integer value = ExchangeHelper.convertToType(exchange, Integer.class, deliveryMode);
+ if (value != null) {
+ mode = value;
+ } else {
+ throw new IllegalArgumentException("Unknown delivery mode with value: " + deliveryMode);
+ }
+ }
+ } else {
+ // fallback and try to convert to a number
+ Integer value = ExchangeHelper.convertToType(exchange, Integer.class, deliveryMode);
+ if (value != null) {
+ mode = value;
+ }
+ }
+
+ message.setJMSDeliveryMode(mode);
+ message.setIntProperty(JmsConstants.JMS_DELIVERY_MODE, mode);
+ }
+
}
Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerWithJMSHeaderTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerWithJMSHeaderTest.java?rev=1135203&r1=1135202&r2=1135203&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerWithJMSHeaderTest.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsProducerWithJMSHeaderTest.java Mon Jun 13 18:04:11 2011
@@ -96,6 +96,17 @@ public class JmsProducerWithJMSHeaderTes
}
@Test
+ public void testInOnlyJMSDeliveryModeAsString() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).header("JMSDeliveryMode").isEqualTo(1);
+
+ template.sendBodyAndHeader("activemq:queue:foo?preserveMessageQos=true", "Hello World", "JMSDeliveryMode", "NON_PERSISTENT");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
public void testInOnlyJMSExpiration() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
mock.expectedMessageCount(1);
Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteDeliveryModePreserveQoSTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteDeliveryModePreserveQoSTest.java?rev=1135203&r1=1135202&r2=1135203&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteDeliveryModePreserveQoSTest.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsRouteDeliveryModePreserveQoSTest.java Mon Jun 13 18:04:11 2011
@@ -60,6 +60,20 @@ public class JmsRouteDeliveryModePreserv
assertEquals(DeliveryMode.NON_PERSISTENT, map.get("JMSDeliveryMode"));
}
+ public void testSendNonPersistentAsString() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:bar");
+ mock.expectedBodiesReceived("Hello World");
+
+ template.sendBodyAndHeader("activemq:queue:foo?preserveMessageQos=true", "Hello World", "JMSDeliveryMode", "NON_PERSISTENT");
+
+ assertMockEndpointsSatisfied();
+
+ // should preserve non persistent
+ Map map = mock.getReceivedExchanges().get(0).getIn().getHeaders();
+ assertNotNull(map);
+ assertEquals(DeliveryMode.NON_PERSISTENT, map.get("JMSDeliveryMode"));
+ }
+
public void testSendPersistent() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:bar");
mock.expectedBodiesReceived("Hello World");
@@ -74,6 +88,20 @@ public class JmsRouteDeliveryModePreserv
assertEquals(DeliveryMode.PERSISTENT, map.get("JMSDeliveryMode"));
}
+ public void testSendPersistentAsString() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:bar");
+ mock.expectedBodiesReceived("Hello World");
+
+ template.sendBodyAndHeader("activemq:queue:foo?preserveMessageQos=true", "Hello World", "JMSDeliveryMode", "PERSISTENT");
+
+ assertMockEndpointsSatisfied();
+
+ // should preserve persistent
+ Map map = mock.getReceivedExchanges().get(0).getIn().getHeaders();
+ assertNotNull(map);
+ assertEquals(DeliveryMode.PERSISTENT, map.get("JMSDeliveryMode"));
+ }
+
protected CamelContext createCamelContext() throws Exception {
deleteDirectory("activemq-data");
CamelContext camelContext = super.createCamelContext();