В моем приложении GWT я часто ссылаюсь несколько раз на те же результаты сервера. Я также не знаю, какой код выполняется первым. Поэтому я хочу использовать кеширование моих асинхронных (клиентских) результатов.
Я хочу использовать существующую библиотеку кеширования; Я рассматриваю guava-gwt.
Я нашел этот пример кеша Guava с синхронной (в документации guava):
LoadingCache<Key, Graph> graphs = CacheBuilder.newBuilder()
.build(
new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws AnyException {
return createExpensiveGraph(key);
}
});
Вот как я пытаюсь использовать кеш Guava асинхронно (я не знаю, как это сделать):
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 пропускает много классов из JRE по умолчанию (особенно в отношении потоков и совпадений).
Как я могу использовать guava-gwt для кеширования асинхронных результатов?