[ https://issues.apache.org/activemq/browse/AMQ-696?page=all ]
james strachan resolved AMQ-696:
--------------------------------
Fix Version: 4.0 RC4
Resolution: Fixed
Great catch Craig - thanks for figuring all that out - I was starting to
suspect something like this could be the cause of your error.
I've made the ensureConnectionInfoSent() method synchronized now so that this
loophole should be now fixed. Could you test its working for you now please?
Let us know if its not and we can reopen this issue
> Client: XXX already connected exception when connection started after
> consumers added
> -------------------------------------------------------------------------------------
>
> Key: AMQ-696
> URL: https://issues.apache.org/activemq/browse/AMQ-696
> Project: ActiveMQ
> Type: Bug
> Components: Broker
> Versions: 4.0 RC2, 4.0 RC3
> Environment: WinXP
> Reporter: Craig Day
> Fix For: 4.0 RC4
>
>
> While using the new Spring-2.0 DefaultMessageListenerContainer I can reliably
> reproduce the following exception on the broker side which usually results in
> a hang on the client side:
>
> The broker logs the following exception:
>
> INFO Service - Sync error occurred:
> javax.jms.InvalidClientIDException: Broker: localhost - Client:
> ID:inspiron-1410-114619274
> 7453-2:1 already connected
> javax.jms.InvalidClientIDException: Broker: localhost - Client:
> ID:inspiron-1410-1146192747453-2:1 already connected
> at
> org.apache.activemq.broker.region.RegionBroker.addConnection(RegionBroker.java:154)
> at
> org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:65)
> at
> org.apache.activemq.advisory.AdvisoryBroker.addConnection(AdvisoryBroker.java:69)
> at
> org.apache.activemq.broker.BrokerFilter.addConnection(BrokerFilter.java:65)
> at
> org.apache.activemq.broker.MutableBrokerFilter.addConnection(MutableBrokerFilter.java:77)
> at
> org.apache.activemq.broker.AbstractConnection.processAddConnection(AbstractConnection.java:500)
> at
> org.apache.activemq.broker.jmx.ManagedTransportConnection.processAddConnection(ManagedTransportConnection.java:82)
> at
> org.apache.activemq.command.ConnectionInfo.visit(ConnectionInfo.java:106)
> at
> org.apache.activemq.broker.AbstractConnection.service(AbstractConnection.java:196)
> at
> org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:62)
> at
> org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:93)
> at
> org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:70)
> at
> org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:114)
> at
> org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:122)
> at
> org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:87)
> at
> org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:139)
> at java.lang.Thread.run(Thread.java:595)
>
> I have extrapolated the sequence of calls that
> DefaultMessageListenerContainer is making and managed to produce a simple
> test case that reproduces the problem:
>
> import junit.framework.TestCase;
> import org.apache.activemq.ActiveMQConnectionFactory;
> import org.apache.activemq.command.ActiveMQQueue;
>
> import javax.jms.*;
>
> public class TestActiveMQ extends TestCase {
>
> public void testConnectionFactory() throws Exception {
> final ActiveMQConnectionFactory cf = new
> ActiveMQConnectionFactory("tcp://localhost:61616");
> final ActiveMQQueue queue = new ActiveMQQueue("testqueue");
> final Connection conn = cf.createConnection();
>
> Runnable r = new Runnable() {
> public void run() {
> try {
> Session session = conn.createSession(false, 1);
> MessageConsumer consumer = session.createConsumer(queue,
> null);
> Message msg = consumer.receive(1000);
> } catch (JMSException e) {
> e.printStackTrace();
> }
> }
> };
> new Thread(r).start();
> conn.start();
>
> try {
> synchronized (this) {
> wait(3000);
> }
> } catch (InterruptedException e) {
> e.printStackTrace();
> }
> }
> }
>
> Let us know if you need anymore information. Dont want to scrub ActiveMQ from
> my list of candidates If I can help it.
>
> cheers
> craig
>
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://issues.apache.org/activemq/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira