Вопрос

Кто-нибудь знает, как отслеживать длительные серверные процессы в GWT, кроме опроса сервера?Нам нужно выполнить на сервере некоторую трудоемкую, многоэтапную обработку, связанную с вводом-выводом, и было бы неплохо отображать ход этой обработки в браузере.

Это было полезно?

Решение

С этим довольно легко справиться в 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().Он может вернуться, когда задание выполнено, или просто с обновлением статуса задания.Вышеуказанное будет продолжаться до тех пор, пока не будет установлен флаг выполнения задания.

Другие советы

Я думаю, это зависит от вашего процесса, но если вы собираетесь делать что-то вроде потоковой передачи данных, вы можете использовать технику Server Push (или Comet). GWT поддерживает реализацию Comet.google GWT+Comet или GWT+COMET+Tomcat, я читал о комете и gwt в книге «Приложения Google Web Toolkit» (gwtapps.com).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top