package com.ahtik;

import net.sf.hibernate.HibernateException;
import net.sf.hibernate.Transaction;
import net.sf.hibernate.engine.SessionImplementor;
import net.sf.hibernate.transaction.TransactionFactory;

import org.apache.log4j.Logger;

import java.util.Properties;

/**
 * RollbackTransactionFactory is used for testing-environment where database
 * modifications must be rolled back.
 * 
 * To enable Rollback-only transaction factory you have to add
 * hibernate.transaction.factory_class=com.ahtik.RollbackTransactionFactory
 * to your hibernate properties.
 * 
 * @author ahti.kitsik@gmail.com
 * 
 */
public class RollbackTransactionFactory implements TransactionFactory {

  private final static Logger LOG = Logger
      .getLogger(RollbackTransactionFactory.class);

  public Transaction beginTransaction(SessionImplementor session)
      throws HibernateException {
    RollbackTransaction tx = new RollbackTransaction(session);
    tx.begin();
    LOG
        .debug("Returning Rollback-only transaction factory when starting transaction! Used only in testing!!");
    return tx;
  }

  public void configure(Properties props) throws HibernateException {
    // Configuring is not required
  }

}
