package com.shata.migration.connPool;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class MysqlConnFactory implements PooledObjectFactory<Connection> {
	private final static Logger log = LoggerFactory.getLogger(MysqlConnFactory.class);
	
	private String url;
	private String user;
	private String password;
	
	public MysqlConnFactory(String url, String user, String password) {
		this.url = url;
		this.user = user;
		this.password = password;
	}

	@Override
	public void activateObject(PooledObject<Connection> p) throws Exception {
		
	}

	@Override
	public void destroyObject(PooledObject<Connection> p) throws Exception {
		if(null != p) {
			Connection conn = p.getObject();
			if(null != conn) {
				conn.close();
			}
		}
	}

	@Override
	public PooledObject<Connection> makeObject() throws Exception {
		Connection conn = DriverManager.getConnection(url, user, password);
		return new DefaultPooledObject<Connection>(conn);
	}

	@Override
	public void passivateObject(PooledObject<Connection> p) throws Exception {
		
	}

	@Override
	public boolean validateObject(PooledObject<Connection> p) {
		if(null == p) {
			return false;
		}
		Connection conn = p.getObject();
		try {
			return conn.isValid(1);
		} catch (SQLException e) {
			log.error("连接不可用," + conn.toString());
			if(null != conn) {
				try {
					conn.close();
				} catch (SQLException e1) {
					log.error("连接关闭失败," + conn.toString(), e1);
				}
			}
		}
		return false;
	}

}