Это довольно легко обрабатывать в GWT.
Длительный процесс запускается вызовом GWT RPC, в этом случае у вас есть точка входа, или нет, и в этом случае вам нужно запускать ее вручную.
Помните, что вызовы GWT RPC являются асинхронными, поэтому им не нужно возвращаться немедленно. Вам нужен вызов RPC, например checkStatus()
. Таким образом, вы можете делать такие вещи, как:
public class JobStatus {
private boolean done;
// other info
// ...
}
public class JobStatusCallback<JobStatus> extends AsyncCallback {
public final void onSuccess(JobStatus result) {
if (result.isDone()) {
done();
} else {
checkAgain();
}
}
public final void onFailure(Throwable caught) {
error(caught);
checkAgain();
}
public void done() { // override
}
public void checkAgain() {
service.checkStatus(this);
}
public void error(Thorwable t) { // override
}
});
и в вашем сервисе RPC:
void checkStatus(AsyncCallback<JobStatus> callback);
Вашему серверу может потребоваться столько времени (в пределах разумного), чтобы вернуться из checkStatus (). Он может вернуться, потому что работа выполнена или просто с обновлением статуса работы. Вышеприведенное будет продолжаться до тех пор, пока не будет установлен флаг выполнения задания.