You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by petera <pe...@egsgroup.com> on 2006/10/17 13:17:23 UTC
Re: activeMQ embedded broker in separate war
I am having the same problem using the embedded broker in Tomcat 5.5 in two
separate web apps.
I have the activemq.xml (SEE BELOW) called in my first web app as follows in
the context.xml :
<Resource
name="jms/ConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="vm://localhost?brokerConfig=xbean:activemq.xml"
brokerName="LocalActiveMQBroker"
useEmbeddedBroker="true"/>
Yet when I try to connect in the second web app using:
<Resource
name="jms/ConnectionFactory"
auth="Container"
type="org.apache.activemq.ActiveMQConnectionFactory"
description="JMS Connection Factory"
factory="org.apache.activemq.jndi.JNDIReferenceFactory"
brokerURL="tcp://localhost:61616"
brokerName="LocalActiveMQBroker"
useEmbeddedBroker="true"/>
I get the following error message:
Could not connect to broker URL: tcp://localhost:61616. Reason:
java.net.ConnectException: Connection refused
What I doing wrong ??
TIA Peter
activemq.xml================================
<beans>
<!-- Allows us to use system properties as variables in this configuration
file -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
<broker useJmx="true" xmlns="http://activemq.org/config/1.0">
<persistenceAdapter>
<journaledJDBC journalLogFiles="5" dataDirectory="../activemq-data"
dataSource="#postgres-ds"/>
</persistenceAdapter>
<transportConnectors>
<transportConnector name="default" uri="tcp://localhost:61616"
discoveryUri="multicast://default"/>
<transportConnector name="stomp" uri="stomp://localhost:61613"/>
</transportConnectors>
<networkConnectors>
<!-- by default just auto discover the other brokers -->
<networkConnector name="default" uri="multicast://default"/>
<!--
<networkConnector name="host1 and host2"
uri="static://(tcp://host1:61616,tcp://host2:61616)" failover="true"/>
-->
</networkConnectors>
</broker>
<!-- This xbean configuration file supports all the standard spring xml
configuration options -->
<!-- Postgres DataSource Sample Setup -->
<bean id="postgres-ds" class="org.postgresql.ds.PGPoolingDataSource">
<property name="serverName" value="localhost"/>
<property name="databaseName" value="efed-messaging"/>
<property name="portNumber" value="0"/>
<property name="user" value="activemq"/>
<property name="password" value="activemq"/>
<property name="dataSourceName" value="postgres"/>
<property name="initialConnections" value="1"/>
<property name="maxConnections" value="10"/>
</bean>
</beans>
James.Strachan wrote:
>
> On 8/2/06, Hyatt <mh...@brainbout.com> wrote:
>>
>> I am an ActiveMQ newbie. I am having some of the same issues expressed
>> in
>> this thread. I'd like to use embedded broker(s); but, I want to separate
>> the management web-app (console example) from the end-user web-app (chat
>> example).
>> + Config and run the ActiveMQ web-console example: Okay, Done, works
>> great
>> + Config and run the ActiveMQ chat example: Okay, Done, works great
>> + Run the web-console AND the chat example, as two separate web-apps:
>> Crash,
>> Burn, Smoke, Fire (I can reproduce and send errors if needed, but the
>> errors
>> are more inline with other email threads about Journal file already
>> in-use
>> and cannot create broker because broker is already running....I read
>> those
>> threads, and decided that the solutions provided here are closer to what
>> I
>> think I need).
>
> So WARs are their own separate class loaders. So running an embedded
> broker in each war will cause problems as you are really running 2
> brokers.
>
> So either...
>
> (i) put the ActiveMQ classes in your system classpath so there is only
> 1 broker shared in each WAR's class loader
>
> (ii) remove the embedded broker from one of the wars and connect to
> the embedded broker via tcp
>
> We could also change the web console so that it doesn't use an
> embedded broker but so that it connects to the other broker via JMX.
>
>> Let's start with the chat example, and start with James Strachan's
>> comment:
>> > The VM transport only works when the JMS client and broker are in the
>> > same classloader. If you are using 2 separate WARs then the VM
>> > transport cannot be used - so you'll have to use TCP to connect to the
>> > same broker
>>
>> Excellent, I've read that embedded brokers can be created with EITHER:
>> vm://localhost OR tcp://localhost:port. CORRECT?
>>
>> I changed the web.xml file. I changed what worked (vm://localhost) to (I
>> tried all of these):
>> tcp://localhost FAILED
>> tcp://localhost:61616 FAILED
>> tcp://localhost:8084 (the port used by NetBean's Bundled Tomcat server at
>> runtime) FAILED
>> If I can get the chat example to work with an embedded broker using
>> tcp://
>> rather than vm://, then I should be able to use the rest of the
>> information
>> in this thread to access the embedded broker from two web-apps.
>>
>> Am I doing enough by changing the web.xml, or do I need to change the
>> broker
>> connections in the Java code? What am I doing wrong?
>>
>> Using Linux, Tomcat, ActiveMQ 4.0.1, Java 1.5
>>
>> Thanks for your help.
>
> So configure an embedded broker in one of the WARs with a speciifc TCP
> port (e.g. using the default activemq.xml that comes with the web
> console) - then connect to it with tcp://localhost:61616
>
> --
>
> James
> -------
> http://radio.weblogs.com/0112098/
>
>
--
View this message in context: http://www.nabble.com/activeMQ-embedded-broker-in-separate-war-tf1713647.html#a6852950
Sent from the ActiveMQ - User mailing list archive at Nabble.com.