Author: shalin
Date: Fri Aug 29 00:00:48 2008
New Revision: 690131
URL: http://svn.apache.org/viewvc?rev=690131&view=rev
Log:
SOLR-726 -- Jdbc Drivers and DataSources fail to load if placed in multicore
sharedLib or core's lib directory.
Modified:
lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/ContextImpl.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder.java
Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Fri Aug 29 00:00:48
2008
@@ -35,6 +35,9 @@
2. SOLR-729: Context.getDataSource(String) gives current entity's DataSource
instance regardless of argument.
(Noble Paul, shalin)
+3. SOLR-726: Jdbc Drivers and DataSources fail to load if placed in multicore
sharedLib or core's lib directory.
+ (Noble Paul, shalin)
+
Other Changes
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/ContextImpl.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/ContextImpl.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/ContextImpl.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/ContextImpl.java
Fri Aug 29 00:00:48 2008
@@ -137,6 +137,6 @@
public SolrCore getSolrCore() {
- return dataImporter.getCore();
+ return dataImporter == null ? null : dataImporter.getCore();
}
}
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataConfig.java
Fri Aug 29 00:00:48 2008
@@ -262,7 +262,7 @@
DataImportHandlerException.SEVERE,
"<function> must have a 'name' and 'class' attributes");
try {
- evaluators.put(func, (Evaluator) DocBuilder.loadClass(clz)
+ evaluators.put(func, (Evaluator) DocBuilder.loadClass(clz, null)
.newInstance());
} catch (Exception exp) {
throw new DataImportHandlerException(
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
Fri Aug 29 00:00:48 2008
@@ -300,9 +300,6 @@
}
- public Class loadClass(String name) throws ClassNotFoundException {
- return loader.findClass(name);
- }
public SolrDoc getSolrDocInstance() {
return new SolrDocumentWrapper();
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
Fri Aug 29 00:00:48 2008
@@ -82,7 +82,7 @@
DataImporter() {
}
- public DataImporter(String dataConfig, SolrCore core,
+ DataImporter(String dataConfig, SolrCore core,
Map<String, Properties> ds) {
if (dataConfig == null)
throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
@@ -236,31 +236,31 @@
}
- public DataConfig getConfig() {
+ DataConfig getConfig() {
return config;
}
- public Date getIndexStartTime() {
+ Date getIndexStartTime() {
return indexStartTime;
}
- public void setIndexStartTime(Date indextStartTime) {
+ void setIndexStartTime(Date indextStartTime) {
this.indexStartTime = indextStartTime;
}
- public Date getLastIndexTime() {
+ Date getLastIndexTime() {
return lastIndexTime;
}
- public void setLastIndexTime(Date lastIndexTime) {
+ void setLastIndexTime(Date lastIndexTime) {
this.lastIndexTime = lastIndexTime;
}
- public void store(Object key, Object value) {
+ void store(Object key, Object value) {
store.put(key, value);
}
- public Object retrieve(Object key) {
+ Object retrieve(Object key) {
return store.get(key);
}
@@ -291,7 +291,7 @@
dataSrc = new JdbcDataSource();
} else {
try {
- dataSrc = (DataSource) DocBuilder.loadClass(impl).newInstance();
+ dataSrc = (DataSource) DocBuilder.loadClass(impl,
getCore()).newInstance();
} catch (Exception e) {
throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
"Invalid type for data source: " + impl, e);
@@ -406,11 +406,11 @@
}
- public DocBuilder getDocBuilder() {
+ DocBuilder getDocBuilder() {
return docBuilder;
}
- public static final ThreadLocal<AtomicLong> QUERY_COUNT = new
ThreadLocal<AtomicLong>() {
+ static final ThreadLocal<AtomicLong> QUERY_COUNT = new
ThreadLocal<AtomicLong>() {
protected AtomicLong initialValue() {
return new AtomicLong();
}
@@ -516,7 +516,7 @@
}
- public SolrCore getCore() {
+ SolrCore getCore() {
return core;
}
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
Fri Aug 29 00:00:48 2008
@@ -17,6 +17,8 @@
package org.apache.solr.handler.dataimport;
+import org.apache.solr.core.SolrCore;
+
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
@@ -232,7 +234,7 @@
Map<String, Object> pk, DataConfig.Entity entity,
boolean isRoot,
ContextImpl parentCtx) {
- EntityProcessor entityProcessor = getEntityProcessor(entity);
+ EntityProcessor entityProcessor = getEntityProcessor(entity,
dataImporter.getCore());
DataSource ds = entity.dataSrc;
if (verboseDebug) {
ds = DebugLogger.wrapDs(ds);
@@ -415,7 +417,7 @@
}
}
- public static EntityProcessor getEntityProcessor(DataConfig.Entity entity) {
+ public static EntityProcessor getEntityProcessor(DataConfig.Entity entity,
SolrCore core) {
if (entity.processor != null)
return entity.processor;
EntityProcessor entityProcessor;
@@ -423,7 +425,7 @@
entityProcessor = new SqlEntityProcessor();
} else {
try {
- entityProcessor = (EntityProcessor) loadClass(entity.proc)
+ entityProcessor = (EntityProcessor) loadClass(entity.proc, core)
.newInstance();
} catch (Exception e) {
throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
@@ -469,7 +471,7 @@
Set<Map<String, Object>> deltaSet = new HashSet<Map<String, Object>>();
resolver.addNamespace(null, (Map) entity.allAttributes);
- EntityProcessor entityProcessor = getEntityProcessor(entity);
+ EntityProcessor entityProcessor = getEntityProcessor(entity,
context.getCore());
entityProcessor.init(new ContextImpl(entity, resolver, entity.dataSrc,
Context.FIND_DELTA, requestParameters.requestParams, session, null,
dataImporter));
@@ -506,7 +508,7 @@
myModifiedPks.addAll(deltaSet);
Set<Map<String, Object>> parentKeyList = new HashSet<Map<String,
Object>>();
if (parentEntity != null && parentEntity.isDocRoot) {
- EntityProcessor parentEntityProcessor = getEntityProcessor(parentEntity);
+ EntityProcessor parentEntityProcessor = getEntityProcessor(parentEntity,
context.getCore());
parentEntityProcessor.init(new ContextImpl(parentEntity, resolver,
parentEntity.dataSrc, Context.FIND_DELTA,
requestParameters.requestParams, session, null, dataImporter));
@@ -570,18 +572,17 @@
}
@SuppressWarnings("unchecked")
- static Class loadClass(String name) throws ClassNotFoundException {
- DocBuilder inst = INSTANCE.get();
+ static Class loadClass(String name, SolrCore core) throws
ClassNotFoundException {
try {
- return inst != null ?
- inst.writer.loadClass(name) :
+ return core != null ?
+ core.getResourceLoader().findClass(name) :
Class.forName(name);
} catch (Exception e) {
try {
String n = DocBuilder.class.getPackage().getName() + "." + name;
- return inst != null ?
- inst.writer.loadClass(n) :
- Class.forName(n);
+ return core != null ?
+ core.getResourceLoader().findClass(n) :
+ Class.forName(n);
} catch (Exception e1) {
throw new ClassNotFoundException("Unable to load " + name + " or " +
DocBuilder.class.getPackage().getName() + "." + name, e);
}
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
Fri Aug 29 00:00:48 2008
@@ -93,7 +93,7 @@
continue;
}
try {
- Class clazz = DocBuilder.loadClass(trans);
+ Class clazz = DocBuilder.loadClass(trans, context.getSolrCore());
if (clazz.newInstance() instanceof Transformer) {
transformers.add((Transformer) clazz.newInstance());
} else {
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java
Fri Aug 29 00:00:48 2008
@@ -16,6 +16,8 @@
*/
package org.apache.solr.handler.dataimport;
+import org.apache.solr.common.SolrException;
+
import java.sql.*;
import java.util.*;
import java.util.concurrent.Callable;
@@ -97,26 +99,39 @@
final Properties initProps) {
final String url = initProps.getProperty(URL);
- String driver = initProps.getProperty(DRIVER);
+ final String driver = initProps.getProperty(DRIVER);
if (url == null)
throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
"JDBC URL cannot be null");
- try {
- if (driver != null)
- Class.forName(driver);
- } catch (ClassNotFoundException e) {
- throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
- "driver could not be loaded");
+ if (driver != null) {
+ try {
+ DocBuilder.loadClass(driver, context.getSolrCore());
+ } catch (ClassNotFoundException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Could
not load driver: " + driver, e);
+ }
+ } else {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Driver
must be specified");
}
+
factory = new Callable<Connection>() {
public Connection call() throws Exception {
LOG.info("Creating a connection for entity "
+ context.getEntityAttribute(DataImporter.NAME) + " with URL: "
+ url);
long start = System.currentTimeMillis();
- Connection c = DriverManager.getConnection(url, initProps);
+ Connection c = null;
+ try {
+ c = DriverManager.getConnection(url, initProps);
+ } catch (SQLException e) {
+ // DriverManager does not allow you to use a driver which is not
loaded through
+ // the class loader of the class which is trying to make the
connection.
+ // This is a workaround for cases where the user puts the driver jar
in the
+ // solr.home/lib or solr.home/core/lib directories.
+ Driver d = (Driver) DocBuilder.loadClass(driver,
context.getSolrCore()).newInstance();
+ c = d.connect(url, initProps);
+ }
LOG.info("Time taken for getConnection(): "
+ (System.currentTimeMillis() - start));
return c;
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java
Fri Aug 29 00:00:48 2008
@@ -230,10 +230,6 @@
return this.getStartTime();
}
- public Class loadClass(String name) throws ClassNotFoundException {
- return Class.forName(name);
- }
-
/**
* <p>
* Stores the last indexed time into the <code>IMPORTER_PROPERTIES</code>
Modified:
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder.java?rev=690131&r1=690130&r2=690131&view=diff
==============================================================================
---
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder.java
(original)
+++
lucene/solr/trunk/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestDocBuilder.java
Fri Aug 29 00:00:48 2008
@@ -38,7 +38,7 @@
@Test
public void loadClass() throws Exception {
- Class clz = DocBuilder.loadClass("RegexTransformer");
+ Class clz = DocBuilder.loadClass("RegexTransformer", null);
Assert.assertNotNull(clz);
}