package util;
/**
* Typical usage:
* <pre>
* <code>
* new TranastionalUnitOfWork() {
* protected void doWork() {
* // Do some work
* }
* }.execute()
* </code>
* </pre>
* @author Vladimir Tsanev
*
*/
public abstract class TransactionalUnitOfWork {
/**
* The current session is accessible through
* {@link HibernateUtil#getSession()} method.
*/
protected abstract void doWork();
/**
* Executes this unit of work in Transaction context.
*/
public void execute() {
try {
HibernateUtil.getSession().beginTransaction();
doWork();
HibernateUtil.getSession().getTransaction().commit();
} catch (RuntimeException e) {
// Note that rollback closes the session
HibernateUtil.getSession().getTransaction().rollback();
throw e; // or display error message
}
}
}