Now I can improve the client side.
Thanks a million for flagging this one for me.
On 11/24/12 4:15 PM, "Alexey Panteleev" <alexey@yoxel.com> wrote:
Hi Jens,
What I get for the SQL exceptions are either this:
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.
or
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed.
or
java.sql.SQLException: Operation not allowed after ResultSet closed
or
java.lang.NullPointerException: null
at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1133) ~[mysql-connector-java-5.1.21.jar:na]
All seem to relate to the db connection closed. Just trying to wrap my mind around how exactly the connection is closed/lost if my persist thread is still working, trying to extract the data.
Thank you,
Alexey
On Saturday, November 24, 2012 10:44:11 AM UTC-8, Jens wrote:
If you see SQLExceptions just because the user navigates too quickly you should analyse and fix your server code / database setup / querys!
When you have solved this your only "problem" now is that both RPC callbacks will be executed once their corresponding RPC request returns and this may cause odd behavior in your UI if not handled. You have to detect when a user leaves a page and store that fact in a field (e.g. boolean isActive). Your callback should then check this field before executing its onSuccess() code.
Using GWT Activities you would set the flag to true in Activity.start() and to false in Activity.stop() and Activity.cancel().
Following the documentation for GWT-RPC you could also let your methods return "Request" instead of "void", e.g.
interface MyServiceAsync {
public Request myMethod(String s, AsyncCallback<String> callback);
}
this allows you to cancel the request on the client side (server will still do its work once the request reaches the server).
-- J.
Am Freitag, 23. November 2012 19:04:13 UTC+1 schrieb Alexey Panteleev:
Hello,
I've been struggling with this issue for a long time, maybe someone could help me address this finally?
From time to time it happens that a user navigates to one page wich issues an RPC to our server but then quickly navigates to another page which issues yet another RPC to the server while the 1st call is still being processed by the server. In this case I always see some kind of SQLException on the server side (I guess for the 1st call) and then the client also receives an unspecified Exception.
What is the best practice for dealing with these situations? Should I be canceling the 1st call before allowing the 2nd one?
We use gwt-dispatch, I did not find a cancel method in that framework yet. Or should I not allow any new calls until the active one has not finished?
Do you ever run into this w/ GWT?
Thanks much,
Alexey
No comments:
Post a Comment