@Override
 public T beforeCommit(TransactionData data) throws Exception {
   if (willFail) {
     throw new Exception("Just failing commit, that's all");
   }
   return source.beforeCommit(data);
 }
 @Override
 public void afterRollback(TransactionData data, T state) {
   source.afterRollback(data, state);
 }
 @Override
 public void afterCommit(TransactionData data, T state) {
   source.afterCommit(data, state);
 }