Ich suche eine Ausnahme FabrikJava Ausnahme Fabrik für höhere Ebene Ausnahmen
Ich habe einen Dienst zu erstellen, die zu verschiedenen Datenspeichern und diese Daten speichert eine Reihe von Ausnahmen werfen verbindet. Ich möchte diese Ausnahmen nicht an die Benutzer des Dienstes zurückgeben, sondern gebe stattdessen die Ausnahme höherer Ebene zurück, z. storeServiceTransientReadException
Bei der Verbindung mit dem Datenspeicher werde ich versuchen, fangen Wurfmuster; zB für eine Cassandra Verbindung:
public ResultSet safeExecute(Statement statement) throws StoreServiceException {
try {
return session.execute(statement);
}
catch(QueryExecutionException ex){
log.error(ex);
StoreServiceException storeException = StoreServiceExceptionFactory.getTransientException(ex);
throw storeException;
}
Im cassandra Beispiel ich die Fabrik soll eine Lese erstellen oder storeServiceException Ausnahme schreiben, je nachdem, ob die Ausnahme ist ein ReadFailureException, ReadTimeoutException, WriteFailureException oder WriteTimeoutException
Für andere Daten Ich möchte dem gleichen Muster folgen, dann müssen sich die Benutzer des Dienstes nur um die Dienstfehler und nicht um bestimmte Datenspeicherfehler kümmern.
Für die Fabrik Ich denke, etwas (in pseudo) entlang der Linien war:
public class ExceptionsFactory {
public StoreServiceTransientException getTransientException(Exception ex){
if ReadException
return StoreServiceTransientException("read exception ")
if WriteException
return StoreServiceTransientException("write exception ")
}
public StoreServiceNonTransientException getTransientNonException(Exception ex){
if ReadException
return StoreServiceNonTransientException("read exception ")
if WriteException
return StoreServiceNonTransientException("write exception ")
}
Aber ich kann nicht viele Online-Beispiel dafür finden, die mir Sorgen. Es ist eine wirklich schlechte Idee? Ich sollte nur viel spezifischere catch-Blöcke haben, die die storeServiceException zurückgeben, die ich möchte?
In Java ist es üblich, dass Klassennamen mit Großbuchstaben beginnen. 'StoreServiceTransientException' wäre eine schnelle, aber große Verbesserung – byxor
@byxor guten Punkt - Tippfehler meinerseits, wenn ich versuchte, das Beispiel generischer – JJHolloway