Tomcat A servlet, which is set to be initialized on startup using Tomcat's <load-on-startup>1</load-on-startup> in web.xml, initiates a singleton. That singleton holds a CamelContext member. This context is initialized exactly as described in my previous post, except for the try/catch (this is simply because that the method in the singleton that initializes the context declares throwing exception, which the servlet catches). There is no XML here.
CamelContext context = new DefaultCamelContext(); > > String brokerUri = > "failover:(tcp://localhost:61616)?maxReconnectAttempts=-1&initialReconnectDelay=10000"; > > ConnectionFactory connectionFactory = new > ActiveMQConnectionFactory(brokerUri); > context.addComponent("jms", > JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); > > context.addRoutes(new RouteBuilder() { > > @Override > public void configure() throws Exception > { > from("jms:queueName") > .log("${body}"); > } > }); > context.start(); Standalone - Spring Style My main class initiates a org.apache.camel.spring.Main and sets its camel-context.xml. org.apache.camel.spring.Main.start() is called. org.apache.camel.spring.Main.enableHangupSupport is NOT called. The camel configuration is as described in my first post. <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> > <property name="brokerURL" > value="failover:(tcp://localhost:61616)?maxReconnectAttempts=-1&initialReconnectDelay=10000" > /> > </bean> > <bean id="pooledConnectionFactory" > class="org.apache.activemq.pool.PooledConnectionFactory"> > <property name="maxConnections" value="8" /> > <property name="maximumActive" value="500" /> > <property name="connectionFactory" ref="jmsConnectionFactory" /> > </bean> > <bean id="jmsConfig" > class="org.apache.camel.component.jms.JmsConfiguration"> > <property name="connectionFactory" ref="pooledConnectionFactory"/> > <property name="transacted" value="false"/> > <property name="concurrentConsumers" value="20"/> > </bean> > <bean id="activemq" > class="org.apache.activemq.camel.component.ActiveMQComponent"> > <property name="configuration" ref="jmsConfig"/> > </bean> > > <camel:camelContext id="camel" > xmlns="http://camel.apache.org/schema/spring"> > <camel:route> > <camel:from uri="activemq:queue:queueName"/> > <camel:log message="${body}" /> > </camel:route> > </camel:camelContext> Standalone - Java Style In this solution my main class creates a new Thread T with an anonymous Runnable, and calls T.start(). The runnable's run method is as described below. There is no XML here. CamelContext context = new DefaultCamelContext(); > > String brokerUri = > "failover:(tcp://localhost:61616)?maxReconnectAttempts=-1&initialReconnectDelay=10000"; > > ConnectionFactory connectionFactory = new > ActiveMQConnectionFactory(brokerUri); > context.addComponent("jms", > JmsComponent.jmsComponentAutoAcknowledge(connectionFactory)); > > try { > context.addRoutes(new RouteBuilder() { > > @Override > public void configure() throws Exception > { > from("jms:queueName") > .log("${body}"); > } > }); > context.start(); > } catch (Exception e) { > e.printStackTrace(); > } So we have 2 solutions with a standalone main, one with spring DSL and the other with Java. In both, the application crashes upon ActiveMQ restart. And we have one solution in a Tomcat container, using Java. Here the application does not crash upon ActiveMQ restart, and a connection is successfully established once the broker is up again. In ALL of the solutions the application was able to *start before* the broker, and later establish a connection once the broker has started (but again, 2 of them did not stand during a broker shutdown). thanks SJ -- View this message in context: http://camel.465427.n5.nabble.com/Camel-crashes-upon-ActiveMQ-shutdown-tp5534910p5537761.html Sent from the Camel - Users mailing list archive at Nabble.com.