package com.vladmihalcea.flexypool.adaptor;
import com.vladmihalcea.flexypool.common.ConfigurationProperties;
import com.vladmihalcea.flexypool.metric.Metrics;
import org.apache.tomcat.jdbc.pool.DataSource;
import org.apache.tomcat.jdbc.pool.PoolExhaustedException;
/**
* <code>TomcatCPPoolAdapter</code> extends {@link AbstractPoolAdapter} and it adapts the required API to
* communicate with the Tomcat CP {@link DataSource}
*
* @author Vlad Mihalcea
* @since 1.1.0
*/
public class TomcatCPPoolAdapter extends AbstractPoolAdapter<DataSource> {
/**
* Singleton factory object reference
*/
public static final PoolAdapterFactory<DataSource> FACTORY = new PoolAdapterFactory<DataSource>() {
@Override
public PoolAdapter<DataSource> newInstance(
ConfigurationProperties<DataSource, Metrics, PoolAdapter<DataSource>> configurationProperties) {
return new TomcatCPPoolAdapter(configurationProperties);
}
};
/**
* Init constructor
*/
public TomcatCPPoolAdapter(ConfigurationProperties<DataSource, Metrics, PoolAdapter<DataSource>> configurationProperties) {
super(configurationProperties);
}
/**
* {@inheritDoc}
*/
@Override
public int getMaxPoolSize() {
return getTargetDataSource().getMaxActive();
}
/**
* {@inheritDoc}
*/
@Override
public void setMaxPoolSize(int maxPoolSize) {
getTargetDataSource().setMaxActive(maxPoolSize);
}
/**
* {@inheritDoc}
*/
@Override
protected boolean isAcquireTimeoutException(Exception e) {
return e instanceof PoolExhaustedException;
}
}