Einige Methoden myMethod
rufen mehrere parallele Ausführungen auf und warten auf deren Beendigung.
Diese parallelen Ausführungen können mit Ausnahmen abgeschlossen werden. So myMethod
bekommt man eine Ausnahmeliste.
Ich möchte die Ausnahmeliste als Grundursache übergeben, aber die Grundursache ist möglicherweise nur eine einzige Ausnahme. Natürlich kann ich meine eigene Ausnahme erstellen, um das zu erreichen, was ich will, aber ich möchte wissen, ob Java, Spring oder Spring Batch so etwas sofort einsatzbereit haben.
AggregateException
eine Liste mit Ausnahmen. Diese Idee sollte auch auf Java anwendbar sein.Antworten:
Ich bin mir nicht sicher, ob ich es tun würde (obwohl ich Ihnen angesichts des JavaDoc nicht sagen konnte, warum ich zögere), aber es gibt eine Liste unterdrückter Ausnahmen
Throwable
, die Sie über hinzufügen könnenaddSuppressed
. Das JavaDoc scheint nicht zu sagen, dass dies nur für die JVM zum Ausprobieren von Ressourcen vorgesehen ist:Beachten Sie den letzten Absatz, der Ihrem Fall zu entsprechen scheint.
quelle
Ausnahmen und ihre Ursachen sind immer nur eine 1: 1-Sache: Sie können eine Ausnahme auslösen und jede Ausnahme kann nur eine Ursache haben (die wiederum eine Ursache haben kann ...).
Dies kann als Konstruktionsfehler angesehen werden, insbesondere wenn Sie das von Ihnen beschriebene Multithread-Verhalten berücksichtigen.
Dies ist einer der Gründe, warum Java 7
addSuppressed
zu throwable hinzugefügt wurde , wodurch grundsätzlich eine beliebige Anzahl von Ausnahmen an eine einzelne andere angehängt werden kann (die andere Hauptmotivation war das Ausprobieren von Ressourcen, die eine Möglichkeit benötigten, Ausnahmen im finally-Block zu behandeln, ohne sie stillschweigend fallen zu lassen Sie).Wenn Sie also eine Ausnahme haben, die dazu führt, dass Ihr Prozess fehlschlägt, fügen Sie diese als Ursache für Ihre übergeordnete Ausnahme hinzu. Wenn Sie eine weitere haben, fügen Sie diese mit der ursprünglichen Ausnahme hinzu
addSuppressed
. Die Idee ist, dass diese erste Ausnahme die anderen "unterdrückte", die Mitglied der "echten Ausnahmekette" wurden.Beispielcode:
quelle