activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Alessandro Monguzzi (Commented) (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AMQ-3760) Deadlock on Java Client when onMessage executes a synchronized method.
Date Thu, 08 Mar 2012 14:29:57 GMT

    [ https://issues.apache.org/jira/browse/AMQ-3760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13225223#comment-13225223
] 

Alessandro Monguzzi commented on AMQ-3760:
------------------------------------------

Ok, so your answer to the question: "can I add a consumer on a running session?" is no.

At this point, why the ActiveMQMessageConsumer.setMessageListener stops and restarts the session
instead of throwing an exception? If the operation is invalid, this behaviour is error prone
and inefficient. Please note that in this scenario it's possible to block forever every other
consumer linked to the same session, also those created before the session start.
Since this code works correctly if no lock is involved, I believe we have to resolve the deadlock,
not to drop the entire feature.

                
> Deadlock on Java Client when onMessage executes a synchronized method.
> ----------------------------------------------------------------------
>
>                 Key: AMQ-3760
>                 URL: https://issues.apache.org/jira/browse/AMQ-3760
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: JMS client
>    Affects Versions: 5.5.1
>         Environment: java version "1.6.0_30"
> Java(TM) SE Runtime Environment (build 1.6.0_30-b12)
> Java HotSpot(TM) Server VM (build 20.5-b03, mixed mode)
> OS: SunOs 10/06
>            Reporter: Alessandro Monguzzi
>              Labels: features
>         Attachments: ActiveMQDeadlock.zip
>
>
> Create a class with two synchronized methods synchMethod1 and synchMethod2. 
> syncMethod1 is invoked inside a messageListener object and only prints a message on stdout.
> syncMethod2 creates a new MessageConsumer with a new instance of MessageListener. All
the MessageConsumers created by synchMethod2 share the same session.
> All the consumers listen on the same Topic named "myDest".
> Create an infinite cycle that: 
> 1) send a message on Topic "myDest"
> 2) invoke syncMethod2
> 3) waits 10ms
> In attach the unit test source.
> As result, a deadlock is created between the "ActiveMQ Session Task" thread entering
in syncMethod1 having the ActiveMessageConsumer's mutex and my other thread executing the
syncMethod2 when the SimplePriorityMessageDispatchChannel.stop() method is invoked.
> This means that it's not possible to create or change MessageListeners on a running session,
even if the code seems to handle this case stopping and restarting the session.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message