lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brendan Grainger <brendan.grain...@gmail.com>
Subject Re: Slight issue with classloading and DataImportHandler
Date Thu, 19 Jun 2008 05:11:41 GMT
Awesome thank you very much and thanks for the very useful contribution.

Brendan

On Jun 19, 2008, at 12:52 AM, Noble Paul നോബിള്‍  
नोब्ळ् wrote:

> aah!. We always assumed that people put the custom jars in the
> WEB-INF/lib folder of solr webapp and hence they are automatically in
> the classpath we shall make the necessary changes  .
> --Noble
>
> On Thu, Jun 19, 2008 at 10:06 AM, Brendan Grainger
> <brendan.grainger@gmail.com> wrote:
>> Hi,
>>
>> I am actually providing the fully qualified classname in the  
>> configuration
>> and I was still getting a ClassNotFoundException. If you look at  
>> the code in
>> SolrResourceLoader they actually explicitly add the jars in solr- 
>> home/lib to
>> the classloader:
>>
>> static ClassLoader createClassLoader(File f, ClassLoader loader) {
>>   if( loader == null ) {
>>     loader = Thread.currentThread().getContextClassLoader();
>>   }
>>   if (f.canRead() && f.isDirectory()) {
>>     File[] jarFiles = f.listFiles();
>>     URL[] jars = new URL[jarFiles.length];
>>     try {
>>       for (int j = 0; j < jarFiles.length; j++) {
>>         jars[j] = jarFiles[j].toURI().toURL();
>>         log.info("Adding '" + jars[j].toString() + "' to Solr
>> classloader");
>>       }
>>       return URLClassLoader.newInstance(jars, loader);
>>     } catch (MalformedURLException e) {
>>       SolrException.log(log,"Can't construct solr lib class  
>> loader", e);
>>     }
>>   }
>>   log.info("Reusing parent classloader");
>>   return loader;
>> }
>>
>>
>> This seems to be me to be why my class is now found when I include my
>> utilities jar in solr-home/lib.
>>
>> Thanks
>> Brendan
>>
>> On Jun 18, 2008, at 11:49 PM, Noble Paul നോബിള്‍  
>> नोब्ळ् wrote:
>>
>>> hi,
>>> DIH does not load class using the SolrResourceLoader. It tries a
>>> Class.forName() with the name you provide if it fails it prepends
>>> "org.apache.solr.handler.dataimport." and retries.
>>>
>>> This is true for not just transformers but also for Entityprocessor,
>>> DataSource and Evaluator
>>>
>>> The reason for doing so is that we do not use any of the 'solr.'
>>> packages in DIH. All our implementations fall into the default  
>>> package
>>> and we can directly use them w/o the package name.
>>>
>>> So , if you are writing your own implementations use the default
>>> package or provide the fully qualified class name.
>>>
>>> --Noble
>>>
>>> On Thu, Jun 19, 2008 at 8:09 AM, Jon Baer <jonbaer@gmail.com> wrote:
>>>>
>>>> Thanks.  Yeah took me a while to figure out I needed to do  
>>>> something like
>>>> transformer="com.mycompany.solr.MyTransformer" on the entity  
>>>> before it
>>>> would
>>>> work ...
>>>>
>>>> - Jon
>>>>
>>>> On Jun 18, 2008, at 1:51 PM, Brendan Grainger wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I set up the new DataimportHandler last night to replace some  
>>>>> custom
>>>>> import code I'd written and so far I'm loving it thank you.
>>>>>
>>>>> I had one issue you might want to know about it. I have some solr
>>>>> extensions I've written and packaged in a jar which I place in:
>>>>>
>>>>> solr-home/lib
>>>>>
>>>>> as per:
>>>>>
>>>>>
>>>>>
>>>>> http://wiki.apache.org/solr/SolrPlugins#head-59e2685df65335e82f8936ed55d260842dc7a4dc
>>>>>
>>>>> This works well for my handlers but a custom Transformer I wrote  
>>>>> and
>>>>> packaged the same way was throwing a ClassNotFoundException. I  
>>>>> tracked
>>>>> it
>>>>> down to the DocBuilder.loadClass method which was just doing a
>>>>> Class.forName. Anyway, I fixed it for the moment by probably do
>>>>> something
>>>>> stupid and creating a SolrResourceLoader (which I imagine could  
>>>>> be an
>>>>> instance variable, but at 3am I just wanted to get it working).  
>>>>> Anyway,
>>>>> this
>>>>> fixes the problem:
>>>>>
>>>>> @SuppressWarnings("unchecked")
>>>>> static Class loadClass(String name) throws  
>>>>> ClassNotFoundException {
>>>>> SolrResourceLoader loader = new SolrResourceLoader( null );
>>>>> return loader.findClass(name);
>>>>> // return Class.forName(name);
>>>>> }
>>>>>
>>>>> Brendan
>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> --Noble Paul
>>
>>
>
>
>
> -- 
> --Noble Paul


Mime
View raw message