[hibernate-dev] Exceptions thrown in a tx synchronization are eaten
Emmanuel Bernard
emmanuel at hibernate.org
Tue Mar 30 05:43:30 EDT 2010
I tend to agree. The problem today is that you cannot forward / signal the exception to the upper levels.
In an ideal world, a Synchronization should swallow exceptions (or do whatever it wants with it) if the exception should not tamper with the main Hibernate execution. In a word, Synchronization would be in control. It has my preference but It's a change of semantic.
Adam's solution of rethrowing if the tx is marked for rollback is less invasive but I find that a bit too magic.
I am not a big fan of Hernán's solution as it forces the synchro to raise a specific exception and it does not work in JTA as Hibernate is no longer in control.
On 29 mars 2010, at 22:17, Adam Warski wrote:
> Hello,
>
>> The main reason is because allowing these exceptions to be (re-)thrown
>> opens up mixed heuristic issues.
>>
>> Also bear in mind that we have no clue about the nature of the process
>> being performed by the synch. It highly likely that "failure" of the
>> synch should *not* rollback the main transaction. This is really one of
>> the 50/50 data points. We really just do not know, and the contract
>> gives us no way to know. However, if rolling back is that important it
>> is in fact possible in any case i can imagine to pass the
>> o.h.Transaction into the Synchronization constructor and actually roll
>> it back if an error occurs.
>
> Right. Then I was thinking about two solutions:
> 1) as Hernan wrote above
> 2) check if the TX wasn't rolled back by the synchronization (tx.isMarkedForRollBack or sth similar) explicitly. If so, rethrow the exception.
>
> --
> Adam Warski
> http://www.warski.org
> http://www.softwaremill.eu
>
>
>
>
>
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev
More information about the hibernate-dev
mailing list