com.ibm.xsp.extlib.relational.jdbc.datasource.dbcp.DbcpResourceFactory.java Source code

Java tutorial

Introduction

Here is the source code for com.ibm.xsp.extlib.relational.jdbc.datasource.dbcp.DbcpResourceFactory.java

Source

/*
 *  Copyright IBM Corp. 2010, 2015
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); 
 * you may not use this file except in compliance with the License. 
 * You may obtain a copy of the License at:
 * 
 * http://www.apache.org/licenses/LICENSE-2.0 
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 
 * implied. See the License for the specific language governing 
 * permissions and limitations under the License.
 */
package com.ibm.xsp.extlib.relational.jdbc.datasource.dbcp;

import java.io.PrintWriter;
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;
import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.ConnectionPoolDataSource;
import javax.sql.DataSource;

import org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS;
import org.apache.commons.dbcp.datasources.SharedPoolDataSource;

import com.ibm.designer.runtime.util.pool.PoolException;
import com.ibm.xsp.extlib.relational.RelationalLogger;
import com.ibm.xsp.extlib.relational.resources.IJdbcResourceFactory;

/**
 * @author dtaieb
 * @deprecated
 */
// Note, this class seems to be unused (2015-11-23 9.0.1N)
public class DbcpResourceFactory implements IJdbcResourceFactory {

    public static final String TYPE = "JDBC"; // $NON-NLS-1$
    private ConnectionPoolDataSource connectionPoolDataSource;
    private static DataSource ds;

    /**
     * 
     */
    public DbcpResourceFactory(final String dataSourceName, final String driverClass, final String url,
            final String userName, final String password, final int maxActive, final int maxIdle)
            throws PoolException {
        try {
            connectionPoolDataSource = AccessController
                    .doPrivileged(new PrivilegedExceptionAction<ConnectionPoolDataSource>() {
                        public ConnectionPoolDataSource run() throws Exception {
                            //Using the generic connection pool adapter from DBCP, todo, look how to use the connection pool datasource provided by each driver
                            DriverAdapterCPDS adapter = new DriverAdapterCPDS();
                            adapter.setMaxActive(maxActive);
                            adapter.setMaxIdle(maxIdle);
                            adapter.setUrl(url);
                            adapter.setUser(userName);
                            adapter.setPassword(password);
                            adapter.setDriver(driverClass);
                            SharedPoolDataSource tds = new SharedPoolDataSource();
                            tds.setConnectionPoolDataSource(adapter);
                            tds.setMaxActive(maxActive);

                            ds = tds;
                            return adapter;
                        }
                    });
        } catch (Exception e) {
            // "Unable to initialize the shared connection pool DataSource"
            String msg = com.ibm.xsp.extlib.relational.RelationalResourceHandler
                    .getSpecialAudienceString("DbcpPoolDataSource.Unabletoinitializethesharedconnec");//$NON-NLS-1$
            throw new PoolException(e, msg);
        }
    }

    public void checkTimeout(long arg0) {

    }

    public String getName() {
        return null;
    }

    public String getType() {
        return TYPE;
    }

    public void recycle() {
        if (connectionPoolDataSource != null) {
            try {

                connectionPoolDataSource.getClass().getMethod("close").invoke(connectionPoolDataSource); // $NON-NLS-1$
            } catch (NoSuchMethodException e) {
                //Do we still need this?
            } catch (Throwable t) {
                if (RelationalLogger.RELATIONAL.isWarnEnabled()) {
                    RelationalLogger.RELATIONAL.warnp(this, "recycle", t,
                            "Unhandled error recycling the connection pool"); // $NON-NLS-1$ $NLW-DbcpResourceFactory.Unhandlederrorrecyclingtheconnect-2$
                }
            }
        }
    }

    /* (non-Javadoc)
     * @see javax.sql.DataSource#getConnection()
     */
    public Connection getConnection() throws SQLException {
        //return createConnection();
        //return connectionPoolDataSource.getPooledConnection().getConnection();
        return ds.getConnection();

    }

    /* (non-Javadoc)
     * @see javax.sql.DataSource#getConnection(java.lang.String, java.lang.String)
     */
    public Connection getConnection(String username, String password) throws SQLException {
        //return connectionPoolDataSource.getPooledConnection(username, password).getConnection();
        return ds.getConnection(username, password);
    }

    /* (non-Javadoc)
     * @see javax.sql.CommonDataSource#getLogWriter()
     */
    public PrintWriter getLogWriter() throws SQLException {

        //return connectionPoolDataSource.getLogWriter();
        return ds.getLogWriter();
    }

    /* (non-Javadoc)
     * @see javax.sql.CommonDataSource#getLoginTimeout()
     */
    public int getLoginTimeout() throws SQLException {

        //return connectionPoolDataSource.getLoginTimeout();
        return ds.getLoginTimeout();
    }

    /* (non-Javadoc)
     * @see javax.sql.CommonDataSource#setLogWriter(java.io.PrintWriter)
     */
    public void setLogWriter(PrintWriter out) throws SQLException {
        connectionPoolDataSource.setLogWriter(out);

    }

    /* (non-Javadoc)
     * @see javax.sql.CommonDataSource#setLoginTimeout(int)
     */
    public void setLoginTimeout(int seconds) throws SQLException {
        connectionPoolDataSource.setLoginTimeout(seconds);

    }

    /* (non-Javadoc)
     * @see java.sql.Wrapper#isWrapperFor(java.lang.Class)
     */
    public boolean isWrapperFor(Class<?> arg0) throws SQLException {
        return false;
    }

    /* (non-Javadoc)
     * @see java.sql.Wrapper#unwrap(java.lang.Class)
     */
    public <T> T unwrap(Class<T> arg0) throws SQLException {
        return null;
    }

}