From e44d97da1b951f938a0d6ade76eef559d4626f3c Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 24 Dec 2015 09:33:21 +1300 Subject: Dynamically add driver path to classpath --- src/org/traccar/database/DataManager.java | 26 +++++------ src/org/traccar/helper/DriverDelegate.java | 71 ------------------------------ 2 files changed, 11 insertions(+), 86 deletions(-) delete mode 100644 src/org/traccar/helper/DriverDelegate.java (limited to 'src/org') diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index e2e1d9f18..1ea0a3d31 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -17,10 +17,9 @@ package org.traccar.database; import com.mchange.v2.c3p0.ComboPooledDataSource; import java.io.File; +import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; -import java.sql.Driver; -import java.sql.DriverManager; import java.sql.SQLException; import java.util.Collection; import java.util.Date; @@ -37,7 +36,6 @@ import liquibase.exception.LiquibaseException; import liquibase.resource.FileSystemResourceAccessor; import liquibase.resource.ResourceAccessor; import org.traccar.Config; -import org.traccar.helper.DriverDelegate; import org.traccar.helper.Log; import org.traccar.model.Device; import org.traccar.model.MiscFormatter; @@ -83,22 +81,19 @@ public class DataManager implements IdentityManager { } else { - // Load driver + String driverFile = config.getString("database.driverFile"); + if (driverFile != null) { + URLClassLoader classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); + Method method = URLClassLoader.class.getDeclaredMethod("addURL", URL.class); + method.setAccessible(true); + method.invoke(classLoader, new File(driverFile).toURI().toURL()); + } + String driver = config.getString("database.driver"); if (driver != null) { - String driverFile = config.getString("database.driverFile"); - - if (driverFile != null) { - URL url = new URL("jar:file:" + new File(driverFile).getAbsolutePath() + "!/"); - URLClassLoader cl = new URLClassLoader(new URL[]{url}); - Driver d = (Driver) Class.forName(driver, true, cl).newInstance(); - DriverManager.registerDriver(new DriverDelegate(d)); - } else { - Class.forName(driver); - } + Class.forName(driver); } - // Initialize data source ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass(config.getString("database.driver")); ds.setJdbcUrl(config.getString("database.url")); @@ -112,6 +107,7 @@ public class DataManager implements IdentityManager { ds.setMaxPoolSize(maxPoolSize); } dataSource = ds; + } } diff --git a/src/org/traccar/helper/DriverDelegate.java b/src/org/traccar/helper/DriverDelegate.java deleted file mode 100644 index 3e7f0566d..000000000 --- a/src/org/traccar/helper/DriverDelegate.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) - * - * 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 org.traccar.helper; - -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; - -/** - * Database driver delegate - */ -public class DriverDelegate implements Driver { - - private final Driver driver; - - public DriverDelegate(Driver driver) { - this.driver = driver; - } - - @Override - public Connection connect(String url, Properties info) throws SQLException { - return driver.connect(url, info); - } - - @Override - public boolean acceptsURL(String url) throws SQLException { - return driver.acceptsURL(url); - } - - @Override - public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException { - return driver.getPropertyInfo(url, info); - } - - @Override - public int getMajorVersion() { - return driver.getMajorVersion(); - } - - @Override - public int getMinorVersion() { - return driver.getMinorVersion(); - } - - @Override - public boolean jdbcCompliant() { - return driver.jdbcCompliant(); - } - - public Logger getParentLogger() throws SQLFeatureNotSupportedException { - throw new SQLFeatureNotSupportedException(); - } - -} -- cgit v1.2.3