如何处理嵌套异常而不丢弃任何信息?

时间:2017-08-22 14:51:11

标签: java exception-handling nested

我常常有这种模式:(虚构的例子)

public void saveImage(Image image) throws ImageServiceException
{
    try
    {
        saveToDatabase(image); //private method saving image's meta data (id, name, infos etc.)
        saveToFile(image); //private method saving image's raw binary data
    }
    catch(SQLException ex)
    {
        throw new ImageServiceException("Could not save image into database", ex);
    }
    catch(IOException ex)
    {
        try
        {
            deleteFromDatabase(image);
        }
        catch(SQLException deletionEx) //exception is ignored !!!
        {
            throw new ImageServiceException("Could not save image on disk and could not delete image from database", ex);
        }

        throw new ImageServiceException("Could not save image on disk, database has been cleaned up", ex);
    }
}

我正在尝试为数据库保存一些关于图像的信息,然后将图像保存在磁盘上。如果它无法保存在磁盘上,我想回滚我在数据库中所做的事情。如果这也失败了,我无法记录这两个错误。我希望能够保留有关该方法中正在进行的操作的所有信息。我已经看到Java中没有AggregateException和C#中的:hover,但即使这样也无法完成工作,因为我想抛出一个已检查的异常。

我该如何处理此类案件?

0 个答案:

没有答案