Pergunta
Alguém sabe como monitorar longo executando processos do lado do servidor em GWT, que não interrogar o servidor? Precisamos fazer alguma de várias etapas, eu processamento O-bound demorado, / no servidor, e que seria bom para mostrar o progresso deste processamento no navegador.
Solução
Este é bastante fácil de manusear em GWT.
O processo de longa duração ou é desencadeada por uma chamada GWT RPC, caso em que você tem o seu ponto de entrada, ou não é, caso em que você precisa para começar esta off manualmente.
Lembre-se que as chamadas GWT RPC são assíncronos para que eles não precisam retornar imediatamente. Você precisa de uma chamada RPC como checkStatus()
. Assim, você pode fazer coisas como:
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
}
});
e em seu serviço RPC:
void checkStatus(AsyncCallback<JobStatus> callback);
O seu servidor pode demorar tanto tempo como ele gosta (dentro da razão) para retornar de checkStatus (). Ele pode voltar, porque o trabalho é feito ou apenas com uma atualização de status do trabalho. O acima continuará looping até que o sinalizador de status trabalho feito está definido.
Outras dicas
Eu acho que depende do seu processo, mas se você está indo fazer algo como Data Streaming você pode usar push Server (ou cometa) technic.GWT apoia a implementação Comet. Google GWT + Comet, ou GWT + COMET + Tomcat, eu li sobre cometa e gwt em "Aplicativos Google Web Toolkit" Book (gwtapps.com).