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

Martin Grigorov resolved WICKET-4665.
-------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.5.8
                   6.0.0
    
> Add a new AjaxChannel that discards any Ajax requests if there is a running 
> request in the same channel
> -------------------------------------------------------------------------------------------------------
>
>                 Key: WICKET-4665
>                 URL: https://issues.apache.org/jira/browse/WICKET-4665
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 6.0.0-beta3
>            Reporter: Christian Oldiges
>            Assignee: Martin Grigorov
>             Fix For: 6.0.0, 1.5.8
>
>
> The schedule JavaScript function of the ajax channel uses a BUSY flag and a 
> request queue in a callbacks array.
> If the channel is marked as busy because there is a request currently being 
> executed, the second part of the function is executed and for channel type 
> DROP, the newly scheduled request is put into the callbacks queue.
> Using this approach, the dropping channel type actually allows 2 requests in 
> the "total queue".
> The one that triggers the busy = true which is still running and the one that 
> is stored into the callbacks array.
> Reading the documentation of AjaxChannel.DROP says:
> dropping - only the last Ajax request is processed, the others are discarded
>               schedule: function (callback) {
>                       if (this.busy === false) {
>                               this.busy = true;
>                               try {
>                                       return callback();
>                               } catch (exception) {
>                                       this.busy = false;
>                                       Wicket.Log.error("An error occurred 
> while executing Ajax request:" + exception);
>                               }
>                       } else {
>                               Wicket.Log.info("Channel busy - postponing...");
>                               if (this.type === 's') { // stack
>                                       this.callbacks.push(callback);
>                               }
>                               else { /* drop */
>                                       this.callbacks = [];
>                                       //  THIS IS WRONG   this.callbacks[0] = 
> callback;
>                               }
>                               return null;
>                       }
>               },
> To make it work, the dropping channel should NOT store the currently 
> scheduled request, but simply clear the callbacks array.

--
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

        

Reply via email to