Ahhhh, Hibernate Search has the same problem but I could not pin point the issue. Can you point me to the temp patch approach you're using.
On 10 juil. 2010, at 10:05, Adam Warski wrote: > Hello, > > because the thread is a bit old a small reminder what it was about: > Envers used TX Synchronizations to write the audit data to a database, before > the transaction completed. However, exceptions thrown during a > synchronization are "eaten" (JDBCTransaction:274). The solution then was to > use, instead of a Synchronization, a BeforeTransactionCompletionProcess. > > This, however, as it turns out, causes big problems in a JTA environment > (with resource-local txs all works fine): audit records are sometimes not > written. This is because the before tx completion process is called before tx > synchronizations, and in JTA the auto-flush at the end of a session is done > using a TX synchronization (AbstractEntityManagerImpl:1020). And it doesn't > look like exceptions are eaten when thrown from a synchronization in JTA - > otherwise any exception that occurred during a flush would go unnoticed (and > I know from practice this doesn't happen ;) ). > > So isn't this inconsistent? Shouldn't the exceptions in JDBCTransaction be > rethrown as well? > > For now a fix is to register both a BTCP and a TX Sync to write the audit > records, but I'd say it's rather a temporary patch :) > > On Mar 31, 2010, at 1:00 PM, Adam Warski wrote: > >> >>> 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. >> >> Then maybe do as Steve suggested, either: >> - introduce a new method to Synchronization (that would break existing >> synchronizations) >> or >> - introduce a new interface SynchronizationRollback which can be optionally >> implemented by the synchronization method >> Then in JDBC transaction we could do: >> >> if ((sync instanceof SynchronizationRollback) && ((SynchronizationRollback) >> sync).shouldRollback(exception) { // rollback } >> >> -- >> Adam Warski >> http://www.warski.org >> http://www.softwaremill.eu >> >> >> >> >> >> _______________________________________________ >> hibernate-dev mailing list >> hibernate-dev@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/hibernate-dev > > -- > Adam Warski > http://www.warski.org > http://www.softwaremill.eu > > > > > > _______________________________________________ > hibernate-dev mailing list > hibernate-dev@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/hibernate-dev _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev