Q: Do @Post* methods fire before commit or rollback?
Q: If they fire before the transaction is committed or rolledback, and the transaction actually fails (and a rollback occurs) do you still get the event?
Q: If you are running in a cluster with multiple servers does a @Post* method fire if the event occured on another server in the cluster?
Depending on your situation (and the answers to these questions) it either matters or not.
For me in using @Post* type methods (to maintain a Lucene Index for example) I specifically do not want to get notified of events that where rolled back (inserts that didn't actually happen). I want to know about inserts etc from other servers in the cluster.
The way I read the JPA spec it seems like the @Post* methods occur prior to commit or rollback. Note that @Pre* methods HAVE to occur prior to the commit, and this issue does not seem to be mentioned.
In regards to @Pre methods. The issue here is there seems no provision for actually overriding (or extending) the IUD logic. So for me, if your bean is based on say a file or a spreadsheet etc and you want to override the IUD and Find behaviour - I don't see Entity Listeners providing this type of functionality.
In your situations the JPA behaviour may be ok. The spec section 3.5 suggests portable apps should not make use of EntityManager or Query operations in Callback methods (which seems restrictive). I guess you are trying to use the same transaction for your audit master detail delete etc. (With Ebean I make the Transaction explicitly available).
All that said, I could be interpreting the spec wrong as there is no explicit mention of transactions (and especially rollbacks).