aboutsummaryrefslogtreecommitdiff
path: root/src/org
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2015-12-24 09:33:21 +1300
committerAnton Tananaev <anton.tananaev@gmail.com>2015-12-24 09:33:21 +1300
commite44d97da1b951f938a0d6ade76eef559d4626f3c (patch)
treeb126cc8c009b5f92f881f7b1ef63fb0379202fde /src/org
parentc1eb91d66a9f70ae10285f0b2d2fe82830fc5876 (diff)
downloadtraccar-server-e44d97da1b951f938a0d6ade76eef559d4626f3c.tar.gz
traccar-server-e44d97da1b951f938a0d6ade76eef559d4626f3c.tar.bz2
traccar-server-e44d97da1b951f938a0d6ade76eef559d4626f3c.zip
Dynamically add driver path to classpath
Diffstat (limited to 'src/org')
-rw-r--r--src/org/traccar/database/DataManager.java26
-rw-r--r--src/org/traccar/helper/DriverDelegate.java71
2 files changed, 11 insertions, 86 deletions
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();
- }
-
-}