All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jpattern.orm.datasource.DataSourceSessionProvider Maven / Gradle / Ivy

package com.jpattern.orm.datasource;

import java.sql.SQLException;

import javax.sql.DataSource;

import com.jpattern.logger.ILogger;
import com.jpattern.orm.logger.OrmLogger;
import com.jpattern.orm.mapper.DBTableMapBuilder;
import com.jpattern.orm.mapper.ITableMap;
import com.jpattern.orm.session.ISessionProvider;
import com.jpattern.orm.session.ISessionStrategy;

/**
 * 
 * @author Francesco Cina
 *
 * 21/mag/2011
 */
public class DataSourceSessionProvider implements ISessionProvider {

	private final ThreadLocal threadLocalConnection = new ThreadLocal();
	private final DataSource dataSource;
	private final ILogger logger = OrmLogger.getOrmLogger(getClass());
	
	public DataSourceSessionProvider(DataSource dataSource) {
		this.dataSource = dataSource;
	}
	
	@Override
	public ISessionStrategy getSessionStrategy() {
		return new DataSourceSessionStrategy(this);
	}

	@Override
	public void updateTableMap(ITableMap tableMap, boolean enableDBScan) throws SQLException {
		new DBTableMapBuilder(dataSource, tableMap , enableDBScan).updateTableMap();
	}
	
	final IConnection getConnection(boolean readOnly, IConnectionCaller connectionCaller) {
		logger.debug("getConnection", "new connection asked by " + connectionCaller );
		IConnection conn = threadLocalConnection.get();
		if (conn==null || !conn.isValid()) {
			logger.info("getConnection", "no valid connections found, a new one will be created");
			conn = new Connection(dataSource, readOnly);
			threadLocalConnection.set(conn);
		}
		conn.addCaller(connectionCaller);
		return conn;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy