Hi ,
I also have two web apps running in Tomcat 5.5.20.Active mq
version being used is 4.0.2.
Our application uses an embedded broker, This broker is started by a
servlet context Listener, which is specified in web.xml of one of the
web apps. Both the web apps connect to this broker and exchange
messages. I am using tcp mode of transport tcp://localhost:"+portNum+ ,
for the broker.
Both the web apps connect to the broker using the url
failover:tcp://localhost:"+this.portNum
Make sure that the broker is started by a servlet context listener ,
which is part of the web app , which is started first in order. For
example , in my case I have two webapps servlets and users,
Servlets is started before users, so there by the broker is a part of
servlets web app.
Hope this helps.
Thanks,
Suchitha.
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: Monday, March 26, 2007 8:31 PM
To: [email protected]
Subject: Re: Problems with VM transport
To follow up on my last mail: I can perhaps avoid the problem by using
distinct brokernames for each webapp; but that would create distinct
embedded brokers perhaps? I need both the webapps to share the same
broker so they receive messages published by each other.
Regards,
/U
-------------- Original message ----------------------
From: [EMAIL PROTECTED]
>
> Hi -
>
> I am using the embedded broker in a servlet container. Each webapp
> in the servlet container instantiates a connection factory that refers
> to broker URL of
>
> vm://localhost?broker.persistent=false
>
> as follows:
>
> (Servlet Container
> (WebApp1
> ConnectionFactory ->
> vm://localhost?broker.persistent=false
> )
> )
>
> and this works fine. But as soon as I instantiate another webapp
> (WebApp2) that also uses embedded broker as follows:
>
> (Servlet Container
> (WebApp1
> ConnectionFactory ->
> vm://localhost?broker.persistent=false
> )
> (WebApp2
> ConnectionFactory ->
> vm://localhost?broker.persistent=false
> )
> )
>
> the second webapp fails with the JMSException given below:
>
> javax.jms.JMSException: Could not create Transport. Reason:
> javax.management.InstanceAlreadyExistsException:
> org.apache.activemq:BrokerName=localhost,Type=Broker
> at
>
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.
java:33)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createTransport(ActiveMQ
> Connection
> Factory.java:229)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection
> (ActiveMQC
> onnectionFactory.java:242)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createActiveMQConnection
> (ActiveMQC
> onnectionFactory.java:211)
> at
> org.apache.activemq.ActiveMQConnectionFactory.createConnection(ActiveM
> QConnectio
> nFactory.java:158)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.crea
> teConnecti
> on(AbstractMessageListenerContainer.java:989)
> at
> org.springframework.jms.listener.AbstractMessageListenerContainer.refr
> eshSharedC
> onnection(AbstractMessageListenerContainer.java:455)
> //...
>
>
> I thought I could (tentatively) work around this problem by disabling
> Jmx, so I switched the broker URL (for both webapps) to
>
> vm://localhost?broker.persistent=false&useJmx=false
>
> This did not help. Is there fundamentally a problem with multiple
> instances of ActiveMQConnectionFactory referring to the same broker
> URL (which is likely to to be the case when using embedded broker)?
>
> Thanks,
>
> /U
>
>
> -------------- Original message ----------------------
> From: Adrian Co <[EMAIL PROTECTED]>
> > [EMAIL PROTECTED] wrote:
> > > Adrian,
> > >
> > > Thanks for the note.
> > >
> > > > > Startup: vm://localhost
> > > > > During runtime (after an event):
> > > > > failover(vm://localhost,tcp://remote:61616)
> > > > >
> > > > > Would modifying the broker URL of the connection
factory cause
> > problems?
> > > > >
> > > > Personally, I'm not sure if you can I haven't tried it,
> > > but I
> don't
> > > > think it makes sense to make a vm transport failover.
> > > The
> assumption
> > is
> > > > that you have a broker running in the same vm as your
jms client.
> If
> > the
> > > > broker crashes, it means your client *should* have
> > > crashed also
> and
> > it
> > > > can't failover over to a remote broker anymore.
> > >
> > > Makes sense - now I see why someone else referred to me as
'retard' :-).
> > > I need to have the client listen to two different brokers (the
> > > embedded and the external) at the same time (so that the client
> > > receives messages
> > published
> > > by both the brokers and the messages published by the client are
> > > sent to
> both
> > the
> > > brokers). Is this the correct URI to network the embedded broker
> > > with an
> > external broker?
> > >
> > > static:(vm://localhost,tcp://remotehost:61616)
> > >
> > Hum. AFAIK, static just tells the client to choose one url to
> > connect to. I don't think you can listen to two or more brokers
> > using a single connection. You might want to network the brokers
> > together if thats possible. If someone can let me know if its
> > possible to listen to more than two brokers using a single jms
> > connection, I'd appreciate it also. :-)
> > >
> > > Could you also clarify an additional question? If I instantiate
> > > multiple connection factories in the same VM pointing to the
> > > embedded broker would all the cconnection factories in the VM
> > > share the same broker (as opposed to attempting to "instantiating
> > > a new embedded broker" if such a thing were possible)?
> > >
> > If they are in the same jvm, and there's already an embedded broker,
> > it will be reused.
> > > Thanks again,
> > >
> > > /U
> > >
> > >
> >
>