/*
 * Copyright 2010 Google 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 com.google.gwt.dev.shell.jetty;

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Enumeration;

/**
 * Workaround hack for the unfortunate architecture of JDBC drivers.
 * 
 * If code loaded by WebAppClassLoader loads a JDBC driver, then it will pin the
 * class loader across server refresh because java.sql.DriverManager is a system
 * class and it maintains a static reference to any loaded drivers.
 */
public class JDBCUnloader {
 
  public static void unload() {
    Enumeration<Driver> drivers = DriverManager.getDrivers();
    
    try {
      while (drivers.hasMoreElements()) {
        Driver driver = drivers.nextElement();
        DriverManager.deregisterDriver(driver);
      }
    } catch (SQLException e) {
      throw new RuntimeException("Error unloading the JDBC Drivers", e);
    }
  }

  private JDBCUnloader() {
  }
}
