Chris Hostetter <[EMAIL PROTECTED]> wrote on 22/09/2006 18:27:40:

>
> : Indeed the first version I wrote followed the pattern you suggest
(let's
> : name it pattern_1 for the discussion). However with pattern_1 I could
not
> : cover the case of a method originally not throwing an exception. The
> : problem is that in pattern_1 we have to catch the exception before
deciding
> : whether to wait or not. But if the decision is not to wait, the caught
> : exception must be thrown, - which is not allowed by the original method
> : signature.
>
> Hmmm...  you're refering to methods like "filedExists" and "fileLength"
> right? ... if the method isn't declared to throw the ExceptionType, then
> the only way it can ever arrise from the super.call is if it's a runtime
> exception, in which case the pattern still holds...
>
>    ResultType methodName(ArgType args) {
>      long maxTime = System.currentTimeMillis() + maxTotalDelay;
>      while (true) {
>        try {
>          return super.methodName(args);
>        } catch (RuntimeException e) {
>          if (maxTime < System.currentTimeMillis()) throw e
>        }
>        wait(maxTime);
>      }
>    }
>
> ...right?

This assumes JRE methods without IOException in their signature would not
throw IOException, and methods with no Exception in there signature would
not throw anything but RuntimeExceptions. I preferred not to assume this,
specially because of dealing with these unexpected errors. Do you think
this is too protective? If so, a runtime exception can be caught and thrown
in these cases.

I now think there's a better option - still catch Exception in those
methods (cover the unexpected), but throw a RuntimeException that wraps
this exception. The code would be more readable - what do you think?

I think I would also add bound check on number of retries to avoid issues
with clock changes (mentioned recently in another thread). So there would
be two exit criteria - time passed (as now), and too many tries.

>
> : method is hardly ever called. Perhaps should mention in the waitMore
> : javadoc that these args are for debug mainly?
>
> if that's the indent then yeah, i would document it.
>

Will add that.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to