package de.hilling.junit.cdi.jee.jpa.hibernate; import java.sql.Connection; import java.sql.SQLException; import javax.enterprise.context.RequestScoped; import javax.enterprise.inject.Instance; import javax.inject.Inject; import javax.persistence.EntityManager; import org.hibernate.internal.SessionImpl; import de.hilling.junit.cdi.jee.jpa.ConnectionWrapper; import de.hilling.junit.cdi.jee.jpa.DatabaseCleaner; @RequestScoped public class HibernateConnectionWrapper implements ConnectionWrapper { @Inject private Instance<DatabaseCleaner> cleaner; @Inject private EntityManager entityManager; @Override public boolean runWithConnection() { Object delegate = entityManager.getDelegate(); if (delegate instanceof SessionImpl) { SessionImpl session = (SessionImpl) delegate; if(!cleaner.isUnsatisfied()) { session.doWork(new org.hibernate.jdbc.Work() { @Override public void execute(Connection connection) throws SQLException { cleaner.get().run(connection); } }); } return true; } else { return false; } } }