Author: jstrachan
Date: Wed Oct 29 04:23:27 2008
New Revision: 708879
URL: http://svn.apache.org/viewvc?rev=708879&view=rev
Log:
added a fix for CAMEL-1033 making it easy to create a JMS MessageListener for
processing by Camel - along with helper methods to make a Processor from a
ProducerTemplate
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerTemplateProcessor.java
(with props)
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/CamelMessageListener.java
(with props)
Removed:
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/MessageListenerProcessor.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java?rev=708879&r1=708878&r2=708879&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultProducerTemplate.java
Wed Oct 29 04:23:27 2008
@@ -30,6 +30,7 @@
import org.apache.camel.Producer;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.CamelContextHelper;
import static org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException;
/**
@@ -46,6 +47,11 @@
private final Map<String, Endpoint<E>> endpointCache = new HashMap<String,
Endpoint<E>>();
private Endpoint<E> defaultEndpoint;
+ public static DefaultProducerTemplate newInstance(CamelContext
camelContext, String defaultEndpointUri) {
+ Endpoint endpoint =
CamelContextHelper.getMandatoryEndpoint(camelContext, defaultEndpointUri);
+ return new DefaultProducerTemplate(camelContext, endpoint);
+ }
+
public DefaultProducerTemplate(CamelContext context) {
this.context = context;
}
Added:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerTemplateProcessor.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerTemplateProcessor.java?rev=708879&view=auto
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerTemplateProcessor.java
(added)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerTemplateProcessor.java
Wed Oct 29 04:23:27 2008
@@ -0,0 +1,46 @@
+/**
+ *
+ * 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.impl;
+
+import org.apache.camel.Processor;
+import org.apache.camel.Exchange;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * A simple processor which just sends the message exchange to the default
endpoint of the [EMAIL PROTECTED] ProducerTemplate}
+ *
+ * @version $Revision: 1.1 $
+ */
+public class ProducerTemplateProcessor implements Processor {
+ private final ProducerTemplate producerTemplate;
+
+ public ProducerTemplateProcessor(ProducerTemplate producerTemplate) {
+ this.producerTemplate = producerTemplate;
+ ObjectHelper.notNull(producerTemplate, "producerTemplate");
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ producerTemplate.send(exchange);
+ }
+
+ @Override
+ public String toString() {
+ return "ProducerTemplateProcessor[" + producerTemplate + "]";
+ }
+}
Propchange:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ProducerTemplateProcessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/CamelMessageListener.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/CamelMessageListener.java?rev=708879&view=auto
==============================================================================
---
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/CamelMessageListener.java
(added)
+++
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/CamelMessageListener.java
Wed Oct 29 04:23:27 2008
@@ -0,0 +1,133 @@
+/**
+ *
+ * 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 org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.Processor;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.impl.DefaultProducerTemplate;
+import org.apache.camel.impl.ProducerTemplateProcessor;
+import org.apache.camel.util.ObjectHelper;
+import static org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException;
+
+import javax.jms.Message;
+import javax.jms.MessageListener;
+
+/**
+ * A JMS [EMAIL PROTECTED] MessageListener} which converts an incoming JMS
message into a Camel message [EMAIL PROTECTED] Exchange} then
+ * processing it by Camel; either using a custom [EMAIL PROTECTED] Processor}
or if you use one of the static <code>newInstance()</code>
+ * methods such as [EMAIL PROTECTED]
#newInstance(org.apache.camel.CamelContext, String)} or
+ * [EMAIL PROTECTED] #newInstance(org.apache.camel.CamelContext,
org.apache.camel.ProducerTemplate)}
+ * you can send the message exchange into a Camel endpoint for processing.
+ *
+ * @version $Revision: 1.1 $
+ */
+public class CamelMessageListener implements MessageListener, Processor {
+ private final CamelContext camelContext;
+ private final Processor processor;
+ private JmsBinding binding = new JmsBinding();
+ private ExchangePattern pattern = ExchangePattern.InOnly;
+
+ /**
+ * Creates a new CamelMessageListener which will invoke a Camel endpoint
+ *
+ * @param camelContext the context to use
+ * @param endpointUri the endpoint to invoke with the JMS message [EMAIL
PROTECTED] Exchange}
+ * @return a newly created JMS MessageListener
+ */
+ public static CamelMessageListener newInstance(CamelContext camelContext,
String endpointUri) {
+ DefaultProducerTemplate producerTemplate =
DefaultProducerTemplate.newInstance(camelContext, endpointUri);
+ return newInstance(camelContext, producerTemplate);
+ }
+
+ /**
+ * Creates a new CamelMessageListener which will invoke the default Camel
endpoint of the given
+ * [EMAIL PROTECTED] ProducerTemplate}
+ *
+ * @param camelContext the context to use
+ * @param producerTemplate the template used to send the exchange
+ * @return a newly created JMS MessageListener
+ */
+ public static CamelMessageListener newInstance(CamelContext camelContext,
ProducerTemplate producerTemplate) {
+ return new CamelMessageListener(camelContext, new
ProducerTemplateProcessor(producerTemplate));
+ }
+
+ public CamelMessageListener(CamelContext camelContext, Processor
processor) {
+ this.camelContext = camelContext;
+ this.processor = processor;
+ ObjectHelper.notNull(processor, "processor");
+ }
+
+ /**
+ * Processes the incoming JMS message
+ */
+ public void onMessage(Message message) {
+ try {
+ Exchange exchange = createExchange(message);
+ process(exchange);
+ } catch (Exception e) {
+ throw wrapRuntimeCamelException(e);
+ }
+ }
+
+ /**
+ * Processes the Camel message [EMAIL PROTECTED] Exchange}
+ */
+ public void process(Exchange exchange) throws Exception {
+ ObjectHelper.notNull(exchange, "exchange");
+ processor.process(exchange);
+ }
+
+ // Properties
+ //-------------------------------------------------------------------------
+
+ public JmsBinding getBinding() {
+ return binding;
+ }
+
+ /**
+ * Sets the JMS binding used to adapt the incoming JMS message into a
Camel message [EMAIL PROTECTED] Exchange}
+ */
+ public void setBinding(JmsBinding binding) {
+ this.binding = binding;
+ }
+
+ public ExchangePattern getPattern() {
+ return pattern;
+ }
+
+ /**
+ * Sets the message exchange pattern that will be used on the Camel
message [EMAIL PROTECTED] Exchange}
+ */
+ public void setPattern(ExchangePattern pattern) {
+ this.pattern = pattern;
+ }
+
+ // Implementation methods
+ //-------------------------------------------------------------------------
+
+
+ /**
+ * Returns a newly created Camel message [EMAIL PROTECTED] Exchange} from
an inbound JMS message
+ */
+ protected Exchange createExchange(Message message) {
+ return new JmsExchange(camelContext, pattern, binding, message);
+ }
+}
Propchange:
activemq/camel/trunk/components/camel-jms/src/main/java/org/apache/camel/component/jms/CamelMessageListener.java
------------------------------------------------------------------------------
svn:eol-style = native