I noticed that TransactionTemplate.execute() calls on action.doTransaction(status), and catches RuntimeException, Error, and then Exception.
Since TransactionCallback.doTransaction() does not declared any checked exception to be thrown, I don't see how the last catch Exception will happen. Seems like unreachable code to me.
Did I miss anything?