Package com.alibaba.wasp.jdbc

Source Code of com.alibaba.wasp.jdbc.Driver

/**
* Copyright The Apache Software Foundation
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with this
* work for additional information regarding copyright ownership. The ASF
* licenses this file to you 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.alibaba.wasp.jdbc;

import com.alibaba.wasp.FConstants;
import org.apache.commons.lang.NotImplementedException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

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

/**
* JDBC<com.alibaba.wasp.jdbc.Driver>.Please use
* code<Class.forName("com.alibaba.wasp.jdbc.Driver");>
*
*/
public class Driver implements java.sql.Driver {

  private static Log log = LogFactory.getLog(Driver.class);

  private static final Driver INSTANCE = new Driver();
  private static final String DEFAULT_URL = "jdbc:default:connection";
  private static final ThreadLocal<Connection> DEFAULT_CONNECTION = new ThreadLocal<Connection>();

  private static volatile boolean registered;

  static {
    load();
  }

  /**
   * Open a database connection. This method should not be called by an
   * application. Instead, the method DriverManager.getConnection should be
   * used.
   *
   * @param url
   *          the database URL
   * @param info
   *          the connection properties
   * @return the new connection or null if the URL is not supported
   */
  public Connection connect(String url, Properties info) throws SQLException {
    try {
      if (info == null) {
        info = new Properties();
      }
      if (!acceptsURL(url)) {
        return null;
      }
      if (url.equals(DEFAULT_URL)) {
        return DEFAULT_CONNECTION.get();
      }
      return new JdbcConnection(url, info);
    } catch (Exception e) {
      throw JdbcException.toSQLException(e);
    }
  }

  /**
   * Check if the driver understands this URL. This method should not be called
   * by an application.
   *
   * @param url
   *          the database URL
   * @return if the driver understands the URL
   */
  @Override
  public boolean acceptsURL(String url) {
    if (url != null) {
      if (url.startsWith(FConstants.START_URL)) {
        return true;
      } else if (url.equals(DEFAULT_URL)) {
        return DEFAULT_CONNECTION.get() != null;
      }
    }
    return false;
  }

  /**
   * Get the major version number of the driver. This method should not be
   * called by an application.
   *
   * @return the major version number
   */
  @Override
  public int getMajorVersion() {
    return FConstants.VERSION_MAJOR;
  }

  /**
   * Get the minor version number of the driver. This method should not be
   * called by an application.
   *
   * @return the minor version number
   */
  @Override
  public int getMinorVersion() {
    return FConstants.VERSION_MINOR;
  }

  /**
   * Get the list of supported properties. This method should not be called by
   * an application.
   *
   * @param url
   *          the database URL
   * @param info
   *          the connection properties
   * @return a zero length array
   */
  @Override
  public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) {
    return new DriverPropertyInfo[0];
  }

  /**
   * Check if this driver is compliant to the JDBC specification. This method
   * should not be called by an application.
   *
   * @return true
   */
  @Override
  public boolean jdbcCompliant() {
    return true;
  }

  /**
   * INTERNAL
   */
  public static synchronized Driver load() {
    try {
      if (!registered) {
        registered = true;
        DriverManager.registerDriver(INSTANCE);
      }
    } catch (SQLException e) {
      if(log.isErrorEnabled()) {
        log.error(e);
      }
    }
    return INSTANCE;
  }

  /**
   * INTERNAL
   */
  public static synchronized void unload() {
    try {
      if (registered) {
        registered = false;
        DriverManager.deregisterDriver(INSTANCE);
      }
    } catch (SQLException e) {
      if(log.isErrorEnabled()) {
        log.error(e);
      }
    }
  }

  /**
   * INTERNAL
   */
  public static void setDefaultConnection(Connection c) {
    DEFAULT_CONNECTION.set(c);
  }

  /**
   * INTERNAL
   */
  public static void setThreadContextClassLoader(Thread thread) {
    // This is very likely to create a memory leak.
    try {
      thread.setContextClassLoader(Driver.class.getClassLoader());
    } catch (Throwable t) {
      // ignore
    }
  }

  public Logger getParentLogger() throws SQLFeatureNotSupportedException {
    throw new NotImplementedException();
  }
}
TOP

Related Classes of com.alibaba.wasp.jdbc.Driver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.