Beberapa metode,, myMethod
memanggil beberapa eksekusi paralel dan menunggu penghentian mereka.
Eksekusi paralel ini dapat diakhiri dengan pengecualian. Jadi myMethod
mendapat daftar pengecualian.
Saya ingin meneruskan daftar pengecualian sebagai penyebab root, tetapi penyebab root mungkin hanya satu pengecualian. Tentu saya bisa membuat pengecualian sendiri untuk mencapai apa yang saya inginkan, tetapi saya ingin tahu apakah Java, Spring, atau Spring Batch memiliki sesuatu seperti ini di luar kotak.
AggregateException
yang berisi daftar pengecualian. Gagasan itu juga berlaku untuk Jawa.Jawaban:
Saya tidak yakin saya akan melakukannya (walaupun diberi JavaDoc, saya tidak dapat memberi tahu Anda mengapa saya ragu), tetapi ada daftar pengecualian yang ditekan
Throwable
, yang dapat Anda tambahkan melaluiaddSuppressed
. JavaDoc tampaknya tidak mengatakan ini hanya untuk JVM untuk digunakan dalam coba-dengan-sumber daya:Perhatikan bahwa paragraf terakhir, yang tampaknya sesuai dengan kasus Anda.
sumber
Pengecualian dan penyebabnya selalu hanya merupakan hal 1: 1: Anda dapat melemparkan satu pengecualian dan setiap pengecualian hanya dapat memiliki satu penyebab (yang sekali lagi dapat memiliki satu penyebab ...).
Itu bisa dianggap sebagai kesalahan desain, terutama ketika mempertimbangkan perilaku multi-threaded seperti yang Anda gambarkan.
Itulah salah satu alasan mengapa Java 7 ditambahkan
addSuppressed
ke throwable yang pada dasarnya dapat melampirkan jumlah pengecualian sewenang-wenang untuk satu sama lain (motivasi utama lainnya adalah sumber daya try-with-yang membutuhkan cara untuk menangani pengecualian di blok akhirnya tanpa diam-diam menjatuhkan mereka).Jadi pada dasarnya ketika Anda memiliki 1 pengecualian yang menyebabkan proses Anda gagal, Anda menambahkan satu sebagai penyebab pengecualian tingkat yang lebih tinggi, dan jika Anda memiliki lagi, maka Anda menambahkannya ke yang asli menggunakan
addSuppressed
. Idenya adalah bahwa pengecualian pertama "menekan" yang lain menjadi anggota dari "rantai pengecualian nyata".Kode sampel:
sumber