/** * */ package com.googlecode.tawus.hibernate.internal.advices; import org.apache.tapestry5.ioc.Invocation; import org.apache.tapestry5.ioc.MethodAdvice; import com.googlecode.tawus.hibernate.services.HibernateSessionManager; public class RequiredTransactionAdvice implements MethodAdvice { private HibernateSessionManager sessionManager; private String factoryID; public RequiredTransactionAdvice(String factoryID, HibernateSessionManager sessionManager) { this.sessionManager = sessionManager; this.factoryID = factoryID; } @Override public void advise(Invocation invocation) { boolean isNew = sessionManager.beginOrContinue(factoryID); if(!isNew){ invocation.proceed(); return; } try{ invocation.proceed(); sessionManager.commit(factoryID); }catch(Exception ex){ sessionManager.rollback(factoryID); throw new RuntimeException(ex); } } }