Domanda

Qualcuno sa come monitorare processi lato server di lunga durata in GWT, oltre al polling del server? Dobbiamo eseguire un po 'di tempo, elaborazione I / O multi-step, associata al server, e sarebbe bello visualizzare l'avanzamento di questa elaborazione nel browser.

È stato utile?

Soluzione

Questo è abbastanza facile da gestire in GWT.

Il processo di lunga durata viene attivato da una chiamata RPC GWT, nel qual caso si dispone del punto di accesso oppure, in tal caso, è necessario avviarlo manualmente.

Ricorda che le chiamate RPC GWT sono asincrone, quindi non è necessario restituirle immediatamente. È necessaria una chiamata RPC come checkStatus () . Quindi puoi fare cose come:

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 nel tuo servizio RPC:

void checkStatus(AsyncCallback<JobStatus> callback);

Il tuo server può richiedere fino a quando gli piace (entro limiti ragionevoli) per tornare da checkStatus (). Può tornare perché il lavoro è terminato o semplicemente con un aggiornamento dello stato del lavoro. Quanto sopra continuerà ad essere ripetuto fino a quando non viene impostato il flag di stato del lavoro completato.

Altri suggerimenti

Penso che dipenda dal tuo processo, ma se hai intenzione di fare qualcosa come lo streaming di dati, puoi utilizzare la tecnica Server Push (o Comet) .GWT supporta l'implementazione di Comet. google GWT + Comet, o GWT + COMET + Tomcat, ho letto su cometa e gwt in "Applicazioni Google Web Toolkit" Libro (gwtapps.com).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top