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.