As discussed yesterday this is a very valid point, the new code is only equivalent to the old one if the exception passed into to the interceptor could actually have been thrown by the intercepted method. With the current design of Collaborator though, it could have been a checked Exception
that was thrown by another interceptor.

This points to a lack in the Blueprint Collaborator implementation. So I will raise a bug against that to make sure checked Exception thrown by interceptors are appropriately converted into say UndeclaredThrowableExceptions before being passed
to further interceptors.

Valentin

On 31 Mar 2010, at 14:17, Lin Sun wrote:

Right the runtime exception was already handled before and the new
code covers it too. :)

I think it is reasonable to say that every exception that is not an
Error or a RuntimeException is a declared exception, but I am not sure
if it is a declared application exception.  It may or may not, for
example it could be an exception like SystemException from the
transaction manager.  IIUC, the previous code would not consider
SystemException an application exception and set the rollback only on
the transaction, while the new code won't.
Lin

On Wed, Mar 31, 2010 at 2:06 AM, Valentin Mahrwald
<[email protected]> wrote:

On 31 Mar 2010, at 06:58, Valentin Mahrwald wrote:

Yes, that is intended :)

The new logic does the same as the old only a bit more efficient in that every exception that is not an Error or a RuntimeException is a declared
exception.

There is one subtle difference though. A RuntimeException that is declared in the throws clause of a method is still treated as a RuntimeException and not a declared Exception. This is similar to what EJB does and I believe correct for our purposes (Joe Bohn also raised this as a bug previously,
ARIES 258).

Doh, shouldn't answer emails before breakfast. The RuntimeException case was already handled before, so the new code should in fact do exactly the same
as the old code (except more efficiently).

Regards,

Valentin

On 30 Mar 2010, at 21:04, Lin Sun wrote:


I noticed that this removed the previous checking of whether the ex is one of the method m declared exceptions. Method m is now not used at
all in this postCallWithException.  Is that intended?




Reply via email to