J'essaie d'utiliser le Google Guava Cache pour mettre en cache par des objets liés au service. En cache miss, j'utilise mon client REST pour récupérer l'objet. Je sais que je peux le faire de la manière suivante:Guava CacheLoader jeter et attraper des exceptions personnalisées
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)
Maintenant, client.getKey(Key k)
lancers francs et fait InternalServerException
ResourceNotFoundException
. Lorsque je tente d'utiliser cette instance de cache pour obtenir l'objet, je peux attraper l'exception en tant que ExecutionException
.
try {
cache.get(key);
} catch (ExecutionException e){
}
Mais, je voudrais attirer spécifiquement et gérer les exceptions que le CacheLoader que je l'ai défini est de lancer (i.e.. InternalServerException
et ResourceNotFoundException
).
Je ne suis pas sûr de vérifier si l'instance de ExecutionException
est l'un de mes propres exceptions fonctionnerait soit, provoquer la signature de la méthode load() lance effectivement Exception
et non ExecutionException
. Même si je pouvais utiliser instanceof
, cela ne semble pas très propre. Y a-t-il de bonnes façons d'aborder cela?