activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bill Harts (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AMQ-4797) Unable to add multiple AJAX listeners for the same topic in the same browser window
Date Wed, 26 Mar 2014 21:48:18 GMT

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

Bill Harts commented on AMQ-4797:
---------------------------------

Ian,

Yes, everything you wrote is sadly correct.

I have a very fragile workaround which is to load 5 separate copies of the amq.js module,
and reference each through a private member variable.  It's a terrible way to accomplish this,
wastes memory, and occasionally fails (I haven't figured out why).

I am hoping someone can track down the bug.  I took a stab at it as you can see in my previous
posts.  What is happening is that in MessageListenerServlet.js, function doPost, line 165
is dropping any previous consumer to the same destination, but deleting that statement did
not fix the problem.


> Unable to add multiple AJAX listeners for the same topic in the same browser window
> -----------------------------------------------------------------------------------
>
>                 Key: AMQ-4797
>                 URL: https://issues.apache.org/jira/browse/AMQ-4797
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.8.0
>         Environment: Windows Server 2008 R2 on Dell server boxes
>            Reporter: Bill Harts
>              Labels: addlistener, ajax, web
>
> I'm using ExtJS to create two separate panels which run in one browser tab.  After loading
jquery, amq_jquery_adapter.js and amq.js I call amq_init (only once).  Then each panel calls
addlistener like so: 
> Panel 1 code: 
> {code}amq.addListener('testconnection1', topic://MyApp/IOIs/Simulator', myHandler1.rcvMessage);{code}
> Panel 2 code: 
> {code}amq.addListener('testconnection2', 'topic://MyApp/IOIs/Simulator', myHandler2.rcvMessage);{code}
> Note that both are subscribing to the same topic.  This is because Panel 1 shows the
data in a different format than Panel 2. 
> *The Problem:*
> If I start Panel 1 alone, it receives data from the topic without problems. But then
I start Panel 2 and as soon as it executes the addlistener, Panel 2 starts receiving data
but Panel 1 stops!   
> So I started tracing into the network traffic and all looks fine, i.e, I can see each
addlistener trigger a 'listen' request with the proper id and topic.  And I see the amq server
return data to testconnection1, then stop suddenly when the 'listen' for testconnection2 is
sent.  So I turned my attention to the backend code and enabled a detailed trace.  Here's
what I found: 
> When the Panel 1 'listen' is received, the trace shows: 
> {quote}2013-10-10 09:10:09,701 | DEBUG | 0 destination=topic://MyApp/IOIs/Simulator message=testconnection1
type=listen | org.apache.activemq.web.MessageListenerServlet | qtp2088898587-51 - /demo/amq
> 2013-10-10 09:10:09,701 | DEBUG | topic://MyApp/IOIs/Simulator is a org.apache.activemq.command.ActiveMQTopic
| org.apache.activemq.web.MessageListenerServlet | qtp2088898587-51 - /demo/amq
> 2013-10-10 09:10:09,701 | DEBUG | amq-broker adding consumer: ID:MYAPPDATA-7392-1381410590247-5:1:1:1
for destination: topic://MyApp/IOIs/Simulator | org.apache.activemq.broker.region.AbstractRegion
| ActiveMQ VMTransport: vm://localhost#1-2
> 2013-10-10 09:10:09,701 | DEBUG | amq-broker adding destination: topic://ActiveMQ.Advisory.Consumer.Topic.MyApp/IOIs/Simulator
| org.apache.activemq.broker.region.AbstractRegion | ActiveMQ VMTransport: vm://localhost#1-2
> 2013-10-10 09:10:09,717 | DEBUG | Initialized TaskRunnerFactory[ActiveMQ Session Task]
using ExecutorService: java.util.concurrent.ThreadPoolExecutor@2e2667db[Running, pool size
= 0, active threads = 0, queued tasks = 0, completed tasks = 0] | org.apache.activemq.thread.TaskRunnerFactory
| qtp2088898587-51 - /demo/amq
> 2013-10-10 09:10:09,717 | DEBUG | Subscribed: ActiveMQMessageConsumer { value=ID:MYAPPDATA-7392-1381410590247-5:1:1:1,
started=true } to topic://MyApp/IOIs/Simulator id=testconnection1 | org.apache.activemq.web.MessageListenerServlet
| qtp2088898587-51 - /demo/amq{quote}
> When the Panel 2 'listen' is received, I see this trace: 
> {quote}2013-10-10 09:10:09,888 | DEBUG | 0 destination=topic://MyApp/IOIs/Simulator message=testconnection2
type=listen | org.apache.activemq.web.MessageListenerServlet | qtp2088898587-53 - /demo/amq
> 2013-10-10 09:10:09,888 | DEBUG | topic://MyApp/IOIs/Simulator is a org.apache.activemq.command.ActiveMQTopic
| org.apache.activemq.web.MessageListenerServlet | qtp2088898587-53 - /demo/amq
> 2013-10-10 09:10:09,888 | DEBUG | remove: ID:MYAPPDATA-7392-1381410590247-5:1:1:1, lastDeliveredSequenceId:0
| org.apache.activemq.ActiveMQMessageConsumer | qtp2088898587-53 - /demo/amq
> 2013-10-10 09:10:09,888 | DEBUG | Unregistering MBean org.apache.activemq:type=Broker,brokerName=amq-broker,destinationType=Topic,destinationName=MyApp/IOIs/Simulator,endpoint=Consumer,clientId=ID_MYAPPDATA-7392-1381410590247-4_1,consumerId=ID_MYAPPDATA-7392-1381410590247-5_1_1_1
| org.apache.activemq.broker.jmx.ManagementContext | ActiveMQ VMTransport: vm://localhost#1-2
> 2013-10-10 09:10:09,888 | DEBUG | amq-broker removing consumer: ID:MYAPPDATA-7392-1381410590247-5:1:1:1
for destination: topic://MyApp/IOIs/Simulator | org.apache.activemq.broker.region.AbstractRegion
| ActiveMQ VMTransport: vm://localhost#1-2
> 2013-10-10 09:10:09,888 | DEBUG | amq-broker adding consumer: ID:MYAPPDATA-7392-1381410590247-5:1:1:2
for destination: topic://MyApp/IOIs/Simulator | org.apache.activemq.broker.region.AbstractRegion
| ActiveMQ VMTransport: vm://localhost#1-2
> 2013-10-10 09:10:09,904 | DEBUG | Subscribed: ActiveMQMessageConsumer { value=ID:MYAPPDATA-7392-1381410590247-5:1:1:2,
started=true } to topic://MyApp/IOIs/Simulator id=testconnection2 | org.apache.activemq.web.MessageListenerServlet
| qtp2088898587-53 - /demo/amq{quote}
> What is happening is that in MessageListenerServlet.js, function doPost, line 165 is
dropping any previous consumer to the same destination: 
> {code}client.closeConsumer(destination); // drop any existing consumer.{code}
> But why?  There doesn't seem to be a good reason for doing this--maybe it was originally
put there for cleanup purposes?.  Or if there is a good reason, maybe the behavior should
be to not do it if the id of the new destination (in this case 'testconnection2') is different
than the id of the existing destination ('testconnection1'). 
> I believe this can be fixed by simply removing line 165 from MessageListenerServlet.js
but I'm not sure if this will break something else.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message