Une méthode myMethod
,, appelle plusieurs exécutions parallèles et attend leur fin.
Ces exécutions parallèles peuvent se terminer par des exceptions. Obtient donc myMethod
une liste d'exceptions.
Je souhaite transmettre la liste d'exceptions en tant que cause racine, mais la cause racine peut être une seule exception. Bien sûr, je peux créer ma propre exception pour atteindre ce que je veux, mais je veux savoir si Java, Spring ou Spring Batch a quelque chose comme ça hors de la boîte.
AggregateException
qui contient une liste d'exceptions. Cette idée devrait également s'appliquer à Java.Réponses:
Je ne suis pas sûr que je le ferais (bien que étant donné le JavaDoc, je ne pourrais pas vous dire pourquoi j'hésite), mais il y a la liste des exceptions supprimées sur
Throwable
, que vous pouvez ajouter viaaddSuppressed
. Le JavaDoc ne semble pas dire que c'est uniquement pour la JVM à utiliser dans try-with-resources:Notez ce dernier paragraphe, qui semble convenir à votre cas.
la source
Les exceptions et leurs causes ne sont toujours qu'une chose 1: 1: vous pouvez lever une exception et chaque exception ne peut avoir qu'une seule cause (qui peut à nouveau avoir une cause ...).
Cela pourrait être considéré comme une erreur de conception, en particulier lorsque vous envisagez un comportement multithread comme vous l'avez décrit.
C'est l'une des raisons pour lesquelles Java 7 a ajouté
addSuppressed
à throwable qui peut essentiellement attacher une quantité arbitraire d'exceptions à une autre seule (l'autre motivation principale était d'essayer avec des ressources qui avait besoin d'un moyen de gérer les exceptions dans le bloc enfin sans abandonner silencieusement leur).Donc, fondamentalement, lorsque vous avez 1 exception qui entraîne l'échec de votre processus, vous ajoutez celle-ci comme cause de votre exception de niveau supérieur, et si vous en avez plus, vous les ajoutez à celle d'origine en utilisant
addSuppressed
. L'idée est que cette première exception a "supprimé" les autres devenant membre de la "chaîne d'exceptions réelle".Exemple de code:
la source