001    /**
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.camel.example.jmstofile;
018    
019    import javax.jms.ConnectionFactory;
020    
021    import org.apache.activemq.ActiveMQConnectionFactory;
022    import org.apache.camel.CamelContext;
023    import org.apache.camel.CamelTemplate;
024    import org.apache.camel.Exchange;
025    import org.apache.camel.Processor;
026    import org.apache.camel.builder.RouteBuilder;
027    import org.apache.camel.component.jms.JmsComponent;
028    import org.apache.camel.impl.DefaultCamelContext;
029    
030    /**
031     * An example class for demonstrating some of the basics behind camel This
032     * example will send some text messages on to a JMS Queue, consume them and
033     * persist them to disk
034     * 
035     * @version $Revision: 529902 $
036     */
037    public final class CamelJmsToFileExample {
038    
039        private CamelJmsToFileExample() {        
040        }
041        
042        public static void main(String args[]) throws Exception {
043            // START SNIPPET: e1
044            CamelContext context = new DefaultCamelContext();
045            // END SNIPPET: e1
046            // Set up the ActiveMQ JMS Components
047            // START SNIPPET: e2
048            ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=false");
049            // note we can explicity name the component
050            context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
051            // END SNIPPET: e2
052            // Add some configuration by hand ...
053            // START SNIPPET: e3
054            context.addRoutes(new RouteBuilder() {
055    
056                public void configure() {
057                    from("test-jms:queue:test.queue").to("file://test");
058                    // set up a listener on the file component
059                    from("file://test").process(new Processor() {
060    
061                        public void process(Exchange e) {
062                            System.out.println("Received exchange: " + e.getIn());
063                        }
064                    });
065                }
066            });
067            // END SNIPPET: e3
068            // Camel template - a handy class for kicking off exchanges
069            // START SNIPPET: e4
070            CamelTemplate template = new CamelTemplate(context);
071            // END SNIPPET: e4
072            // Now everything is set up - lets start the context
073            context.start();
074            // now send some test text to a component - for this case a JMS Queue
075            // The text get converted to JMS messages - and sent to the Queue
076            // test.queue
077            // The file component is listening for messages from the Queue
078            // test.queue, consumes
079            // them and stores them to disk. The content of each file will be the
080            // test test we sent here.
081            // The listener on the file component gets notfied when new files are
082            // found ...
083            // that's it!
084            // START SNIPPET: e5
085            for (int i = 0; i < 10; i++) {
086                template.sendBody("test-jms:queue:test.queue", "Test Message: " + i);
087            }
088            // END SNIPPET: e5
089            Thread.sleep(1000);
090            context.stop();
091        }
092    }