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

Christian Oldiges updated WICKET-4661:
--------------------------------------

    Description: 
The error is triggered if a custom AjaxChannel is defined using code like this 
in an AjaxEventbehavior:

{code}
         @Override
         protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                super.updateAjaxAttributes(attributes);
                attributes.setChannel(new AjaxChannel("mychannel", Type.DROP));
         }
{code}

Note: The channel type does NOT matter. Neither DROP nor QUEUE work.

My guess is, the fact the a named ajax channel is used results in the client 
side re-using the JavaScript Wicket.Channel instances. 

In a re-used instance, the busy flag needs to be properly cleared after 
successfully executing an ajax call and its callback which is NOT done in the 
currently implemented code:

{code}
                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...");
{code}

A better, working solution would be:

{code}
                schedule: function (callback) {
                        if (this.busy === false) {
                                this.busy = true;
                                try {
                                        var callbackResult = callback();
                                        this.busy = false;
                                        return callbackResult;
                                } catch (exception) {
                                        this.busy = false;
                                        Wicket.Log.error("An error occurred 
while executing Ajax request:" + exception);
                                }
                        } else {
                                Wicket.Log.info("Channel busy - postponing...");
{code}


  was:
The error is triggered if a custom AjaxChannel is defined using code like this 
in an AjaxEventbehavior:

         @Override
         protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
                super.updateAjaxAttributes(attributes);
                attributes.setChannel(new AjaxChannel("mychannel", Type.DROP));
         }

Note: The channel type does NOT matter. Neither DROP nor QUEUE work.

My guess is, the fact the a named ajax channel is used results in the client 
side re-using the JavaScript Wicket.Channel instances. 

In a re-used instance, the busy flag needs to be properly cleared after 
successfully executing an ajax call and its callback which is NOT done in the 
currently implemented code:

                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...");


A better, working solution would be:

                schedule: function (callback) {
                        if (this.busy === false) {
                                this.busy = true;
                                try {
                                        var callbackResult = callback();
                                        this.busy = false;
                                        return callbackResult;
                                } catch (exception) {
                                        this.busy = false;
                                        Wicket.Log.error("An error occurred 
while executing Ajax request:" + exception);
                                }
                        } else {
                                Wicket.Log.info("Channel busy - postponing...");



    
> Ajax channel busy flag not properly cleared upon SUCCESSFUL callback 
> executions
> -------------------------------------------------------------------------------
>
>                 Key: WICKET-4661
>                 URL: https://issues.apache.org/jira/browse/WICKET-4661
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket
>    Affects Versions: 6.0.0-beta3
>            Reporter: Christian Oldiges
>
> The error is triggered if a custom AjaxChannel is defined using code like 
> this in an AjaxEventbehavior:
> {code}
>          @Override
>          protected void updateAjaxAttributes(AjaxRequestAttributes 
> attributes) {
>                 super.updateAjaxAttributes(attributes);
>                 attributes.setChannel(new AjaxChannel("mychannel", 
> Type.DROP));
>          }
> {code}
> Note: The channel type does NOT matter. Neither DROP nor QUEUE work.
> My guess is, the fact the a named ajax channel is used results in the client 
> side re-using the JavaScript Wicket.Channel instances. 
> In a re-used instance, the busy flag needs to be properly cleared after 
> successfully executing an ajax call and its callback which is NOT done in the 
> currently implemented code:
> {code}
>               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...");
> {code}
> A better, working solution would be:
> {code}
>               schedule: function (callback) {
>                       if (this.busy === false) {
>                               this.busy = true;
>                               try {
>                                       var callbackResult = callback();
>                                       this.busy = false;
>                                       return callbackResult;
>                               } catch (exception) {
>                                       this.busy = false;
>                                       Wicket.Log.error("An error occurred 
> while executing Ajax request:" + exception);
>                               }
>                       } else {
>                               Wicket.Log.info("Channel busy - postponing...");
> {code}

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