package li.hibernate; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; import li.dao.Trans; import org.hibernate.HibernateException; import org.hibernate.connection.ConnectionProvider; /** * @author 明伟 */ public class DataSourceConnectionProvider implements ConnectionProvider { private DataSource dataSource; public DataSource getDataSource() { if (null == this.dataSource) { this.dataSource = SessionFactory.DATASOURCE_THREADLOCAL.get(); } return this.dataSource; } public Connection getConnection() throws SQLException { try { Trans trans = Trans.current(); if (null == trans) { return this.getDataSource().getConnection(); } else { return trans.getConnection(this.getDataSource()); } } catch (Exception e) { throw new RuntimeException(e); } } public void closeConnection(Connection connection) throws SQLException { connection.close(); } public boolean supportsAggressiveRelease() { return false; } public void configure(Properties properties) throws HibernateException {} public void close() throws HibernateException {} }