package com.vladmihalcea.flexypool.adaptor;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.vladmihalcea.flexypool.common.ConfigurationProperties;
import com.vladmihalcea.flexypool.metric.Metrics;
/**
* <code>C3P0PoolAdapter</code> extends {@link AbstractPoolAdapter} and it adapts the required API to
* communicate with the c3p0 {@link ComboPooledDataSource}
*
* @author Vlad Mihalcea
* @since 1.0
*/
public class C3P0PoolAdapter extends AbstractPoolAdapter<ComboPooledDataSource> {
public static final String ACQUIRE_TIMEOUT_MESSAGE = "An attempt by a client to checkout a Connection has timed out.";
/**
* Singleton factory object reference
*/
public static final PoolAdapterFactory<ComboPooledDataSource> FACTORY = new PoolAdapterFactory<ComboPooledDataSource>() {
@Override
public PoolAdapter<ComboPooledDataSource> newInstance(
ConfigurationProperties<ComboPooledDataSource, Metrics, PoolAdapter<ComboPooledDataSource>> configurationProperties) {
return new C3P0PoolAdapter(configurationProperties);
}
};
/**
* {@inheritDoc}
*/
public C3P0PoolAdapter(ConfigurationProperties<ComboPooledDataSource, Metrics, PoolAdapter<ComboPooledDataSource>> configurationProperties) {
super(configurationProperties);
}
/**
* {@inheritDoc}
*/
@Override
public int getMaxPoolSize() {
return getTargetDataSource().getMaxPoolSize();
}
/**
* {@inheritDoc}
*/
@Override
public void setMaxPoolSize(int maxPoolSize) {
getTargetDataSource().setMaxPoolSize(maxPoolSize);
}
/**
* {@inheritDoc}
*/
@Override
protected boolean isAcquireTimeoutException(Exception e) {
return e.getMessage() != null && ACQUIRE_TIMEOUT_MESSAGE.equals(e.getMessage());
}
}