All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.cdap.plugin.db.JDBCDriverShim Maven / Gradle / Ivy

There is a newer version: 1.11.2
Show newest version
/*
 * Copyright © 2019 Cask Data, Inc.
 *
 * 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 io.cdap.plugin.db;

import io.cdap.plugin.db.sink.ETLDBOutputFormat;
import io.cdap.plugin.db.source.DataDrivenETLDBInputFormat;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Properties;
import java.util.logging.Logger;

/**
 * Shim for JDBC driver as a better alternative to mere Class.forName to load the JDBC Driver class.
 * 

* From http://www.kfu.com/~nsayer/Java/dyn-jdbc.html * One problem with using

{@code Class.forName()}
to find and load the JDBC Driver class is that it * presumes that your driver is in the classpath. This means either packaging the driver in your jar, or having to * stick the driver somewhere (probably unpacking it too), or modifying your classpath. * But why not use something like URLClassLoader and the overload of Class.forName() that lets you specify the * ClassLoader?" Because the DriverManager will refuse to use a driver not loaded by the system ClassLoader. * The workaround for this is to create a shim class that implements java.sql.Driver. * This shim class will do nothing but call the methods of an instance of a JDBC driver that we loaded dynamically. * * @see DataDrivenETLDBInputFormat * @see ETLDBOutputFormat */ public class JDBCDriverShim implements Driver { private final Driver delegate; public JDBCDriverShim(Driver delegate) { this.delegate = delegate; } @Override public boolean acceptsURL(String url) throws SQLException { return delegate.acceptsURL(url); } @Override public Connection connect(String url, Properties info) throws SQLException { return delegate.connect(url, info); } @Override public int getMajorVersion() { return delegate.getMajorVersion(); } @Override public int getMinorVersion() { return delegate.getMinorVersion(); } @Override public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException { return delegate.getPropertyInfo(url, info); } @Override public boolean jdbcCompliant() { return delegate.jdbcCompliant(); } @Override public Logger getParentLogger() throws SQLFeatureNotSupportedException { return delegate.getParentLogger(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy