我常常有这种模式:(虚构的例子)
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
,但即使这样也无法完成工作,因为我想抛出一个已检查的异常。
我该如何处理此类案件?