[ 
https://issues.apache.org/activemq/browse/AMQ-2948?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alex Dean updated AMQ-2948:
---------------------------

    Attachment: support-multiple-ajax-clients-per-session.patch

This patch replaces the original one I attached to this ticket.

Changes since original patch:
 - private MessageListenerServlet.ClientConsumerState class refactored to 
AjaxWebClient (extends WebClient).
 - private MessageListenerServlet.Listener class refactored to AjaxListener.  
AjaxWebClient uses an instance of Listener/AjaxListener, so this needs to be 
public.
 - AjaxWebClient & associated data for each client are now stored in a 
MessageListenerServlet instance variable (ajaxWebClients) rather than in 
sessions.
 - Timer/TimerTask code added to examine ajaxWebClients and clean up clients 
which have not been accessed in the past minute.  This solves the 
thread-leakage we were seeing in my initial patch.
 - JavaScript to append clientId parameter to all requests moved to amq.js, so 
no changes are required to the jquery, prototype, or dojo adapters.

New patch also includes a new JS test, and an updated chat.html which uses a 
clientId (so you can open chat.html in multiple windows in the same browser) 
for a quick test.

> Support ajax clients in multiple windows/tabs in a single browser
> -----------------------------------------------------------------
>
>                 Key: AMQ-2948
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2948
>             Project: ActiveMQ
>          Issue Type: Bug
>    Affects Versions: 5.4.1
>         Environment: OSX 10.6
> Centos 5.4
>            Reporter: Alex Dean
>         Attachments: support-multiple-ajax-clients-per-session.patch
>
>
> In current ajax code, there is a 1-1 relationship between ajax client and 
> session.  Since multiple windows in the same browser share the same session, 
> it's impossible for the ajax code to update both windows.  Either 1 or the 
> other will receive messages, but not both.
> The attached patch allows an optional 'clientId' string to be passed to the 
> JavaScript amq.init() function, similar to that supported by the REST 
> servlet.  This clientId string is sent to the server with every ajax request. 
>  In MessageListenerServlet, a new consumer is created for every new 
> sessionid+clientId, allowing multiple windows in the same browser to send & 
> receive messages independently.
> For some (currently) unknown reason, IE7 cannot send messages from multiple 
> windows.  2 IE7 windows can receive messages independently with no errors, 
> but once either IE7 window sends a message, both windows cease receiving 
> data.  This behavior is not seen in FF (OSX or WinXP) or Safari (OSX).  All 
> those browsers are able to send & receive simultaneously in multiple windows 
> with no errors.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to