Hi, you can try specifying different name for every broker. It should help.
Regards -- Dejan Bosanac www.scriptinginjava.net On Thu, May 1, 2008 at 5:29 PM, matt hoffman <[EMAIL PROTECTED]> wrote: > I'm having a lot of trouble getting embedded brokers to work as they > should. I'm using them in my case mainly to ease configuration -- I want > to > be able to run several instances of the same code and have them discover > each other and communicate, without needing a single server already > running. > > > The current problem is, the first server starts up great, and works as > expected. Subsequent servers, though, throw this error: > > javax.jms.InvalidClientIDException: Broker: localhost - Client: > NC_localhost_inboundlocalhost already connected from vm://localhost#0 > > Which seems strange, seeing as how I'm not explicitly setting clientID > anywhere. I thought these were auto-generated? > > Below is the configuration I'm currently using. I'm not referencing the > broker in code at all; I'm interacting with it only through the Spring > JmsTemplate, which in turn gets a connection from the > ActiveMQConnectionFactory connecting to vm://localhost. Based on the > documentation, that seems to be the way to do it... what have I > misunderstood? > > > In my Spring config: > > <bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean"> > <property name="config" value="classpath:activemq.xml" /> > <property name="start" value="true" /> > </bean> > > <bean id="workQueueDestination" > class="org.apache.activemq.command.ActiveMQQueue"> > <constructor-arg index="0" value="Test.WorkQueue"/> > </bean> > > <bean id="eventTopicDestination" > class="org.apache.activemq.command.ActiveMQTopic"> > <constructor-arg index="0" value="Test.EventTopic"/> > </bean> > > <bean id="jmsFactory" > class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker"> > <property name="brokerURL" value="vm://localhost"/> > </bean> > > <bean id="workQueueJmsTemplate" > class="org.springframework.jms.core.JmsTemplate"> > <property name="connectionFactory"> > <!-- wrapping in a pool to avoid creating a connection per send > --> > <bean > class="org.springframework.jms.connection.CachingConnectionFactory"> > <property name="targetConnectionFactory"> > <ref local="jmsFactory"/> > </property> > </bean> > </property> > > <property name="defaultDestination" ref="workQueueDestination"/> > </bean> > > I previously tried including the broker config directly in the Spring > file, > but broke it out as a problem-solving exercise and haven't moved it back > yet. > Here's the referenced activemq.xml: > > > <beans xmlns="http://www.springframework.org/schema/beans" > xmlns:jms="http://activemq.org/config/1.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://www.springframework.org/schema/beans > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd > http://activemq.org/config/1.0 > http://activemq.apache.org/schema/core/activemq-core-5.0.0.xsd" > default-lazy-init="false"> > > <jms:broker id="broker" persistent="false" useJmx="true"> > <jms:networkConnectors> > <jms:networkConnector uri="multicast://default" duplex="true"/> > <!-- by default just auto discover the other brokers --> > </jms:networkConnectors> > > <jms:persistenceAdapter> > <jms:memoryPersistenceAdapter/> > </jms:persistenceAdapter> > > <jms:transportConnectors> > <jms:transportConnector name="openwire" uri="tcp://localhost:0" > discoveryUri="multicast://default"/> > </jms:transportConnectors> > > </jms:broker> > > </beans> >