You can set the request builder on the GWT.create(service). Ie:
ServerAsync myService = GWT.create(service);
myService.setRpcRequestBuilder(new RpcRequestBuilder() {
@Override
protected RequestBuilder doCreate(String serviceEntryPoint) {
RequestBuilder builder = new RequestBuilder(RequestBuilder.POST,
serviceEntryPoint);
builder.setTimeoutMillis(30000); // 30 second timeout
return builder;
}
});
On Friday 2 February 2024 at 10:06:24 am UTC+11 Blaze wrote:
> Hi all,
>
> I came across this thread, I have searched if there is some "global"
> request timeout that we can set on a RPC calls, not RequestBuilder, but the
> one from RemoteService created via GWT.create(service) ?
> I coudnt find anything, any idea?
>
> Tnx
>
> On Thursday, April 6, 2023 at 2:16:47 PM UTC+2 Colin Alworth wrote:
>
>> What you're looking for is a way to re-try requests in the case where the
>> server is unreachable, which is not something that HTTP or the browser
>> gives you automatically. If you had a proxy, but the server itself was
>> down, the proxy would likely return a 503 service unavailable status, which
>> the client could use to retry until the service was available (which might
>> only happen for a certain number of seconds or a certain number of tries).
>> It might also be possible for a proxy to wait and retry the upstream server
>> until it was available, but I can't think of a proxy right now with that
>> feature.
>>
>> HTTP itself doesn't have a timeout feature at all either. The timeout
>> that you're setting on the client side is a simple GWT Timer, if the
>> request hasn't finished (either in success or failure), it cancels the
>> upstream request and presents the failure you're seeing to the client.
>>
>> Be a little careful when implementing a retry mechanism, as it is
>> possible that the call made it to the server, and the server performed the
>> action, but the client lost internet connection while the response was on
>> its way to the client - that is, retrying a non-idempotent or expensive
>> action may cause problems you weren't expecting. A status code of 0 is
>> usually the client's way of saying "I wasn't able to get any reply from the
>> server for some reason" - taking that information and trying to do
>> something simple and idempotent until a server connection can be
>> reestablished lets you know that the server and network are both working
>> again, followed by some "did my last action succeed" before trying again
>> (or just let the user dismiss the message and try again) will help mitigate
>> this class of issues. A proxy sending back a 503 is a safer way to be sure
>> that the network connection is good, but only the server is down, so you
>> can retry - but be aware that technically there might be a network issue
>> between the proxy and server, though this is much less likely.
>>
>> Good luck,
>> Colin
>>
>> On Thursday, April 6, 2023 at 7:05:53 AM UTC-5 Dmitri wrote:
>>
>>> Dear Colin
>>>
>>> Thank you so much for your advice. I'll take a closer look at those
>>> areas.
>>>
>>> Just a little clarification: The server is not running at all. Both
>>> exceptions are generated from the client only with different timeout
>>> settings when it cannot reach the server.
>>> When the server is running - no problems in both cases. The purpose of
>>> the code is to make the client wait longer when the server is unreachable
>>> due to temporary communication problems.
>>>
>>> PS there are some typos in the codes I provide which I made when
>>> clean-up for posting., Please ignore them.
>>> Thank you again
>>>
>>> Best regards
>>> Dmitri
>>>
>>>
>>> On Thu, Apr 6, 2023 at 9:49 PM Colin Alworth <[email protected]> wrote:
>>>
>>>> I believe you're experiencing different timeouts in different cases.
>>>> That is, the problem you're facing of a short timeout before you use your
>>>> RPC_TIMEOUT_MS is a server-side timeout (or potentially a proxy?), but
>>>> after you set a client-side timeout, the client is observing that the
>>>> server is taking too long, and terminating the call from its side,
>>>> resulting in the RequestTimeoutException.
>>>>
>>>> To confirm this, try setting the client-side timeout to something like
>>>> one minute, 60_000, and see that the error returns to the old message you
>>>> were seeing. A timeout set like this does not guarantee that the server
>>>> stops processing the request, only that the client stops waiting for it,
>>>> and it may not be appropriate for your use case at all.
>>>>
>>>> With the client-side timeout set to a reasonable amount or entirely
>>>> removed, take a closer look at the error message you're getting from the
>>>> server, and any server or proxy logs you're getting. If there is a proxy,
>>>> see if you can connect directly to the server to rule out the proxy
>>>> setting
>>>> this short timeout. Very likely this is a configuration on the
>>>> server/proxy
>>>> that can be change to suit your requirements.
>>>>
>>>> On Thursday, April 6, 2023 at 2:26:31 AM UTC-5 Dmitri wrote:
>>>>
>>>>> Dear gurus,
>>>>>
>>>>> I'm learning Java and GWT and I'm facing a problem with setting
>>>>> timeout for PRC calls. I want to extend the RPC timeout before the client
>>>>> reports a failure. The code I'm using is attached below.
>>>>>
>>>>> I'm running a client in firefox and experience the following problem:
>>>>>
>>>>> I want to achieve a timeout of 20-30 seconds. However I can set the
>>>>> timeout (RPC_TIMEOUT_MS) only up to 3200mS. In case the server does not
>>>>> respond I receive the exception
>>>>> "*com.google.gwt.http.client.RequestTimeoutException:
>>>>> A request timeout has expired after 3200 ms*" accurately after
>>>>> defined time.
>>>>>
>>>>> However in case set timeout exceeds the 3300ms of above the exception
>>>>> is different "*com.google.gwt.user.client.rpc.StatusCodeException: 0*"
>>>>> and is thrown always after 3-4 seconds.
>>>>>
>>>>> What causes this exception and how can I extend the waiting time?
>>>>>
>>>>> Thank you,
>>>>> Best regards
>>>>> Dmitri
>>>>>
>>>>> The code:
>>>>> public class MyClass implements EntryPoint {
>>>>>
>>>>> private static final int RPC_TIMEOUT_MS = 3300;
>>>>>
>>>>> private static class TimeoutRequestBuilder extends RpcRequestBuilder
>>>>> {
>>>>> @Override
>>>>> protected RequestBuilder doCreate(String serviceEntryPoint) {
>>>>> RequestBuilder builder = super.doCreate(serviceEntryPoint);
>>>>> builder.setTimeoutMillis(RPC_TIMEOUT_MS);
>>>>> return builder;
>>>>> }
>>>>> }
>>>>>
>>>>> private static final RpcRequestBuilder requestBuilder = new
>>>>> TimeoutRequestBuilder();
>>>>> private final HubServiceAsync myService =
>>>>> GWT.create(HubService.class);
>>>>>
>>>>> @Override
>>>>> public void onModuleLoad() {
>>>>> ((ServiceDefTarget)
>>>>> hmyService).setRpcRequestBuilder(requestBuilder);
>>>>>
>>>>> final MainView mainView = new MainView(hubService);
>>>>>
>>>>> RootPanel rootPanel = RootPanel.get();
>>>>> rootPanel.add(mainView);
>>>>>
>>>>> Window.addResizeHandler(new ResizeHandler() {
>>>>> @Override
>>>>> public void onResize(ResizeEvent event) {
>>>>> mainView.resize();
>>>>> }
>>>>> });
>>>>> }
>>>>> }
>>>>>
>>>>>
>>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "GWT Users" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to [email protected].
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/google-web-toolkit/76443417-083f-4401-94f5-cd9fd392f80fn%40googlegroups.com
>>>>
>>>> <https://groups.google.com/d/msgid/google-web-toolkit/76443417-083f-4401-94f5-cd9fd392f80fn%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>>
--
You received this message because you are subscribed to the Google Groups "GWT
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/google-web-toolkit/b4cacf1a-f5ad-4988-9c8c-0c59f165fe75n%40googlegroups.com.