Algún método, myMethod
invoca varias ejecuciones paralelas y espera sus terminaciones.
Estas ejecuciones paralelas pueden terminar con excepciones. Entonces myMethod
obtiene una lista de excepciones.
Quiero pasar la lista de excepciones como causa raíz, pero la causa raíz podría ser solo una excepción. Claro que puedo crear mi propia excepción para lograr lo que quiero, pero quiero saber si Java, Spring o Spring Batch tienen algo como esto fuera de la caja.
AggregateException
que contiene una lista de excepciones. Esa idea también debería ser aplicable a Java.Respuestas:
No estoy seguro de hacerlo (aunque dado el JavaDoc no podría decirte por qué dudo), pero hay una lista de excepciones suprimidas
Throwable
, que puedes agregar a través deaddSuppressed
. JavaDoc no parece decir que esto sea solo para que la JVM lo use en try-with-resources:Tenga en cuenta el último párrafo, que parece adaptarse a su caso.
fuente
Las excepciones y sus causas son siempre solo una cosa 1: 1: puede lanzar una excepción y cada excepción solo puede tener una causa (que puede tener una causa ...).
Eso podría considerarse una falla de diseño, especialmente cuando se considera un comportamiento de subprocesos múltiples como lo describió.
Esa es una de las razones por las que Java 7 agregó
addSuppressed
a tirar, que básicamente puede adjuntar una cantidad arbitraria de excepciones a una sola (la otra motivación principal fue probar con recursos que necesitaban una forma de manejar las excepciones en el bloque finalmente sin caer silenciosamente ellos).Entonces, básicamente, cuando tiene 1 excepción que hace que su proceso falle, agrega esa como la causa de su excepción de nivel superior, y si tiene más, entonces las agrega a la original usando
addSuppressed
. La idea es que esa primera excepción "suprimió" a los demás y se convirtieron en miembros de la "cadena de excepción real".Código de muestra:
fuente