Nella mia applicazione GWT mi riferisco spesso più volte agli stessi risultati del server. Inoltre non so quale codice venga eseguito per primo. Pertanto, desidero utilizzare la memorizzazione nella cache dei risultati asincroni (lato client).Come memorizzare nella cache i risultati del server in GWT con guava?
Desidero utilizzare una libreria di memorizzazione nella cache esistente; Sto considerando guava-gwt.
Ho trovato questo esempio di Guava sincrona cache (in guava's documentation):
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
Questo è il modo che sto cercando di utilizzare una cache Guava in modo asincrono (non ho idea di come fare questo lavoro):
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
// I want to do something asynchronous here, I cannot use Thread.sleep in the browser/JavaScript environment.
service.createExpensiveGraph(key, new AsyncCallback<Graph>() {
public void onFailure(Throwable caught) {
// how to tell the cache about the failure???
}
public void onSuccess(Graph result) {
// how to fill the cache with that result???
}
});
return // I cannot provide any result yet. What can I return???
}
});
GWT manca molte classi dal default JRE (soprattutto per quanto riguarda le discussioni e concurrancy).
Come posso utilizzare guava-gwt per memorizzare nella cache risultati asincroni?
Quello che vuoi non è così difficile da implementare, dipende solo da te aggiungere un callback di successo al "FutureResult''. Aggiornerò un esempio di codice sorgente per riflettere la mia idea. Ma dovresti capire che il callback verrà chiamato solo una volta al primo caricamento (che verrà memorizzato nella cache). Quindi, dopo il callback, '' result.isDone'' sarà vero. – Babl
Controlla invece CompletableFuture - si comporta più come una Promessa, anche se dovrai lanciare delle eccezioni se qualcuno usa uno dei metodi Future bloccanti. –
@ColinAlworth supporta GWT 'CompletableFuture'? – Babl