You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by js...@apache.org on 2007/10/09 16:44:21 UTC

svn commit: r583184 - in /activemq/trunk/activemq-core/src: main/java/org/apache/activemq/camel/component/ main/java/org/apache/activemq/camel/converter/ main/resources/META-INF/services/org/apache/camel/ test/java/org/apache/activemq/camel/component/ ...

Author: jstrachan
Date: Tue Oct  9 07:44:20 2007
New Revision: 583184

URL: http://svn.apache.org/viewvc?rev=583184&view=rev
Log:
added a plugin to support invocation of MessageListener classes as a bean in Camel; for more information see: http://cwiki.apache.org/CAMEL/activemq.html

Added:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQConverter.java   (contents, props changed)
      - copied, changed from r583111, activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConverter.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQMessageConverter.java   (contents, props changed)
      - copied, changed from r583111, activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQMessageConverter.java
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/package.html
      - copied, changed from r583114, activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/package.html
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/converter/
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/converter/InvokeMessageListenerTest.java
      - copied, changed from r583111, activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQRouteTest.java
Removed:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConverter.java
Modified:
    activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQReplyToHeaderUsingConverterTest.java

Copied: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQConverter.java (from r583111, activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConverter.java)
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQConverter.java?p2=activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQConverter.java&p1=activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConverter.java&r1=583111&r2=583184&rev=583184&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConverter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQConverter.java Tue Oct  9 07:44:20 2007
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.activemq.camel.component;
+package org.apache.activemq.camel.converter;
 
 import org.apache.activemq.command.ActiveMQDestination;
 import org.apache.camel.Converter;

Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQConverter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQConverter.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQMessageConverter.java (from r583111, activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQMessageConverter.java)
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQMessageConverter.java?p2=activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQMessageConverter.java&p1=activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQMessageConverter.java&r1=583111&r2=583184&rev=583184&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQMessageConverter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQMessageConverter.java Tue Oct  9 07:44:20 2007
@@ -15,18 +15,22 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.activemq.camel.component;
+package org.apache.activemq.camel.converter;
+
+import java.io.Serializable;
+
+import javax.jms.JMSException;
+import javax.jms.MessageListener;
+import javax.jms.Message;
 
 import org.apache.activemq.command.ActiveMQMessage;
-import org.apache.activemq.command.*;
+import org.apache.activemq.command.ActiveMQObjectMessage;
+import org.apache.activemq.command.ActiveMQTextMessage;
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.component.jms.JmsBinding;
 
-import javax.jms.MessageNotWriteableException;
-import javax.jms.JMSException;
-import java.io.Serializable;
-
 /**
  * @version $Revision$
  */
@@ -44,6 +48,30 @@
         ActiveMQMessage message = createActiveMQMessage(exchange);
         getBinding().appendJmsProperties(message, exchange);
         return message;
+    }
+
+    /**
+     * Allows a JMS {@link MessageListener} to be converted to a Camel {@link Processor}
+     * so that we can provide better
+     * <a href="">Bean Integration</a> so that we can use any JMS MessageListener in
+     * in Camel as a bean
+     * @param listener the JMS message listener
+     * @return a newly created Camel Processor which when invoked will invoke
+     * {@link MessageListener#onMessage(Message)}
+     */
+    @Converter
+    public Processor toProcessor(final MessageListener listener) {
+        return new Processor() {
+            public void process(Exchange exchange) throws Exception {
+                Message message = toMessage(exchange);
+                listener.onMessage(message);
+            }
+
+            @Override
+            public String toString() {
+                return "Processor of MessageListener: " + listener;
+            }
+        };
     }
 
     private static ActiveMQMessage createActiveMQMessage(Exchange exchange) throws JMSException {

Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQMessageConverter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/ActiveMQMessageConverter.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/package.html (from r583114, activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/package.html)
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/package.html?p2=activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/package.html&p1=activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/package.html&r1=583114&r2=583184&rev=583184&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/package.html (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/converter/package.html Tue Oct  9 07:44:20 2007
@@ -19,10 +19,9 @@
 </head>
 <body>
 
-Defines the <a href="http://activemq.apache.org/camel/activemq.html">ActiveMQ Component</a> for
-<a href="http://activemq.apache.org/camel/">Camel</a> to provide great
+Defines the <a href="http://activemq.apache.org/camel/type-converter.html">Type Converters</a> for working
+with JMS and ActiveMQ with <a href="http://activemq.apache.org/camel/">Camel</a>
 <a href="http://activemq.apache.org/camel/enterprise-integration-patterns.html">Enterprise Integration Patterns</a>
-integration for ActiveMQ users.
 
 
 </body>

Modified: activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/camel/TypeConverter
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/camel/TypeConverter?rev=583184&r1=583183&r2=583184&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/camel/TypeConverter (original)
+++ activemq/trunk/activemq-core/src/main/resources/META-INF/services/org/apache/camel/TypeConverter Tue Oct  9 07:44:20 2007
@@ -15,4 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.activemq.camel.component
\ No newline at end of file
+org.apache.activemq.camel.converter
\ No newline at end of file

Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQReplyToHeaderUsingConverterTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQReplyToHeaderUsingConverterTest.java?rev=583184&r1=583183&r2=583184&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQReplyToHeaderUsingConverterTest.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQReplyToHeaderUsingConverterTest.java Tue Oct  9 07:44:20 2007
@@ -16,13 +16,13 @@
  */
 package org.apache.activemq.camel.component;
 
-import org.apache.activemq.command.ActiveMQQueue;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
 import static org.apache.activemq.camel.component.ActiveMQComponent.activeMQComponent;
+import org.apache.activemq.camel.converter.ActiveMQConverter;
 import org.apache.camel.component.mock.AssertionClause;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.commons.logging.Log;

Copied: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/converter/InvokeMessageListenerTest.java (from r583111, activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQRouteTest.java)
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/converter/InvokeMessageListenerTest.java?p2=activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/converter/InvokeMessageListenerTest.java&p1=activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQRouteTest.java&r1=583111&r2=583184&rev=583184&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/component/ActiveMQRouteTest.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/camel/converter/InvokeMessageListenerTest.java Tue Oct  9 07:44:20 2007
@@ -14,69 +14,55 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.activemq.camel.component;
+package org.apache.activemq.camel.converter;
 
-import org.springframework.jms.connection.JmsTransactionManager;
+import java.util.List;
+
+import javax.jms.Message;
+import javax.jms.TextMessage;
+
+import static org.apache.activemq.camel.component.ActiveMQComponent.activeMQComponent;
+import org.apache.activemq.spring.ConsumerBean;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
-import static org.apache.activemq.camel.component.ActiveMQComponent.activeMQComponent;
-import org.apache.camel.component.jms.JmsEndpoint;
 import org.apache.camel.component.mock.MockEndpoint;
 
 /**
  * @version $Revision$
  */
-public class ActiveMQRouteTest extends ContextTestSupport {
-    protected MockEndpoint resultEndpoint;
+public class InvokeMessageListenerTest extends ContextTestSupport {    protected MockEndpoint resultEndpoint;
     protected String startEndpointUri = "activemq:queue:test.a";
+    protected ConsumerBean listener = new ConsumerBean();
 
-    public void testJmsRouteWithTextMessage() throws Exception {
+    public void testSendTextMessage() throws Exception {
         String expectedBody = "Hello there!";
 
-        resultEndpoint.expectedBodiesReceived(expectedBody);
-        resultEndpoint.message(0).header("cheese").isEqualTo(123);
-
-        sendExchange(expectedBody);
+        template.sendBodyAndHeader(startEndpointUri, expectedBody, "cheese", 123);
 
-        resultEndpoint.assertIsSatisfied();
-    }
+        listener.assertMessagesArrived(1);
 
-    protected void sendExchange(final Object expectedBody) {
-        template.sendBodyAndHeader(startEndpointUri, expectedBody, "cheese", 123);
-    }
+        List<Message> list = listener.flushMessages();
+        assertTrue("Should have received some messages!", !list.isEmpty());
+        Message message = list.get(0);
 
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
+        log.debug("Received: " + message);
 
-        resultEndpoint = (MockEndpoint) context.getEndpoint("mock:result");
+        TextMessage textMessage = assertIsInstanceOf(TextMessage.class, message);
+        assertEquals("Text mesage body: " + textMessage, expectedBody, textMessage.getText());
     }
 
     protected CamelContext createCamelContext() throws Exception {
         CamelContext camelContext = super.createCamelContext();
-
-        // START SNIPPET: example
-        camelContext.addComponent("activemq", activeMQComponent("vm://localhost?broker.persistent=false"));
-        // END SNIPPET: example
-
+        camelContext.addComponent("activemq",
+                activeMQComponent("vm://localhost?broker.persistent=false"));
         return camelContext;
     }
 
     protected RouteBuilder createRouteBuilder() throws Exception {
         return new RouteBuilder() {
             public void configure() throws Exception {
-                from(startEndpointUri).to("activemq:queue:test.b");
-                from("activemq:queue:test.b").to("mock:result");
-
-                JmsEndpoint endpoint1 = (JmsEndpoint) endpoint("activemq:topic:quote.IONA");
-                endpoint1.getConfiguration().setTransactionManager(new JmsTransactionManager());
-                endpoint1.getConfiguration().setTransacted(true);
-                from(endpoint1).to("mock:transactedClient");
-
-                JmsEndpoint endpoint2 = (JmsEndpoint) endpoint("activemq:topic:quote.IONA");
-                endpoint2.getConfiguration().setTransacted(false);
-                from(endpoint2).to("mock:nonTrasnactedClient");
+                from(startEndpointUri).bean(listener);
             }
         };
     }