package com.metrink.croquet.hibernate; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import org.apache.tomcat.jdbc.pool.DataSource; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.persist.PersistService; import com.google.inject.persist.UnitOfWork; import com.metrink.croquet.DataSourceFactory; /** * A Guice module that takes care of all the Hibernate bindings when using a data source. */ public class DataSourceHibernateModule extends AbstractModule { @SuppressWarnings("unused") private static final Logger LOG = LoggerFactory.getLogger(DataSourceHibernateModule.class); private final DataSourceFactory dataSourceFactory; /** * Constructor that takes the {@link DataSource} to use for all connections. * @param dataSourceFactory a factory for {@link DataSource}s. */ public DataSourceHibernateModule(final DataSourceFactory dataSourceFactory) { this.dataSourceFactory = dataSourceFactory; } @Override protected void configure() { // bind the ConnectionProvider bind(ConnectionProvider.class).to(TomcatJDBCConnectionProvider.class); bind(PersistService.class).to(CroquetPersistService.class); bind(UnitOfWork.class).to(CroquetPersistService.class); bind(EntityManager.class).toProvider(CroquetPersistService.class); bind(EntityManagerFactory.class).toProvider(CroquetPersistService.EntityManagerFactoryProvider.class); } /** * A provider for {@link DataSource}s. * @return a {@link DataSource}. */ @Provides public DataSource dataSourceProvider() { return dataSourceFactory.getDataSource(); } }