Ich habe einen Guava Cache mit einer CacheLoader
. Es gibt eine externe Bedingung, die ich in einem Thread track, und wenn dies passiert, möchte ich alle Einträge asynchron. Aus diesem Grund verwende ich invalidateAll()
nicht, da die nächste get()
warten müsste, bis die Last erfolgreich war.ungültig aktualisiert Eintrag in Guava CacheLoader
Stattdessen iterieren über die Schlüssel im Cache und refresh(k)
alle von ihnen, wie ich eine refreshAll() -Methode nicht finden konnte. Hier ist der Code (aber nicht wirklich auf die Frage bezogen):
Set<ResourceLoaderKey> keys = resourceLoaderCache.asMap().keySet();
for(ResourceLoaderKey k : keys)
{
resourceLoaderCache.refresh(k);
}
Mein Problem ist jetzt, dass reload()
im Cacheloader könnte erkennen, dass eine Ressource ist eigentlich nicht mehr zur Verfügung. Derzeit löst die reload()
eine ResourceNotFound-Ausnahme aus, die für den get()
-Fall funktioniert. Aber es funktioniert nicht für den Fall, da der alte Wert bedient wird, solange der reload()
fehlschlägt.
Ich kann jetzt die nicht gefundene Ausnahme in den Lade/Neuladen-Methoden abfangen und den Eintrag irgendwie ungültig machen, aber ich frage mich, ob es eine offizielle Möglichkeit gibt (Null oder ein Null Zukunft wird als Warnung protokolliert und ignoriert)? Es wäre gut, in der Lage zu sein, den Schlüssel/Abwesend-Wert zu entfernen, anstatt ein Platzhalterobjekt herum zu halten.
ähnliches Problem hier, meine aktuelle Lösung hässlich ist, wollen eine unterstützte Art und Weise war dies – Stephan