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 2009/03/16 14:45:34 UTC
svn commit: r754889 - in /camel/trunk/components/camel-jms/src:
main/java/org/apache/camel/component/jms/
test/java/org/apache/camel/component/jms/
test/java/org/apache/camel/component/jms/discovery/
Author: davsclaus
Date: Mon Mar 16 13:45:33 2009
New Revision: 754889
URL: http://svn.apache.org/viewvc?rev=754889&view=rev
Log:
CAMEL-898: Introduced JmsMessageType to allow end users to control whuich JMS message type is used for sending jms messages.
Added:
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageType.java (with props)
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageTypeTest.java (with props)
Removed:
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/CamelMessageListener.java
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/JmsConfiguration.java
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java
camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/JmsDiscoveryTest.java
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/MyService.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=754889&r1=754888&r2=754889&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 Mar 16 13:45:33 2009
@@ -36,7 +36,6 @@
import javax.jms.Session;
import javax.jms.StreamMessage;
import javax.jms.TextMessage;
-import javax.xml.transform.TransformerException;
import org.w3c.dom.Node;
@@ -44,13 +43,16 @@
import org.apache.camel.Exchange;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.file.GenericFile;
-import org.apache.camel.converter.jaxp.XmlConverter;
import org.apache.camel.spi.HeaderFilterStrategy;
import org.apache.camel.util.CamelContextHelper;
import org.apache.camel.util.ExchangeHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import static org.apache.camel.component.jms.JmsMessageType.Bytes;
+import static org.apache.camel.component.jms.JmsMessageType.Map;
+import static org.apache.camel.component.jms.JmsMessageType.Object;
+import static org.apache.camel.component.jms.JmsMessageType.Text;
/**
* A Strategy used to convert between a Camel {@link JmsExchange} and {@link JmsMessage}
@@ -61,7 +63,6 @@
public class JmsBinding {
private static final transient Log LOG = LogFactory.getLog(JmsBinding.class);
private JmsEndpoint endpoint;
- private XmlConverter xmlConverter = new XmlConverter();
private HeaderFilterStrategy headerFilterStrategy;
public JmsBinding() {
@@ -137,8 +138,7 @@
String name = names.nextElement().toString();
try {
Object value = jmsMessage.getObjectProperty(name);
- if (headerFilterStrategy != null
- && headerFilterStrategy.applyFilterToExternalHeaders(name, value)) {
+ if (headerFilterStrategy != null && headerFilterStrategy.applyFilterToExternalHeaders(name, value)) {
continue;
}
@@ -186,7 +186,7 @@
public Message makeJmsMessage(Exchange exchange, org.apache.camel.Message camelMessage, Session session)
throws JMSException {
Message answer = null;
- boolean alwaysCopy = (endpoint != null) ? endpoint.getConfiguration().isAlwaysCopyMessage() : false;
+ boolean alwaysCopy = (endpoint != null) && endpoint.getConfiguration().isAlwaysCopyMessage();
if (!alwaysCopy && camelMessage instanceof JmsMessage) {
JmsMessage jmsMessage = (JmsMessage)camelMessage;
if (!jmsMessage.shouldCreateNewMessage()) {
@@ -194,7 +194,7 @@
}
}
if (answer == null) {
- answer = createJmsMessage(camelMessage.getBody(), session, exchange.getContext());
+ answer = createJmsMessage(camelMessage.getBody(), camelMessage.getHeaders(), session, exchange.getContext());
appendJmsProperties(answer, exchange, camelMessage);
}
return answer;
@@ -291,46 +291,71 @@
return null;
}
- protected Message createJmsMessage(Object body, Session session, CamelContext context)
- throws JMSException {
- if (body instanceof Node) {
- // lets convert the document to a String format
- try {
- body = xmlConverter.toString((Node)body);
- } catch (TransformerException e) {
- JMSException jmsException = new JMSException(e.getMessage());
- jmsException.setLinkedException(e);
- throw jmsException;
+ protected Message createJmsMessage(Object body, Map<String, Object> headers, Session session, CamelContext context) throws JMSException {
+ JmsMessageType type = null;
+
+ // check if header have a type set, if so we force to use it
+ if (headers.containsKey(JmsConstants.JMS_MESSAGE_TYPE)) {
+ type = context.getTypeConverter().convertTo(JmsMessageType.class, headers.get(JmsConstants.JMS_MESSAGE_TYPE));
+ } else if (endpoint != null && endpoint.getConfiguration().getJmsMessageType() != null) {
+ // force a specific type from the endpoint configuration
+ type = endpoint.getConfiguration().getJmsMessageType();
+ } else {
+ // let body deterime the type
+ if (body instanceof Node || body instanceof String) {
+ type = Text;
+ } else if (body instanceof byte[] || body instanceof GenericFile || body instanceof File || body instanceof Reader
+ || body instanceof InputStream || body instanceof ByteBuffer) {
+ type = Bytes;
+ } else if (body instanceof Map) {
+ type = Map;
+ } else if (body instanceof Serializable) {
+ type = Object;
}
}
- if (body instanceof byte[]) {
- BytesMessage result = session.createBytesMessage();
- result.writeBytes((byte[])body);
- return result;
- }
- if (body instanceof Map) {
- MapMessage result = session.createMapMessage();
- Map<?, ?> map = (Map<?, ?>)body;
- try {
- populateMapMessage(result, map, context);
- return result;
- } catch (JMSException e) {
- // if MapMessage creation failed then fall back to Object Message
- LOG.warn("Cannot populate MapMessage will fall back to ObjectMessage, cause by: " + e.getMessage());
+
+ // create the JmsMessage based on the type
+ if (type != null) {
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Using JmsMessageType: " + type);
+ }
+
+ switch (type) {
+ case Text: {
+ TextMessage message = session.createTextMessage();
+ String payload = context.getTypeConverter().convertTo(String.class, body);
+ message.setText(payload);
+ return message;
+ }
+ case Bytes: {
+ BytesMessage message = session.createBytesMessage();
+ byte[] payload = context.getTypeConverter().convertTo(byte[].class, body);
+ message.writeBytes(payload);
+ return message;
+ }
+ case Map: {
+ MapMessage message = session.createMapMessage();
+ Map payload = context.getTypeConverter().convertTo(Map.class, body);
+ populateMapMessage(message, payload, context);
+ return message;
+ }
+ case Object:
+ return session.createObjectMessage((Serializable)body);
+ case Strem:
+ // TODO: Stream is not supported
+ break;
+ default:
+ break;
}
}
- if (body instanceof String) {
- return session.createTextMessage((String)body);
- }
- if (body instanceof GenericFile || body instanceof File || body instanceof Reader || body instanceof InputStream || body instanceof ByteBuffer) {
- BytesMessage result = session.createBytesMessage();
- byte[] bytes = context.getTypeConverter().convertTo(byte[].class, body);
- result.writeBytes(bytes);
- return result;
- }
- if (body instanceof Serializable) {
- return session.createObjectMessage((Serializable)body);
+
+ // TODO: should we throw an exception instead?
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Could not determine specific JmsMessage type to use from body."
+ + " Will use generic JmsMessage. Body class: " + body.getClass().getCanonicalName());
}
+
+ // return a default message
return session.createMessage();
}
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java?rev=754889&r1=754888&r2=754889&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConfiguration.java Mon Mar 16 13:45:33 2009
@@ -131,6 +131,7 @@
private String replyToTempDestinationAffinity = REPLYTO_TEMP_DEST_AFFINITY_PER_ENDPOINT;
private String replyToDestination;
private String replyToDestinationSelectorName;
+ private JmsMessageType jmsMessageType;
public JmsConfiguration() {
}
@@ -1144,4 +1145,12 @@
setAlwaysCopyMessage(true);
}
}
+
+ public JmsMessageType getJmsMessageType() {
+ return jmsMessageType;
+ }
+
+ public void setJmsMessageType(JmsMessageType jmsMessageType) {
+ this.jmsMessageType = jmsMessageType;
+ }
}
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java?rev=754889&r1=754888&r2=754889&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsConstants.java Mon Mar 16 13:45:33 2009
@@ -17,7 +17,7 @@
package org.apache.camel.component.jms;
/**
- * Constants
+ * JMS constants
*/
public final class JmsConstants {
@@ -25,6 +25,8 @@
public static final String JMS_DESTINATION = "JMSDestination";
+ public static final String JMS_MESSAGE_TYPE = "CamelJmsMessageType";
+
private JmsConstants() {
// utility class
}
Modified: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java?rev=754889&r1=754888&r2=754889&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java (original)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsEndpoint.java Mon Mar 16 13:45:33 2009
@@ -763,6 +763,14 @@
getConfiguration().setUseVersion102(useVersion102);
}
+ public JmsMessageType getJmsMessageType() {
+ return getConfiguration().getJmsMessageType();
+ }
+
+ public void setJmsMessageType(JmsMessageType jmsMessageType) {
+ getConfiguration().setJmsMessageType(jmsMessageType);
+ }
+
// Implementation methods
//-------------------------------------------------------------------------
Added: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageType.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageType.java?rev=754889&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageType.java (added)
+++ camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageType.java Mon Mar 16 13:45:33 2009
@@ -0,0 +1,28 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jms;
+
+/**
+ * Enum for different {@link javax.jms.Message} types.
+ *
+ * @version $Revision$
+ */
+public enum JmsMessageType {
+
+ Bytes, Map, Object, Strem, Text
+
+}
Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageType.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/JmsMessageType.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageTypeTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageTypeTest.java?rev=754889&view=auto
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageTypeTest.java (added)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageTypeTest.java Mon Mar 16 13:45:33 2009
@@ -0,0 +1,238 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.jms;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+import javax.jms.ConnectionFactory;
+
+import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge;
+import static org.apache.camel.component.jms.JmsConstants.JMS_MESSAGE_TYPE;
+
+/**
+ * @version $Revision$
+ */
+public class JmsMessageTypeTest extends ContextTestSupport {
+
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext camelContext = super.createCamelContext();
+
+ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
+ camelContext.addComponent("jms", jmsComponentClientAcknowledge(connectionFactory));
+
+ camelContext.getTypeConverterRegistry().addTypeConverter(byte[].class, MyFooBean.class, new MyFooBean());
+ camelContext.getTypeConverterRegistry().addTypeConverter(String.class, MyFooBean.class, new MyFooBean());
+ camelContext.getTypeConverterRegistry().addTypeConverter(Map.class, MyFooBean.class, new MyFooBean());
+
+ return camelContext;
+ }
+
+ public void testHeaderTextType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("Hello World");
+ // we use Text type then it should be a String
+ mock.message(0).body().isInstanceOf(String.class);
+
+ template.sendBodyAndHeader("direct:foo", new MyFooBean("World"), JMS_MESSAGE_TYPE, "Text");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testConvertTextType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("Hello World");
+ // we use Text type then it should be a String
+ mock.message(0).body().isInstanceOf(String.class);
+
+ // we send an object and fore it to use Text type
+ template.sendBody("direct:text", new MyFooBean("World"));
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testTextType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("Hello World");
+ // we use Text type then it should be a String
+ mock.message(0).body().isInstanceOf(String.class);
+
+ // we send an object and fore it to use Text type
+ template.sendBody("direct:text", "Hello World");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testHeaderBytesType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("Bye World".getBytes());
+ mock.message(0).body().isInstanceOf(byte[].class);
+
+ template.sendBodyAndHeader("direct:foo", new MyFooBean("World"), JMS_MESSAGE_TYPE, "Bytes");
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testConvertBytesType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("Bye World".getBytes());
+ mock.message(0).body().isInstanceOf(byte[].class);
+
+ // we send an object and fore it to use Bytes type
+ template.sendBody("direct:bytes", new MyFooBean("World"));
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testBytesType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedBodiesReceived("Bye World".getBytes());
+ mock.message(0).body().isInstanceOf(byte[].class);
+
+ // we send an object and fore it to use Text type
+ template.sendBody("direct:bytes", "Bye World".getBytes());
+
+ assertMockEndpointsSatisfied();
+ }
+
+ public void testHeaderMapType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(Map.class);
+
+ template.sendBodyAndHeader("direct:foo", new MyFooBean("Claus"), JMS_MESSAGE_TYPE, "Map");
+
+ assertMockEndpointsSatisfied();
+
+ assertEquals("Claus", mock.getExchanges().get(0).getIn().getBody(Map.class).get("name"));
+ }
+
+ public void testConvertMapType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(Map.class);
+
+ template.sendBody("direct:map", new MyFooBean("Claus"));
+
+ assertMockEndpointsSatisfied();
+
+ assertEquals("Claus", mock.getExchanges().get(0).getIn().getBody(Map.class).get("name"));
+ }
+
+ public void testMapType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(Map.class);
+
+ Map body = new HashMap();
+ body.put("name", "Claus");
+
+ template.sendBody("direct:map", body);
+
+ assertMockEndpointsSatisfied();
+
+ assertEquals("Claus", mock.getExchanges().get(0).getIn().getBody(Map.class).get("name"));
+ }
+
+ public void testHeaderObjectType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ // we use Text type then it should be a String
+ mock.message(0).body().isInstanceOf(MyFooBean.class);
+
+ // we send an object and fore it to use Text type
+ template.sendBodyAndHeader("direct:foo", new MyFooBean("James"), JMS_MESSAGE_TYPE, "Object");
+
+ assertMockEndpointsSatisfied();
+
+ assertEquals("James", mock.getExchanges().get(0).getIn().getBody(MyFooBean.class).getName());
+ }
+
+ public void testObjectType() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(1);
+ // we use Text type then it should be a String
+ mock.message(0).body().isInstanceOf(MyFooBean.class);
+
+ // we send an object and fore it to use Text type
+ template.sendBody("direct:object", new MyFooBean("James"));
+
+ assertMockEndpointsSatisfied();
+
+ assertEquals("James", mock.getExchanges().get(0).getIn().getBody(MyFooBean.class).getName());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:text").to("jms:queue:foo?jmsMessageType=Text");
+ from("direct:bytes").to("jms:queue:foo?jmsMessageType=Bytes");
+ from("direct:map").to("jms:queue:foo?jmsMessageType=Map");
+ from("direct:object").to("jms:queue:foo?jmsMessageType=Object");
+
+ from("direct:foo").to("jms:queue:foo");
+
+ from("jms:queue:foo").to("mock:result");
+ }
+ };
+ }
+
+ public static final class MyFooBean implements TypeConverter, Serializable {
+
+ private String name;
+
+ private MyFooBean() {
+ }
+
+ private MyFooBean(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @SuppressWarnings("unchecked")
+ public <T> T convertTo(Class<T> type, Object value) {
+ if (type.isAssignableFrom(String.class)) {
+ return (T) ("Hello " + ((MyFooBean)value).getName());
+ }
+ if (type.isAssignableFrom(byte[].class)) {
+ return (T) ("Bye " + ((MyFooBean)value).getName()).getBytes();
+ }
+ if (type.isAssignableFrom(Map.class)) {
+ Map<String, Object> map = new HashMap<String, Object>();
+ map.put("name", ((MyFooBean)value).getName());
+ return (T) map;
+ }
+ return null;
+ }
+
+ public <T> T convertTo(Class<T> type, Exchange exchange, Object value) {
+ return convertTo(type, value);
+ }
+ }
+}
Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageTypeTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsMessageTypeTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/JmsDiscoveryTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/JmsDiscoveryTest.java?rev=754889&r1=754888&r2=754889&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/JmsDiscoveryTest.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/JmsDiscoveryTest.java Mon Mar 16 13:45:33 2009
@@ -18,7 +18,6 @@
import java.util.HashMap;
import java.util.Map;
-
import javax.jms.ConnectionFactory;
import javax.naming.Context;
@@ -26,6 +25,7 @@
import org.apache.camel.CamelContext;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
import static org.apache.camel.component.jms.JmsComponent.jmsComponentClientAcknowledge;
/**
@@ -35,13 +35,10 @@
protected MyRegistry registry = new MyRegistry();
public void testDiscovery() throws Exception {
- // lets wait to see if we get 3 services
- for (int i = 0; i < 15; i++) {
- Thread.sleep(1000);
- if (registry.getServices().size() == 3) {
- break;
- }
- }
+ MockEndpoint mock = getMockEndpoint("mock:result");
+ mock.expectedMessageCount(3);
+
+ assertMockEndpointsSatisfied();
Map<String, Map> map = new HashMap<String, Map>(registry.getServices());
assertEquals("Size of map: " + map, 3, map.size());
@@ -70,12 +67,12 @@
return new RouteBuilder() {
public void configure() throws Exception {
// lets setup the heartbeats
- from("bean:service1?method=status").to("activemq:topic:registry.heartbeats");
- from("bean:service2?method=status").to("activemq:topic:registry.heartbeats");
- from("bean:service3?method=status").to("activemq:topic:registry.heartbeats");
+ from("bean:service1?method=status?delay=5000&exchangePattern=InOnly").to("activemq:topic:registry.heartbeats");
+ from("bean:service2?method=status?delay=5000&exchangePattern=InOnly").to("activemq:topic:registry.heartbeats");
+ from("bean:service3?method=status?delay=5000&exchangePattern=InOnly").to("activemq:topic:registry.heartbeats");
- from("activemq:topic:registry.heartbeats?cacheLevelName=CACHE_CONSUMER").to("bean:registry?method=onEvent");
+ from("activemq:topic:registry.heartbeats?cacheLevelName=CACHE_CONSUMER").to("bean:registry?method=onEvent", "mock:result");
}
};
}
-}
\ No newline at end of file
+}
Modified: camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/MyService.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/MyService.java?rev=754889&r1=754888&r2=754889&view=diff
==============================================================================
--- camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/MyService.java (original)
+++ camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/discovery/MyService.java Mon Mar 16 13:45:33 2009
@@ -33,7 +33,7 @@
public Map status() {
Map answer = new HashMap();
answer.put("name", name);
- answer.put("time", new Date());
+ answer.put("time", new Date().getTime());
return answer;
}
}