@Override
  protected void doBegin(final Object transaction, final TransactionDefinition definition) {
    JdbcTransactionObjectSupport txObject = (JdbcTransactionObjectSupport) transaction;

    try {
      super.doBegin(transaction, definition);
    } catch (TransactionException ex) {
      rollbackAfterFailedBegin(txObject);
      throw ex;
    } catch (Exception ex) {
      rollbackAfterFailedBegin(txObject);
      throw new CannotCreateTransactionException(
          "Could not open JPA EntityManager for transaction", ex);
    }
  }