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;
}
}