GWT中的过程监控

时间:2009-01-03 19:17:52

标签: java gwt

除了轮询服务器之外,有谁知道如何监控GWT中长时间运行的服务器端进程?我们需要在服务器上执行一些耗时的,多步骤的I / O绑定处理,并且在浏览器中显示此处理的进度会很不错。

2 个答案:

答案 0 :(得分:3)

这在GWT中相当容易处理。

长时间运行的进程由GWT RPC调用触发,在这种情况下,您有入口点,或者不是,在这种情况下,您需要手动启动它。

请记住,GWT RPC调用是异步的,因此它们不需要立即返回。您需要像checkStatus()这样的RPC调用。所以你可以做以下事情:

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()返回。它可以返回,因为作业已完成或只是作业状态更新。以上将继续循环,直到设置了作业状态完成标志。

答案 1 :(得分:0)

我认为这取决于您的流程,但如果您要执行类似数据流的操作,您可以使用Server Push(或Comet)技术.GWT支持Comet实现。 google GWT + Comet,或GWT + COMET + Tomcat,我在“Google Web Toolkit Applications”一书(gwtapps.com)中读到了关于comet和gwt的内容。