aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/model
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2013-08-02 20:20:45 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2013-08-02 20:20:45 +1200
commit0c9878c854000353f6b2f0e55e2887af30dc19ee (patch)
treefd0cbde3f1d896afc6cd312e38c2910e0b9f517b /src/org/traccar/model
parentee14c8ee6e5fe0e5ede618cf954841a131882196 (diff)
downloadtrackermap-server-0c9878c854000353f6b2f0e55e2887af30dc19ee.tar.gz
trackermap-server-0c9878c854000353f6b2f0e55e2887af30dc19ee.tar.bz2
trackermap-server-0c9878c854000353f6b2f0e55e2887af30dc19ee.zip
Dynamic JDBC driver loading
Diffstat (limited to 'src/org/traccar/model')
-rw-r--r--src/org/traccar/model/DatabaseDataManager.java23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/org/traccar/model/DatabaseDataManager.java b/src/org/traccar/model/DatabaseDataManager.java
index 7b98b73fb..ce781da1a 100644
--- a/src/org/traccar/model/DatabaseDataManager.java
+++ b/src/org/traccar/model/DatabaseDataManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com)
+ * Copyright 2012 - 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.
@@ -15,9 +15,13 @@
*/
package org.traccar.model;
+import java.io.File;
+import java.net.URL;
+import java.net.URLClassLoader;
import java.sql.*;
import java.util.*;
import org.traccar.helper.AdvancedConnection;
+import org.traccar.helper.DriverDelegate;
import org.traccar.helper.NamedParameterStatement;
/**
@@ -25,8 +29,7 @@ import org.traccar.helper.NamedParameterStatement;
*/
public class DatabaseDataManager implements DataManager {
- public DatabaseDataManager(Properties properties)
- throws ClassNotFoundException, SQLException {
+ public DatabaseDataManager(Properties properties) throws Exception {
initDatabase(properties);
}
@@ -40,13 +43,21 @@ public class DatabaseDataManager implements DataManager {
/**
* Initialize database
*/
- private void initDatabase(Properties properties)
- throws ClassNotFoundException, SQLException {
+ private void initDatabase(Properties properties) throws Exception {
// Load driver
String driver = properties.getProperty("database.driver");
if (driver != null) {
- Class.forName(driver);
+ String driverFile = properties.getProperty("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);
+ }
}
// Refresh delay