You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by Manuel Teira <mt...@tid.es> on 2007/06/14 10:44:44 UTC

Client hungs trying to create/delete a temporary queue

Hello.

I'm suffering a non deterministic problem when activemq tries to 
create/delete temporary queues from a servlet service method. Basically, 
the servlet service method executes a method that:

1.-Creates a session on a shared connection.
2.-Creates a temporary queue on the session, a consumer on that queue 
and a producer on a fixed destination.
3.-Sends a message using the producer, setting the jmsReplyTo to the 
temporary queue.
4.-Starts the connection (perhaps this could be a problem source, 
because the connection, shared by all the servlet threads,  is going to 
be started a lot of times).
5.-Send the message using the producer.
6.-Receive the message using the consumer.
7.-Closes the session.
8.-Deletes the temporary queue.

I've eventually got a Tomcat with two locked threads: One in :

"http-8080-Processor1" daemon prio=10 tid=0x00127650 nid=0xd in 
Object.wait() [0
x340fe000..0x340ffc28]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Unknown Source)
        at 
edu.emory.mathcs.backport.java.util.concurrent.FutureTask.waitFor(Fut
ureTask.java:267)
        at 
edu.emory.mathcs.backport.java.util.concurrent.FutureTask.get(FutureT
ask.java:117)
        - locked <0x4cfc65c0> (a 
org.apache.activemq.transport.FutureResponse)
        at 
org.apache.activemq.transport.FutureResponse.getResult(FutureResponse
.java:44)
        - locked <0x4cfc65c0> (a 
org.apache.activemq.transport.FutureResponse)
        at 
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorr
elator.java:69)
        at 
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnect
ion.java:1108)
        at 
org.apache.activemq.ActiveMQConnection.createTempDestination(ActiveMQ
Connection.java:1453)
        at 
org.apache.activemq.ActiveMQSession.createTemporaryQueue(ActiveMQSess
ion.java:1103)

and another one in:

"http-8080-Processor8" daemon prio=10 tid=0x00123d38 nid=0x14 in 
Object.wait() [
0x2d47e000..0x2d47fca8]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Unknown Source)
        at 
edu.emory.mathcs.backport.java.util.concurrent.FutureTask.waitFor(Fut
ureTask.java:267)
        at 
edu.emory.mathcs.backport.java.util.concurrent.FutureTask.get(FutureT
ask.java:117)
        - locked <0x4cfc6920> (a 
org.apache.activemq.transport.FutureResponse)
        at 
org.apache.activemq.transport.FutureResponse.getResult(FutureResponse
.java:44)
        - locked <0x4cfc6920> (a 
org.apache.activemq.transport.FutureResponse)
        at 
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorr
elator.java:69)
        at 
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnect
ion.java:1108)
        at 
org.apache.activemq.ActiveMQConnection.deleteTempDestination(ActiveMQ
Connection.java:1475)
        at 
org.apache.activemq.command.ActiveMQTempDestination.delete(ActiveMQTe
mpDestination.java:49)


Once the tomcat server was restarted, it started working fine again 
(without need to restart the broker).

Any idea of what could be happening? I assume that we can use 
Connection.createSession from different threads at the same time, and 
since the rest of the code is always using the different session 
instances, I think that there shouldn't be any reentrant issues.

I'm using activemq 4.0.2 in the production environment. Migrating to 
4.1.1 would be a hard task (involving a lot of testing) that I can not 
assume if we have no proof of this problem to be corrected.

Best regards.