I'm running into a problem where CamelContext.addRoutes() is blocking when 
adding a route that uses a jms endpoint that is configured with AcitveMQ's 
failover transport and the remote server is down.  

This specific jms endpoint is configured to use SingleConnectionFactory and 
ConsumerType.Simple to reduce thread usage.  Looks like when the consumer is 
started, that it attempts to open up the connection:

<snip>
jvm 1    |    java.lang.Thread.State: TIMED_WAITING (on object monitor)
jvm 1    |      at java.lang.Object.wait(Native Method)
jvm 1    |      - waiting on <7cbecd168> (a java.lang.Object)
jvm 1    |      at 
org.apache.activemq.transport.failover.FailoverTransport.oneway(FailoverTransport.java:516)
jvm 1    |      - locked <7cbecd168> (a java.lang.Object)
jvm 1    |      at 
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
jvm 1    |      - locked <7cbecd1b8> (a java.lang.Object)
jvm 1    |      at 
org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:81)
jvm 1    |      at 
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:86)
jvm 1    |      at 
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1284)
jvm 1    |      at 
org.apache.activemq.ActiveMQConnection.ensureConnectionInfoSent(ActiveMQConnection.java:1392)
jvm 1    |      - locked <7cbecd340> (a java.lang.Object)
jvm 1    |      at 
org.apache.activemq.ActiveMQConnection.createSession(ActiveMQConnection.java:309)
jvm 1    |      at 
org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:196)
jvm 1    |      at 
org.springframework.jms.listener.SimpleMessageListenerContainer.initializeConsumers(SimpleMessageListenerContainer.java:249)
jvm 1    |      - locked <7cbecd3d0> (a java.lang.Object)
jvm 1    |      at 
org.springframework.jms.listener.SimpleMessageListenerContainer.doInitialize(SimpleMessageListenerContainer.java:188)
jvm 1    |      at 
org.springframework.jms.listener.AbstractJmsListeningContainer.initialize(AbstractJmsListeningContainer.java:193)
jvm 1    |      at 
org.springframework.jms.listener.AbstractJmsListeningContainer.afterPropertiesSet(AbstractJmsListeningContainer.java:157)
jvm 1    |      at 
org.apache.camel.component.jms.JmsConsumer.doStart(JmsConsumer.java:114)
...
</snip>

And failover does its job and loops forever trying to establish.  This block 
camel from starting up fully.  Is this a bug or am I misconfiguring something?  
Once server is up, it behaves itself and returns as expected.

Any suggestions on how to work around this?  I'd rather not make a new thread 
simply to add the route (or add not-autostart) and thread the call to start the 
route, but... I don't see any other way to cope with this ATM.

--jason

Reply via email to