/** * */ package com.googlecode.tawus.hibernate.internal.advices; import java.sql.Connection; import java.sql.SQLException; import org.apache.tapestry5.ioc.Invocation; import org.apache.tapestry5.ioc.MethodAdvice; import com.googlecode.tawus.hibernate.services.HibernateSessionManager; public final class TransactionIsolationAdvice implements MethodAdvice { private String factoryID; private HibernateSessionManager sessionManager; private int isolation; public TransactionIsolationAdvice(final String factoryID, int isolation, HibernateSessionManager sessionManager) { this.factoryID = factoryID; this.sessionManager = sessionManager; this.isolation = isolation; } @Override @SuppressWarnings("deprecation") public void advise(Invocation invocation) { Connection connection = sessionManager.getSession(factoryID) .connection(); int oldIsolation = setIsolation(connection, isolation); invocation.proceed(); setIsolation(connection, oldIsolation); } private int setIsolation(Connection connection, int isolation) { try { int oldIsolation = connection.getTransactionIsolation(); connection.setTransactionIsolation(isolation); return oldIsolation; } catch (SQLException e) { throw new RuntimeException(e); } } }