You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by Guillaume Nodet <gn...@gmail.com> on 2006/12/11 21:57:41 UTC

Re: JMS flow, jmsUrl and ActiveMQ failover transport

Could you set the org.apache.activemq log level to DEBUG
in ServiceMix and check if there is an attempt to reconnect ?

On 12/11/06, William Blackburn <wj...@mac.com> wrote:
> I was reading in the Amq docs about clients that can survive short
> broker outages by connecting using failover transport, even though
> there was really only one broker.
>
> I thought this behavior was ideal for my servicemix app using jms
> flow, so I set up an external broker, ran it, and setup servicemix to
> use:
>
>         jms?jmsURL=failover:tcp://localhost:61616
>
> I also tried:
>
>         jms?jmsURL=failover://(tcp://localhost:61616)
>
> In each case, everything worked fine after the initial startup, but
> after restarting the broker, servicemix did not recover and had to be
> restarted too. Is this behavior not supported, or have I missed
> something in configuration?
>
> Thanks,
>
> BJ
>


-- 
Cheers,
Guillaume Nodet

Re: JMS flow, jmsUrl and ActiveMQ failover transport

Posted by William Blackburn <wj...@mac.com>.
I will,

thanks for your help.

BJ

On Dec 11, 2006, at 2:42 PM, Guillaume Nodet wrote:

> I think the problem may actually come from servicemix,
> which does not correctly parse the url and split it
> without taking care of parenthesis.
> You may want to hack the o.a.s.jbi.nmr.DefaultBroker#init
> method and provide a patch for that ?
>
> On 12/11/06, William Blackburn <wj...@mac.com> wrote:
>> I can't explain why - but now it seems to be working as expected -
>> and the log confirms it. Now I have a new issue that came up while
>> working on this one - specifically, the url:
>>
>>         jms?jmsURL=failover://(tcp://localhost:61616)
>>
>> Behaves as expected, but if I attempt to include another broker,  
>> as in:
>>
>>          jms?jmsURL=failover://(tcp://localhost:61616, tcp://
>> localhost:61617)?randomize=false
>>
>> JMS Flow fails to initialize with:
>>
>> Failed to initialize JMSFlow
>> javax.jms.JMSException: Could not connect to broker URL: failover://
>> (tcp://localhost:61616. Reason: java.io.IOException: Invalid
>> location: failover://(tcp://localhost:61616
>>
>> If the message is any indication, the url appears to be being split
>> at the comma - I've tried several forms of the url, the amq docs seem
>> to alternate between failover: and failover:// -- but always the same
>> result. The upshot is, I can't seem to get servicemix working with
>> master/slave brokers. I'm sorry - it occurs to me this may well be an
>> AMQ issue - but if you've ever seen anything like this, please let me
>> know.
>>
>> BJ
>>
>>
>> Full stack trace is:
>>
>> main 2006-12-11 13:01:24,137 ERROR [JMSFlow:init] Failed to
>> initialize JMSFlow
>> javax.jms.JMSException: Could not connect to broker URL: failover://
>> (tcp://localhost:61616. Reason: java.io.IOException: Invalid
>> location: failover://(tcp://localhost:61616
>>          at org.apache.activemq.util.JMSExceptionSupport.create
>> (JMSExceptionSupport.java:32)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnectio 
>> n
>> (ActiveMQConnectionFactory.java:252)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnectio 
>> n
>> (ActiveMQConnectionFactory.java:211)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createConnection
>> (ActiveMQConnectionFactory.java:158)
>>          at org.apache.servicemix.jbi.nmr.flow.jms.JMSFlow.init
>> (JMSFlow.java:245)
>>          at org.apache.servicemix.jbi.nmr.DefaultBroker.init
>> (DefaultBroker.java:135)
>>          at org.apache.servicemix.jbi.container.JBIContainer.init
>> (JBIContainer.java:556)
>>          at
>> org.apache.servicemix.jbi.container.SpringJBIContainer.afterPropertie 
>> sSe
>> t(SpringJBIContainer.java:55)
>>          at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBean 
>> Fac
>> tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:957)
>>          at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBean 
>> Fac
>> tory.initializeBean(AbstractAutowireCapableBeanFactory.java:924)
>>          at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBean 
>> Fac
>> tory.createBean(AbstractAutowireCapableBeanFactory.java:415)
>>          at
>> org.springframework.beans.factory.support.AbstractBeanFactory
>> $1.getObject(AbstractBeanFactory.java:242)
>>          at
>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistr 
>> y.g
>> etSingleton(DefaultSingletonBeanRegistry.java:141)
>>          at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
>> (AbstractBeanFactory.java:239)
>>          at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
>> (AbstractBeanFactory.java:155)
>>          at
>> org.springframework.beans.factory.support.DefaultListableBeanFactory. 
>> pre
>> InstantiateSingletons(DefaultListableBeanFactory.java:303)
>>          at
>> org.springframework.context.support.AbstractApplicationContext.refres 
>> h
>> (AbstractApplicationContext.java:348)
>>          at
>> org.springframework.web.context.support.AbstractRefreshableWebApplica 
>> tio
>> nContext.refresh(AbstractRefreshableWebApplicationContext.java:156)
>>          at
>> org.springframework.web.context.ContextLoader.createWebApplicationCon 
>> tex
>> t(ContextLoader.java:246)
>>          at
>> org.springframework.web.context.ContextLoader.initWebApplicationConte 
>> xt(
>> ContextLoader.java:184)
>>          at
>> org.springframework.web.context.ContextLoaderListener.contextInitiali 
>> zed
>> (ContextLoaderListener.java:49)
>>          at org.apache.catalina.core.StandardContext.listenerStart
>> (StandardContext.java:3763)
>>          at org.apache.catalina.core.StandardContext.start
>> (StandardContext.java:4211)
>>          at org.apache.catalina.core.ContainerBase.addChildInternal
>> (ContainerBase.java:759)
>>          at org.apache.catalina.core.ContainerBase.addChild
>> (ContainerBase.java:739)
>>          at org.apache.catalina.core.StandardHost.addChild
>> (StandardHost.java:524)
>>          at org.apache.catalina.startup.HostConfig.deployDirectory
>> (HostConfig.java:904)
>>          at org.apache.catalina.startup.HostConfig.deployDirectories
>> (HostConfig.java:867)
>>          at org.apache.catalina.startup.HostConfig.deployApps
>> (HostConfig.java:474)
>>          at org.apache.catalina.startup.HostConfig.start
>> (HostConfig.java:1122)
>>          at org.apache.catalina.startup.HostConfig.lifecycleEvent
>> (HostConfig.java:310)
>>          at
>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent
>> (LifecycleSupport.java:119)
>>          at org.apache.catalina.core.ContainerBase.start
>> (ContainerBase.java:1021)
>>          at org.apache.catalina.core.StandardHost.start
>> (StandardHost.java:718)
>>          at org.apache.catalina.core.ContainerBase.start
>> (ContainerBase.java:1013)
>>          at org.apache.catalina.core.StandardEngine.start
>> (StandardEngine.java:442)
>>          at org.apache.catalina.core.StandardService.start
>> (StandardService.java:450)
>>          at org.apache.catalina.core.StandardServer.start
>> (StandardServer.java:709)
>>          at org.apache.catalina.startup.Catalina.start(Catalina.java:
>> 551)
>>          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native  
>> Method)
>>          at sun.reflect.NativeMethodAccessorImpl.invoke
>> (NativeMethodAccessorImpl.java:39)
>>          at sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (DelegatingMethodAccessorImpl.java:25)
>>          at java.lang.reflect.Method.invoke(Method.java:585)
>>          at org.apache.catalina.startup.Bootstrap.start
>> (Bootstrap.java:294)
>>          at org.apache.catalina.startup.Bootstrap.main 
>> (Bootstrap.java:
>> 432)
>> Caused by: java.io.IOException: Invalid location: failover://(tcp://
>> localhost:61616
>>          at
>> org.apache.activemq.transport.failover.FailoverTransportFactory.doCon 
>> nec
>> t(FailoverTransportFactory.java:42)
>>          at org.apache.activemq.transport.TransportFactory.doConnect
>> (TransportFactory.java:42)
>>          at org.apache.activemq.transport.TransportFactory.connect
>> (TransportFactory.java:76)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnectio 
>> n
>> (ActiveMQConnectionFactory.java:223)
>>          ... 43 more
>>
>>
>>
>> On Dec 11, 2006, at 12:57 PM, Guillaume Nodet wrote:
>>
>> > Could you set the org.apache.activemq log level to DEBUG
>> > in ServiceMix and check if there is an attempt to reconnect ?
>> >
>> > On 12/11/06, William Blackburn <wj...@mac.com> wrote:
>> >> I was reading in the Amq docs about clients that can survive short
>> >> broker outages by connecting using failover transport, even though
>> >> there was really only one broker.
>> >>
>> >> I thought this behavior was ideal for my servicemix app using jms
>> >> flow, so I set up an external broker, ran it, and setup  
>> servicemix to
>> >> use:
>> >>
>> >>         jms?jmsURL=failover:tcp://localhost:61616
>> >>
>> >> I also tried:
>> >>
>> >>         jms?jmsURL=failover://(tcp://localhost:61616)
>> >>
>> >> In each case, everything worked fine after the initial startup,  
>> but
>> >> after restarting the broker, servicemix did not recover and had  
>> to be
>> >> restarted too. Is this behavior not supported, or have I missed
>> >> something in configuration?
>> >>
>> >> Thanks,
>> >>
>> >> BJ
>> >>
>> >
>> >
>> > --
>> > Cheers,
>> > Guillaume Nodet
>>
>>
>
>
> -- 
> Cheers,
> Guillaume Nodet


Re: JMS flow, jmsUrl and ActiveMQ failover transport

Posted by William Blackburn <wj...@mac.com>.
Still problems with failover and amq. I continued with my testing  
using explicit declaration of flows in <sm:flows> element -- this  
works around the propblem with parsing the flowName attribute.

The jmsflow starts up fine with a failover urls like:

	failover://(tcp://localhost:61617,tcp://localhost:61618)? 
randomize=false

I can send a receive exchanges fine at this point.

I then kill the master broker - I can see from the logs that the  
slave is opening its transports and ready to receive messages, but at  
this point my servicemix app stops working.

Messages are introduced into my app in two ways, either by a quartz  
timer using 'QuartzComponent' or via a 'JMSInUsingJCA' binding. in  
the jms case, the broker factory is configured with the failover uri  
above as well.

No matter which, any attempt to send an exchange results in:

javax.jms.JMSException: Cannot send from a session that had not been  
registered: ID:

I can see in the log when I killed the master, but I do not see any  
further attempts to reconnect, the slave is never connected to.

http-localhost%2F127.0.0.1-8083-Processor25 2006-12-11 16:39:42,017  
DEBUG [FailoverTransport:stop] Stopped.
ActiveMQ Transport: tcp://localhost/127.0.0.1:61618 2006-12-11  
16:39:42,054 DEBUG [FailoverTransport:handleTransportFailure]  
Transport failed, starting up reconnect task
java.net.SocketException: Socket closed
         at java.net.SocketInputStream.socketRead0(Native Method)
         at java.net.SocketInputStream.read(SocketInputStream.java:129)
         at  
org.apache.activemq.transport.tcp.TcpBufferedInputStream.fill 
(TcpBufferedInputStream.java:48)
         at  
org.apache.activemq.transport.tcp.TcpBufferedInputStream.read 
(TcpBufferedInputStream.java:55)
         at java.io.DataInputStream.readInt(DataInputStream.java:353)
         at org.apache.activemq.openwire.OpenWireFormat.unmarshal 
(OpenWireFormat.java:274)
         at org.apache.activemq.transport.tcp.TcpTransport.run 
(TcpTransport.java:126)
         at java.lang.Thread.run(Thread.java:613)



JMSInUsingJCA:
        <sm:activationSpec componentName="jmsRequestInBinding"  
service="cm:jms-request-in-binding"
                            destinationService="cm:request-processor">
                 <sm:component>
                     <bean  
class="org.apache.servicemix.components.jms.JmsInUsingJCABinding">
                         <property name="jcaContainer" ref="jencks"/>
                         <property name="activationSpec">
                             <bean  
class="org.apache.activemq.ra.ActiveMQActivationSpec">
                                 <!-- The variable  
(receiver.in.topic) is replaced at runtime using the
                                      PropertyPlaceholderConfigurer  
defined in this config file  -->
                                 <property name="destination" value="$ 
{smix.request.in.topic}"/>
                                 <property name="destinationType"  
value="javax.jms.Topic"/>
                             </bean>
                         </property>
                     </bean>
                 </sm:component>
             </sm:activationSpec>


Jencks:
     <bean id="jencks" class="org.jencks.JCAContainer" singleton="true">
         <!-- lets use the default configuration of work manager and  
transaction manager-->
         <property name="bootstrapContext">
             <bean
                 class="org.jencks.factory.BootstrapContextFactoryBean">
                 <property name="threadPoolSize" value="25" />
             </bean>
         </property>
         <!-- the JCA Resource Adapter -->
         <property name="resourceAdapter">
             <bean id="activeMQResourceAdapter"
                 class="org.apache.activemq.ra.ActiveMQResourceAdapter"
                 singleton="true">
                 <property name="serverUrl"
                     value="${smix.amq.broker.uri}" />
             </bean>
         </property>
     </bean>


At this point, I'm in over my head - any advice is most welcome,

Thanks,

BJ

On Dec 11, 2006, at 2:42 PM, Guillaume Nodet wrote:

> I think the problem may actually come from servicemix,
> which does not correctly parse the url and split it
> without taking care of parenthesis.
> You may want to hack the o.a.s.jbi.nmr.DefaultBroker#init
> method and provide a patch for that ?
>
> On 12/11/06, William Blackburn <wj...@mac.com> wrote:
>> I can't explain why - but now it seems to be working as expected -
>> and the log confirms it. Now I have a new issue that came up while
>> working on this one - specifically, the url:
>>
>>         jms?jmsURL=failover://(tcp://localhost:61616)
>>
>> Behaves as expected, but if I attempt to include another broker,  
>> as in:
>>
>>          jms?jmsURL=failover://(tcp://localhost:61616, tcp://
>> localhost:61617)?randomize=false
>>
>> JMS Flow fails to initialize with:
>>
>> Failed to initialize JMSFlow
>> javax.jms.JMSException: Could not connect to broker URL: failover://
>> (tcp://localhost:61616. Reason: java.io.IOException: Invalid
>> location: failover://(tcp://localhost:61616
>>
>> If the message is any indication, the url appears to be being split
>> at the comma - I've tried several forms of the url, the amq docs seem
>> to alternate between failover: and failover:// -- but always the same
>> result. The upshot is, I can't seem to get servicemix working with
>> master/slave brokers. I'm sorry - it occurs to me this may well be an
>> AMQ issue - but if you've ever seen anything like this, please let me
>> know.
>>
>> BJ
>>
>>
>> Full stack trace is:
>>
>> main 2006-12-11 13:01:24,137 ERROR [JMSFlow:init] Failed to
>> initialize JMSFlow
>> javax.jms.JMSException: Could not connect to broker URL: failover://
>> (tcp://localhost:61616. Reason: java.io.IOException: Invalid
>> location: failover://(tcp://localhost:61616
>>          at org.apache.activemq.util.JMSExceptionSupport.create
>> (JMSExceptionSupport.java:32)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnectio 
>> n
>> (ActiveMQConnectionFactory.java:252)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnectio 
>> n
>> (ActiveMQConnectionFactory.java:211)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createConnection
>> (ActiveMQConnectionFactory.java:158)
>>          at org.apache.servicemix.jbi.nmr.flow.jms.JMSFlow.init
>> (JMSFlow.java:245)
>>          at org.apache.servicemix.jbi.nmr.DefaultBroker.init
>> (DefaultBroker.java:135)
>>          at org.apache.servicemix.jbi.container.JBIContainer.init
>> (JBIContainer.java:556)
>>          at
>> org.apache.servicemix.jbi.container.SpringJBIContainer.afterPropertie 
>> sSe
>> t(SpringJBIContainer.java:55)
>>          at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBean 
>> Fac
>> tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:957)
>>          at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBean 
>> Fac
>> tory.initializeBean(AbstractAutowireCapableBeanFactory.java:924)
>>          at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBean 
>> Fac
>> tory.createBean(AbstractAutowireCapableBeanFactory.java:415)
>>          at
>> org.springframework.beans.factory.support.AbstractBeanFactory
>> $1.getObject(AbstractBeanFactory.java:242)
>>          at
>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistr 
>> y.g
>> etSingleton(DefaultSingletonBeanRegistry.java:141)
>>          at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
>> (AbstractBeanFactory.java:239)
>>          at
>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
>> (AbstractBeanFactory.java:155)
>>          at
>> org.springframework.beans.factory.support.DefaultListableBeanFactory. 
>> pre
>> InstantiateSingletons(DefaultListableBeanFactory.java:303)
>>          at
>> org.springframework.context.support.AbstractApplicationContext.refres 
>> h
>> (AbstractApplicationContext.java:348)
>>          at
>> org.springframework.web.context.support.AbstractRefreshableWebApplica 
>> tio
>> nContext.refresh(AbstractRefreshableWebApplicationContext.java:156)
>>          at
>> org.springframework.web.context.ContextLoader.createWebApplicationCon 
>> tex
>> t(ContextLoader.java:246)
>>          at
>> org.springframework.web.context.ContextLoader.initWebApplicationConte 
>> xt(
>> ContextLoader.java:184)
>>          at
>> org.springframework.web.context.ContextLoaderListener.contextInitiali 
>> zed
>> (ContextLoaderListener.java:49)
>>          at org.apache.catalina.core.StandardContext.listenerStart
>> (StandardContext.java:3763)
>>          at org.apache.catalina.core.StandardContext.start
>> (StandardContext.java:4211)
>>          at org.apache.catalina.core.ContainerBase.addChildInternal
>> (ContainerBase.java:759)
>>          at org.apache.catalina.core.ContainerBase.addChild
>> (ContainerBase.java:739)
>>          at org.apache.catalina.core.StandardHost.addChild
>> (StandardHost.java:524)
>>          at org.apache.catalina.startup.HostConfig.deployDirectory
>> (HostConfig.java:904)
>>          at org.apache.catalina.startup.HostConfig.deployDirectories
>> (HostConfig.java:867)
>>          at org.apache.catalina.startup.HostConfig.deployApps
>> (HostConfig.java:474)
>>          at org.apache.catalina.startup.HostConfig.start
>> (HostConfig.java:1122)
>>          at org.apache.catalina.startup.HostConfig.lifecycleEvent
>> (HostConfig.java:310)
>>          at
>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent
>> (LifecycleSupport.java:119)
>>          at org.apache.catalina.core.ContainerBase.start
>> (ContainerBase.java:1021)
>>          at org.apache.catalina.core.StandardHost.start
>> (StandardHost.java:718)
>>          at org.apache.catalina.core.ContainerBase.start
>> (ContainerBase.java:1013)
>>          at org.apache.catalina.core.StandardEngine.start
>> (StandardEngine.java:442)
>>          at org.apache.catalina.core.StandardService.start
>> (StandardService.java:450)
>>          at org.apache.catalina.core.StandardServer.start
>> (StandardServer.java:709)
>>          at org.apache.catalina.startup.Catalina.start(Catalina.java:
>> 551)
>>          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native  
>> Method)
>>          at sun.reflect.NativeMethodAccessorImpl.invoke
>> (NativeMethodAccessorImpl.java:39)
>>          at sun.reflect.DelegatingMethodAccessorImpl.invoke
>> (DelegatingMethodAccessorImpl.java:25)
>>          at java.lang.reflect.Method.invoke(Method.java:585)
>>          at org.apache.catalina.startup.Bootstrap.start
>> (Bootstrap.java:294)
>>          at org.apache.catalina.startup.Bootstrap.main 
>> (Bootstrap.java:
>> 432)
>> Caused by: java.io.IOException: Invalid location: failover://(tcp://
>> localhost:61616
>>          at
>> org.apache.activemq.transport.failover.FailoverTransportFactory.doCon 
>> nec
>> t(FailoverTransportFactory.java:42)
>>          at org.apache.activemq.transport.TransportFactory.doConnect
>> (TransportFactory.java:42)
>>          at org.apache.activemq.transport.TransportFactory.connect
>> (TransportFactory.java:76)
>>          at
>> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnectio 
>> n
>> (ActiveMQConnectionFactory.java:223)
>>          ... 43 more
>>
>>
>>
>> On Dec 11, 2006, at 12:57 PM, Guillaume Nodet wrote:
>>
>> > Could you set the org.apache.activemq log level to DEBUG
>> > in ServiceMix and check if there is an attempt to reconnect ?
>> >
>> > On 12/11/06, William Blackburn <wj...@mac.com> wrote:
>> >> I was reading in the Amq docs about clients that can survive short
>> >> broker outages by connecting using failover transport, even though
>> >> there was really only one broker.
>> >>
>> >> I thought this behavior was ideal for my servicemix app using jms
>> >> flow, so I set up an external broker, ran it, and setup  
>> servicemix to
>> >> use:
>> >>
>> >>         jms?jmsURL=failover:tcp://localhost:61616
>> >>
>> >> I also tried:
>> >>
>> >>         jms?jmsURL=failover://(tcp://localhost:61616)
>> >>
>> >> In each case, everything worked fine after the initial startup,  
>> but
>> >> after restarting the broker, servicemix did not recover and had  
>> to be
>> >> restarted too. Is this behavior not supported, or have I missed
>> >> something in configuration?
>> >>
>> >> Thanks,
>> >>
>> >> BJ
>> >>
>> >
>> >
>> > --
>> > Cheers,
>> > Guillaume Nodet
>>
>>
>
>
> -- 
> Cheers,
> Guillaume Nodet


Re: JMS flow, jmsUrl and ActiveMQ failover transport

Posted by Guillaume Nodet <gn...@gmail.com>.
I think the problem may actually come from servicemix,
which does not correctly parse the url and split it
without taking care of parenthesis.
You may want to hack the o.a.s.jbi.nmr.DefaultBroker#init
method and provide a patch for that ?

On 12/11/06, William Blackburn <wj...@mac.com> wrote:
> I can't explain why - but now it seems to be working as expected -
> and the log confirms it. Now I have a new issue that came up while
> working on this one - specifically, the url:
>
>         jms?jmsURL=failover://(tcp://localhost:61616)
>
> Behaves as expected, but if I attempt to include another broker, as in:
>
>          jms?jmsURL=failover://(tcp://localhost:61616, tcp://
> localhost:61617)?randomize=false
>
> JMS Flow fails to initialize with:
>
> Failed to initialize JMSFlow
> javax.jms.JMSException: Could not connect to broker URL: failover://
> (tcp://localhost:61616. Reason: java.io.IOException: Invalid
> location: failover://(tcp://localhost:61616
>
> If the message is any indication, the url appears to be being split
> at the comma - I've tried several forms of the url, the amq docs seem
> to alternate between failover: and failover:// -- but always the same
> result. The upshot is, I can't seem to get servicemix working with
> master/slave brokers. I'm sorry - it occurs to me this may well be an
> AMQ issue - but if you've ever seen anything like this, please let me
> know.
>
> BJ
>
>
> Full stack trace is:
>
> main 2006-12-11 13:01:24,137 ERROR [JMSFlow:init] Failed to
> initialize JMSFlow
> javax.jms.JMSException: Could not connect to broker URL: failover://
> (tcp://localhost:61616. Reason: java.io.IOException: Invalid
> location: failover://(tcp://localhost:61616
>          at org.apache.activemq.util.JMSExceptionSupport.create
> (JMSExceptionSupport.java:32)
>          at
> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection
> (ActiveMQConnectionFactory.java:252)
>          at
> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection
> (ActiveMQConnectionFactory.java:211)
>          at
> org.apache.activemq.ActiveMQConnectionFactory.createConnection
> (ActiveMQConnectionFactory.java:158)
>          at org.apache.servicemix.jbi.nmr.flow.jms.JMSFlow.init
> (JMSFlow.java:245)
>          at org.apache.servicemix.jbi.nmr.DefaultBroker.init
> (DefaultBroker.java:135)
>          at org.apache.servicemix.jbi.container.JBIContainer.init
> (JBIContainer.java:556)
>          at
> org.apache.servicemix.jbi.container.SpringJBIContainer.afterPropertiesSe
> t(SpringJBIContainer.java:55)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:957)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.initializeBean(AbstractAutowireCapableBeanFactory.java:924)
>          at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.createBean(AbstractAutowireCapableBeanFactory.java:415)
>          at
> org.springframework.beans.factory.support.AbstractBeanFactory
> $1.getObject(AbstractBeanFactory.java:242)
>          at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.g
> etSingleton(DefaultSingletonBeanRegistry.java:141)
>          at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> (AbstractBeanFactory.java:239)
>          at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean
> (AbstractBeanFactory.java:155)
>          at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.pre
> InstantiateSingletons(DefaultListableBeanFactory.java:303)
>          at
> org.springframework.context.support.AbstractApplicationContext.refresh
> (AbstractApplicationContext.java:348)
>          at
> org.springframework.web.context.support.AbstractRefreshableWebApplicatio
> nContext.refresh(AbstractRefreshableWebApplicationContext.java:156)
>          at
> org.springframework.web.context.ContextLoader.createWebApplicationContex
> t(ContextLoader.java:246)
>          at
> org.springframework.web.context.ContextLoader.initWebApplicationContext(
> ContextLoader.java:184)
>          at
> org.springframework.web.context.ContextLoaderListener.contextInitialized
> (ContextLoaderListener.java:49)
>          at org.apache.catalina.core.StandardContext.listenerStart
> (StandardContext.java:3763)
>          at org.apache.catalina.core.StandardContext.start
> (StandardContext.java:4211)
>          at org.apache.catalina.core.ContainerBase.addChildInternal
> (ContainerBase.java:759)
>          at org.apache.catalina.core.ContainerBase.addChild
> (ContainerBase.java:739)
>          at org.apache.catalina.core.StandardHost.addChild
> (StandardHost.java:524)
>          at org.apache.catalina.startup.HostConfig.deployDirectory
> (HostConfig.java:904)
>          at org.apache.catalina.startup.HostConfig.deployDirectories
> (HostConfig.java:867)
>          at org.apache.catalina.startup.HostConfig.deployApps
> (HostConfig.java:474)
>          at org.apache.catalina.startup.HostConfig.start
> (HostConfig.java:1122)
>          at org.apache.catalina.startup.HostConfig.lifecycleEvent
> (HostConfig.java:310)
>          at
> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent
> (LifecycleSupport.java:119)
>          at org.apache.catalina.core.ContainerBase.start
> (ContainerBase.java:1021)
>          at org.apache.catalina.core.StandardHost.start
> (StandardHost.java:718)
>          at org.apache.catalina.core.ContainerBase.start
> (ContainerBase.java:1013)
>          at org.apache.catalina.core.StandardEngine.start
> (StandardEngine.java:442)
>          at org.apache.catalina.core.StandardService.start
> (StandardService.java:450)
>          at org.apache.catalina.core.StandardServer.start
> (StandardServer.java:709)
>          at org.apache.catalina.startup.Catalina.start(Catalina.java:
> 551)
>          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>          at sun.reflect.NativeMethodAccessorImpl.invoke
> (NativeMethodAccessorImpl.java:39)
>          at sun.reflect.DelegatingMethodAccessorImpl.invoke
> (DelegatingMethodAccessorImpl.java:25)
>          at java.lang.reflect.Method.invoke(Method.java:585)
>          at org.apache.catalina.startup.Bootstrap.start
> (Bootstrap.java:294)
>          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:
> 432)
> Caused by: java.io.IOException: Invalid location: failover://(tcp://
> localhost:61616
>          at
> org.apache.activemq.transport.failover.FailoverTransportFactory.doConnec
> t(FailoverTransportFactory.java:42)
>          at org.apache.activemq.transport.TransportFactory.doConnect
> (TransportFactory.java:42)
>          at org.apache.activemq.transport.TransportFactory.connect
> (TransportFactory.java:76)
>          at
> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection
> (ActiveMQConnectionFactory.java:223)
>          ... 43 more
>
>
>
> On Dec 11, 2006, at 12:57 PM, Guillaume Nodet wrote:
>
> > Could you set the org.apache.activemq log level to DEBUG
> > in ServiceMix and check if there is an attempt to reconnect ?
> >
> > On 12/11/06, William Blackburn <wj...@mac.com> wrote:
> >> I was reading in the Amq docs about clients that can survive short
> >> broker outages by connecting using failover transport, even though
> >> there was really only one broker.
> >>
> >> I thought this behavior was ideal for my servicemix app using jms
> >> flow, so I set up an external broker, ran it, and setup servicemix to
> >> use:
> >>
> >>         jms?jmsURL=failover:tcp://localhost:61616
> >>
> >> I also tried:
> >>
> >>         jms?jmsURL=failover://(tcp://localhost:61616)
> >>
> >> In each case, everything worked fine after the initial startup, but
> >> after restarting the broker, servicemix did not recover and had to be
> >> restarted too. Is this behavior not supported, or have I missed
> >> something in configuration?
> >>
> >> Thanks,
> >>
> >> BJ
> >>
> >
> >
> > --
> > Cheers,
> > Guillaume Nodet
>
>


-- 
Cheers,
Guillaume Nodet

Re: JMS flow, jmsUrl and ActiveMQ failover transport

Posted by William Blackburn <wj...@mac.com>.
I can't explain why - but now it seems to be working as expected -  
and the log confirms it. Now I have a new issue that came up while  
working on this one - specifically, the url:

	jms?jmsURL=failover://(tcp://localhost:61616)

Behaves as expected, but if I attempt to include another broker, as in:

         jms?jmsURL=failover://(tcp://localhost:61616, tcp:// 
localhost:61617)?randomize=false

JMS Flow fails to initialize with:

Failed to initialize JMSFlow
javax.jms.JMSException: Could not connect to broker URL: failover:// 
(tcp://localhost:61616. Reason: java.io.IOException: Invalid  
location: failover://(tcp://localhost:61616

If the message is any indication, the url appears to be being split  
at the comma - I've tried several forms of the url, the amq docs seem  
to alternate between failover: and failover:// -- but always the same  
result. The upshot is, I can't seem to get servicemix working with  
master/slave brokers. I'm sorry - it occurs to me this may well be an  
AMQ issue - but if you've ever seen anything like this, please let me  
know.

BJ


Full stack trace is:

main 2006-12-11 13:01:24,137 ERROR [JMSFlow:init] Failed to  
initialize JMSFlow
javax.jms.JMSException: Could not connect to broker URL: failover:// 
(tcp://localhost:61616. Reason: java.io.IOException: Invalid  
location: failover://(tcp://localhost:61616
         at org.apache.activemq.util.JMSExceptionSupport.create 
(JMSExceptionSupport.java:32)
         at  
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection 
(ActiveMQConnectionFactory.java:252)
         at  
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection 
(ActiveMQConnectionFactory.java:211)
         at  
org.apache.activemq.ActiveMQConnectionFactory.createConnection 
(ActiveMQConnectionFactory.java:158)
         at org.apache.servicemix.jbi.nmr.flow.jms.JMSFlow.init 
(JMSFlow.java:245)
         at org.apache.servicemix.jbi.nmr.DefaultBroker.init 
(DefaultBroker.java:135)
         at org.apache.servicemix.jbi.container.JBIContainer.init 
(JBIContainer.java:556)
         at  
org.apache.servicemix.jbi.container.SpringJBIContainer.afterPropertiesSe 
t(SpringJBIContainer.java:55)
         at  
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac 
tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:957)
         at  
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac 
tory.initializeBean(AbstractAutowireCapableBeanFactory.java:924)
         at  
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac 
tory.createBean(AbstractAutowireCapableBeanFactory.java:415)
         at  
org.springframework.beans.factory.support.AbstractBeanFactory 
$1.getObject(AbstractBeanFactory.java:242)
         at  
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.g 
etSingleton(DefaultSingletonBeanRegistry.java:141)
         at  
org.springframework.beans.factory.support.AbstractBeanFactory.getBean 
(AbstractBeanFactory.java:239)
         at  
org.springframework.beans.factory.support.AbstractBeanFactory.getBean 
(AbstractBeanFactory.java:155)
         at  
org.springframework.beans.factory.support.DefaultListableBeanFactory.pre 
InstantiateSingletons(DefaultListableBeanFactory.java:303)
         at  
org.springframework.context.support.AbstractApplicationContext.refresh 
(AbstractApplicationContext.java:348)
         at  
org.springframework.web.context.support.AbstractRefreshableWebApplicatio 
nContext.refresh(AbstractRefreshableWebApplicationContext.java:156)
         at  
org.springframework.web.context.ContextLoader.createWebApplicationContex 
t(ContextLoader.java:246)
         at  
org.springframework.web.context.ContextLoader.initWebApplicationContext( 
ContextLoader.java:184)
         at  
org.springframework.web.context.ContextLoaderListener.contextInitialized 
(ContextLoaderListener.java:49)
         at org.apache.catalina.core.StandardContext.listenerStart 
(StandardContext.java:3763)
         at org.apache.catalina.core.StandardContext.start 
(StandardContext.java:4211)
         at org.apache.catalina.core.ContainerBase.addChildInternal 
(ContainerBase.java:759)
         at org.apache.catalina.core.ContainerBase.addChild 
(ContainerBase.java:739)
         at org.apache.catalina.core.StandardHost.addChild 
(StandardHost.java:524)
         at org.apache.catalina.startup.HostConfig.deployDirectory 
(HostConfig.java:904)
         at org.apache.catalina.startup.HostConfig.deployDirectories 
(HostConfig.java:867)
         at org.apache.catalina.startup.HostConfig.deployApps 
(HostConfig.java:474)
         at org.apache.catalina.startup.HostConfig.start 
(HostConfig.java:1122)
         at org.apache.catalina.startup.HostConfig.lifecycleEvent 
(HostConfig.java:310)
         at  
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent 
(LifecycleSupport.java:119)
         at org.apache.catalina.core.ContainerBase.start 
(ContainerBase.java:1021)
         at org.apache.catalina.core.StandardHost.start 
(StandardHost.java:718)
         at org.apache.catalina.core.ContainerBase.start 
(ContainerBase.java:1013)
         at org.apache.catalina.core.StandardEngine.start 
(StandardEngine.java:442)
         at org.apache.catalina.core.StandardService.start 
(StandardService.java:450)
         at org.apache.catalina.core.StandardServer.start 
(StandardServer.java:709)
         at org.apache.catalina.startup.Catalina.start(Catalina.java: 
551)
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
         at sun.reflect.NativeMethodAccessorImpl.invoke 
(NativeMethodAccessorImpl.java:39)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke 
(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:585)
         at org.apache.catalina.startup.Bootstrap.start 
(Bootstrap.java:294)
         at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java: 
432)
Caused by: java.io.IOException: Invalid location: failover://(tcp:// 
localhost:61616
         at  
org.apache.activemq.transport.failover.FailoverTransportFactory.doConnec 
t(FailoverTransportFactory.java:42)
         at org.apache.activemq.transport.TransportFactory.doConnect 
(TransportFactory.java:42)
         at org.apache.activemq.transport.TransportFactory.connect 
(TransportFactory.java:76)
         at  
org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection 
(ActiveMQConnectionFactory.java:223)
         ... 43 more



On Dec 11, 2006, at 12:57 PM, Guillaume Nodet wrote:

> Could you set the org.apache.activemq log level to DEBUG
> in ServiceMix and check if there is an attempt to reconnect ?
>
> On 12/11/06, William Blackburn <wj...@mac.com> wrote:
>> I was reading in the Amq docs about clients that can survive short
>> broker outages by connecting using failover transport, even though
>> there was really only one broker.
>>
>> I thought this behavior was ideal for my servicemix app using jms
>> flow, so I set up an external broker, ran it, and setup servicemix to
>> use:
>>
>>         jms?jmsURL=failover:tcp://localhost:61616
>>
>> I also tried:
>>
>>         jms?jmsURL=failover://(tcp://localhost:61616)
>>
>> In each case, everything worked fine after the initial startup, but
>> after restarting the broker, servicemix did not recover and had to be
>> restarted too. Is this behavior not supported, or have I missed
>> something in configuration?
>>
>> Thanks,
>>
>> BJ
>>
>
>
> -- 
> Cheers,
> Guillaume Nodet