dev@glassfish.java.net

Re: handling unexpected exceptions

From: Craig L Russell <Craig.Russell_at_Sun.COM>
Date: Thu, 14 May 2009 09:39:57 -0700

On May 14, 2009, at 9:06 AM, Bill Shannon wrote:

> Craig L Russell wrote:
>> On May 14, 2009, at 12:21 AM, Bill Shannon wrote:
>>> Craig L Russell wrote:
>>>> Hi Bill,
>>>> On May 13, 2009, at 5:39 PM, Bill Shannon wrote:
>>>>> I have a bunch of code in JavaMail that looks roughly like this:
>>>>>
>>>>> try {
>>>>> // do something that might fail for unknown reasons
>>>>> } catch (Exception ex) {
>>>>> // clean up, close connections, etc.
>>>>> throw MyException();
>>>>> // or...
>>>>> return null;
>>>>> // or...
>>>>> continue;
>>>>> }
>>>>>
>>>>> The "do something" can fail for lots of reasons - NPE,
>>>>> IOException, etc. -
>>>>> usually several levels deep. No matter what goes wrong I want
>>>>> to detect
>>>>> the failure and clean things up, especially making sure not to
>>>>> leave any
>>>>> connections open.
>>>>>
>>>>> FindBugs complains about this because "do something" doesn't throw
>>>>> Exception.
>>>>>
>>>> If do something doesn't throw Exception, you can catch
>>>> RuntimeException or Throwable depending on whether you're
>>>> prepared for just RuntimeException or Error conditions.
>>>
>>> Often "do something" throws some checked exception, so I need to
>>> handle
>>> it *and* the possible RuntimeExceptions.
>> This seems to be the crux of the FindBugs complaint.
>> So IOException gets wrapped in RuntimeException which catch
>> (RuntimeException) would catch and FindBugs would not complain.
>
> No, "do something" often is declared to throw a checked exception.

If FindBugs complains that you are catching Exception instead of
catching the specific checked exception, that's a bug in FindBugs
IMHO. No one should be forced to catch every specific exception if
they all have common treatment (clean up, wrap, and throw).

[sorry for the distraction]

Craig
>
> In addition to these "normal" failures, it can fail for many
> unexpected
> reasons, throwing a RuntimeException. I need to catch both. I could
> have two catch blocks, of course, but that's pretty ugly too.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe_at_glassfish.dev.java.net
> For additional commands, e-mail: dev-help_at_glassfish.dev.java.net
>

Craig L Russell
Architect, Sun Java Enterprise System http://db.apache.org/jdo
408 276-5638 mailto:Craig.Russell_at_sun.com
P.S. A good JDO? O, Gasp!