You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by re...@apache.org on 2014/05/30 16:20:16 UTC
svn commit: r1598612 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document:
DocumentNodeStoreService.java rdb/RDBDataSourceFactory.java
Author: reschke
Date: Fri May 30 14:20:16 2014
New Revision: 1598612
URL: http://svn.apache.org/r1598612
Log:
OAK-1708 - default the JDBC driver class name from the JDBC URI, when needed
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java?rev=1598612&r1=1598611&r2=1598612&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreService.java Fri May 30 14:20:16 2014
@@ -214,29 +214,10 @@ public class DocumentNodeStoreService {
String bsdriver = System.getProperty("oakbs.jdbc.driver.class", "");
// document store
- if (dsdriver.length() > 0) {
- log.info("trying to load {}", dsdriver);
-
- try {
- Class.forName(dsdriver);
- } catch (ClassNotFoundException ex) {
- log.error("driver " + dsdriver + " not loaded", ex);
- }
- } else {
+ if (dsdriver.length() == 0) {
log.info("System property oak.jdbc.driver.class not set.");
}
- // blob store
- if (bsdriver.length() > 0) {
- log.info("trying to load {}", bsdriver);
-
- try {
- Class.forName(bsdriver);
- } catch (ClassNotFoundException ex) {
- log.error("driver " + bsdriver + " not loaded", ex);
- }
- }
-
if (log.isInfoEnabled()) {
String type = useMK ? "MK" : "NodeStore";
log.info(
@@ -244,14 +225,14 @@ public class DocumentNodeStoreService {
type, jdbcuri, bsjdbcuri, cacheSize, offHeapCache, changesSize);
}
- DataSource ds = RDBDataSourceFactory.forJdbcUrl(jdbcuri, dsusername, dspasswd);
+ DataSource ds = RDBDataSourceFactory.forJdbcUrl(jdbcuri, dsusername, dspasswd, dsdriver);
if (bsjdbcuri.length() == 0) {
mkBuilder.setRDBConnection(ds);
log.info("Connected to datasource {}", ds);
} else {
- DataSource dsbs = RDBDataSourceFactory.forJdbcUrl(bsjdbcuri, bsusername, bspasswd);
+ DataSource dsbs = RDBDataSourceFactory.forJdbcUrl(bsjdbcuri, bsusername, bspasswd, bsdriver);
mkBuilder.setRDBConnection(ds, dsbs);
- log.info("Connected to datasources {}{}", ds, dsbs);
+ log.info("Connected to datasources {} {}", ds, dsbs);
}
} else {
MongoClientOptions.Builder builder = MongoConnection.getDefaultBuilder();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java?rev=1598612&r1=1598611&r2=1598612&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDataSourceFactory.java Fri May 30 14:20:16 2014
@@ -24,6 +24,7 @@ import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
+import java.util.Locale;
import java.util.logging.Logger;
import javax.sql.DataSource;
@@ -39,7 +40,31 @@ public class RDBDataSourceFactory {
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(RDBDataSourceFactory.class);
- public static DataSource forJdbcUrl(String url, String username, String passwd) {
+ public static DataSource forJdbcUrl(String url, String username, String passwd, String driverName) {
+
+ // load driver class when specified
+ if (driverName != null && !driverName.isEmpty()) {
+ LOG.info("trying to load {}", driverName);
+
+ try {
+ Class.forName(driverName);
+ } catch (ClassNotFoundException ex) {
+ LOG.error("driver " + driverName + " not loaded", ex);
+ }
+ } else {
+ // try to determine driver from JDBC URL
+ String defaultDriver = driverForDBType(jdbctype(url));
+ if (defaultDriver != null) {
+ LOG.info("trying to load {}", defaultDriver);
+
+ try {
+ Class.forName(defaultDriver);
+ } catch (ClassNotFoundException ex) {
+ LOG.error("driver " + defaultDriver + " not loaded", ex);
+ }
+ }
+ }
+
try {
BasicDataSource bds = new BasicDataSource();
LOG.debug("Getting Dricer for " + url);
@@ -56,8 +81,44 @@ public class RDBDataSourceFactory {
}
}
+ public static DataSource forJdbcUrl(String url, String username, String passwd) {
+ return forJdbcUrl(url, username, passwd, null);
+ }
+
+ private static String jdbctype(String jdbcurl) {
+ if (jdbcurl == null) {
+ return null;
+ } else {
+ String t = jdbcurl.toLowerCase(Locale.ENGLISH);
+ if (!t.startsWith("jdbc:")) {
+ return null;
+ } else {
+ t = t.substring("jbdc:".length());
+ int p = t.indexOf(":");
+ if (p <= 0) {
+ return null;
+ } else {
+ return t.substring(0, p);
+ }
+ }
+ }
+ }
+
+ private static String driverForDBType(String type) {
+ if ("h2".equals(type)) {
+ return "org.h2.Driver";
+ } else if ("postgresql".equals(type)) {
+ return "org.postgresql.Driver";
+ } else if ("db2".equals(type)) {
+ return "com.ibm.db2.jcc.DB2Driver";
+ } else {
+ return "";
+ }
+ }
+
/**
- * A {@link Closeable} {@link DataSource} based on a {@link BasicDataSource}.
+ * A {@link Closeable} {@link DataSource} based on a {@link BasicDataSource}
+ * .
*/
private static class CloseableDataSource implements DataSource, Closeable {