WebJetHikariDataSource.java

package sk.iway.iwcm.system.dbpool;

import com.zaxxer.hikari.HikariDataSource;

import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.logging.Logger;

/**
 * https://github.com/brettwooldridge/HikariCP
 */
public class WebJetHikariDataSource implements ConfigurableDataSource {
    HikariDataSource originalSource;

    public WebJetHikariDataSource(HikariDataSource source)
    {
        originalSource = source;
    }

    @Override
    public void destroy() throws SQLException {
        originalSource.close();
    }

    public void setConnectionProperty(String key, String value) {
        originalSource.addDataSourceProperty(key, value);
    }

    @Override
    public String getDriverClass() {
        return originalSource.getDriverClassName();
    }

    @Override
    public String getUser() {
        return originalSource.getUsername();
    }

    @Override
    public void setDriverClass(String driverClass) {
        originalSource.setDriverClassName(driverClass);
    }

    @Override
    public void setInitialPoolSize(int initialPoolSize) {
        originalSource.setMinimumIdle(initialPoolSize);
    }

    public void setMinPoolSize(int minActive) {
        originalSource.setMinimumIdle(minActive);
    }

    public void setMaxPoolSize(int maxPoolSize)
    {
        originalSource.setMaximumPoolSize(maxPoolSize);
    }

    @Override
    public void setJdbcUrl(String jdbcUrl) {
        originalSource.setJdbcUrl(jdbcUrl);
    }

    @Override
    public void setMaxStatements(int maxStatements) {
        // ???
    }

    @Override
    public void setPassword(String password) {
        originalSource.setPassword(password);
    }

    @Override
    public void setPreferredTestQuery(String preferredTestQuery) {
        originalSource.setConnectionInitSql(preferredTestQuery);
        //documentation says do not set testSql, it will use JDBC4 isValid instead
    }

    @Override
    public void setUser(String user) {
        originalSource.setUsername(user);
    }

    @Override
    public int getNumActive() {
        return originalSource.getHikariPoolMXBean().getActiveConnections();
    }

    @Override
    public int getNumIdle() {
        return originalSource.getHikariPoolMXBean().getIdleConnections();
    }

    @Override
    public int getNumTotal() {

        return originalSource.getHikariPoolMXBean().getTotalConnections();
    }

    @Override
    public int getNumWaiting() {
        return originalSource.getHikariPoolMXBean().getThreadsAwaitingConnection();
    }

    @Override
    public Connection getConnection() throws SQLException {
        return originalSource.getConnection();
    }

    @Override
    public Connection getConnection(String username, String password) throws SQLException {
        return originalSource.getConnection(username, password);
    }

    @Override
    public <T> T unwrap(Class<T> iface)
    {
        try {
            return originalSource.unwrap(iface);
        } catch (SQLException e) {
            return null;
        }

    }

    @Override
    public boolean isWrapperFor(Class<?> iface)
    {
        try {
            return originalSource.isWrapperFor(iface);
        } catch (SQLException e) {
            return false;
        }
    }

    @Override
    public PrintWriter getLogWriter() throws SQLException {
        return originalSource.getLogWriter();
    }

    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {
        originalSource.setLogWriter(out);
    }

    @Override
    public void setLoginTimeout(int seconds) throws SQLException {
        originalSource.setLoginTimeout(seconds);
    }

    @Override
    public int getLoginTimeout() throws SQLException {
        return originalSource.getLoginTimeout();
    }

    @Override
    public Logger getParentLogger() throws SQLFeatureNotSupportedException {
        return originalSource.getParentLogger();
    }
}