Your understanding is correct. The recoverer operates in its own transaction when using REQUIRES_NEW, which is why you see the behavior you described. If you want to maintain a clear separation between the listener's transaction and the error handling logic, using REQUIRES_NEW is a good approach.