Gopinathan A - This looks good in general. There is a small problem with the patch though. It is possible that the tx.close gets called without a tx.rollback if a failure happens in the try block and not in putEventsAndCommit method. For example, if channel.take() or serializer.getActions() throws an exception. We must handle this case. One way of doing this is by not doing the rollback in the putEventsAndCommit method, instead allowing the exception thrown in that method to get thrown into the process method where we catch it and rollback and then close.