Situation was as follows:
- two edits made that would cause a unique index constraint violation in the database, and the other that (due to a programming bug) would cause a null pointer.
In IsisTransactionManager#endTransaction(), the abortCause gets set onto the IsisTransaction because of the unique constraint, causing Isis to attempt call abortTransaction(). However, there is no exception handling around this method, and a subsequent NPE is not captured for rendering.
In addition, in the wicket viewer, whenever an exception does occur and the transaction is aborted, the attempt to redirect to the error page will fail if the page requires a transaction. A new transaction should therefore be started.