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

Sven Meier commented on WICKET-4665:
------------------------------------

I don't know why this implementation keeps one additional callback in the 
queue, but it has been this way in 1.5.x too (didn't check 1.4.x).

IMHO it would make sense to let the channel drop *all* successive callbacks 
while busy, as you suggested. But I would like to hear the opinion other 
developers.

@Igor, @Martin ? 
                
> AjaxChannel.Type.DROP actually allows 2 requests in the "total queue"
> ---------------------------------------------------------------------
>
>                 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
>
> 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