[
https://issues.apache.org/jira/browse/AMQ-3760?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13226064#comment-13226064
]
Timothy Bish commented on AMQ-3760:
-----------------------------------
Actually, the answer to the question: "can I add a consumer on a running
session?" is as it is in most cases, it depends. In many cases you can happily
add a new consumer and even set a new message listener to a running consumer
without problems, only in the tangled cases of synchronized methods cases
you've created does this run into problems and that's why the spec makes these
notes about the use of sessions and consumes by threads other than the thread
that is delivering to the session with a running consumer.
The code is working within the bounds of the spec. If you have some ideas on
how to improve things such that it meets your use case while still obeying all
the various rules of the JMS specification we welcome your patches and test
cases.
> 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