Ich versuche, den Google Guava Cache zum Zwischenspeichern von Service-Objekten zu verwenden. Bei Cache-Fehltreffer verwende ich meinen REST-Client, um das Objekt abzurufen. Ich weiß, dass ich dies auf folgende Weise tun:Guava CacheLoader werfen und fangen benutzerdefinierte Ausnahmen
CacheLoader<Key, Graph> loader = new CacheLoader<Key, Graph>() {
public Graph load(Key key) throws InternalServerException, ResourceNotFoundException {
return client.get(key);
}
};
LoadingCache<Key, Graph> cache = CacheBuilder.newBuilder().build(loader)
Nun client.getKey(Key k)
eigentlich InternalServerException
und ResourceNotFoundException
wirft. Wenn ich versuche, diese Cache-Instanz zum Abrufen des Objekts zu verwenden, kann ich die Ausnahme als ExecutionException
abfangen.
try {
cache.get(key);
} catch (ExecutionException e){
}
Aber ich möchte ausdrücklich fangen und die Ausnahmen zu behandeln, die die Cacheloader I definiert wirft (d. InternalServerException
und ResourceNotFoundException
).
Ich bin nicht sicher, ob die Überprüfung, ob die Instanz von ExecutionException
einen meiner eigenen Ausnahmen entweder funktionieren würde, bewirken, dass die Unterschrift der Last() Methode wirft tatsächlich Exception
und nicht ExecutionException
. Selbst wenn ich instanceof
verwenden könnte, scheint es nicht sehr sauber. Gibt es irgendwelche guten Ansätze dafür?