Thanks all for your interest, especially Uwe. I asked this question on
solr-user at the beginning but I got no reply. That's why I re-asked the
question at java-user.
Thanks for your efforts. I will try it now.
On Mon, Dec 28, 2009 at 12:02 PM, Uwe Schindler <u...@thetaphi.de> wrote:

> I opened https://issues.apache.org/jira/browse/LUCENE-2182 about this
> problem and already have a fix.
>
> This is really a bug. The solution is simple because you have to load the
> IMPL class using the same classloader as the passed in interface. The
> default for Class.forName is the classloader of AttributeSource.class,
> which
> is the wrong one.
>
> -----
> Uwe Schindler
> H.-H.-Meier-Allee 63, D-28213 Bremen
> http://www.thetaphi.de
> eMail: u...@thetaphi.de
>
> > -----Original Message-----
> > From: Uwe Schindler [mailto:u...@thetaphi.de]
> > Sent: Monday, December 28, 2009 9:20 AM
> > To: java-u...@lucene.apache.org
> > Cc: solr-user@lucene.apache.org
> > Subject: RE: Using the new tokenizer API from a jar file
> >
> > The question on this list was ok,as it shows a minor problem of using the
> > new TokenStream API with Solr.
> >
> > His plugin was loaded correctly, because if Lucene says, that it cannot
> > find
> > the *Impl class, it was able to load the interface class before -> the
> JAR
> > file is "visible" to the JVM.
> >
> > The problem is the following and has to do with classloaders:
> >
> > 1. We have different class loaders for different places in Solr. Solr
> uses
> > for plugins a SolrResourceLoader that searches for JAR files in the local
> > lib folder before handling over to the webapp's classloader.
> >
> > 2. Initially, the lucene JAR is loaded by the Webapp's class loader
> >
> > 3. If a AttributeImpl is placed into a jar file e.g. in the plugin folder
> > of
> > solr (the lib folder where solr loads all resources, stop words,...), the
> > loading mechanism inside AttributeSource.DEFAULT_ATTRIBUTE_FACTORY is
> > unable
> > to locate the class file, because Class.forName() always uses the class'
> > classloader and not the global/thread one's. So AttributeSource will only
> > find the class file if it is in the *same* directory as the lucene-
> > core.jar
> > file (WEB-INF/lib) and so accessible by the webapp's class loader.
> >
> > A good introduction about the problem is this one:
> >
> http://www.theserverside.com/tt/articles/content/dm_classForname/DynLoad.p
> > df
> >
> > The problem is here described for the JVM extensions folder but also
> > applies
> > to solr, because it has another classloader for plugins.
> >
> > A solution to fix this would be in lucene to use the thread's context
> > class
> > loader in AttributeSource.DEFAULT_ATTRIBUTE_FACTORY, but I strongly
> > discourage this, as it would break the whole AttributeSource
> functionality
> > if you add two different attributes with same class names from different
> > class loaders to the AttributeSource.
> >
> > The only solution to the problem is placing the JAR file inside the
> > WEB-INF/lib folder where lucene-core.jar is. Plugins in Solr cannot
> define
> > own attribute implementations. Alternatively he could try to force
> preload
> > the class by calling Class.forName in his plugin initialization code on
> > the
> > Impl class. But I am not sure if this works (as Java handles classes from
> > different classloaders different).
> >
> > Uwe
> >
> > -----
> > Uwe Schindler
> > H.-H.-Meier-Allee 63, D-28213 Bremen
> > http://www.thetaphi.de
> > eMail: u...@thetaphi.de
> >
> > > -----Original Message-----
> > > From: Chris Hostetter [mailto:hossman_luc...@fucit.org]
> > > Sent: Monday, December 28, 2009 4:27 AM
> > > To: java-u...@lucene.apache.org
> > > Subject: Re: Using the new tokenizer API from a jar file
> > >
> > >
> > > : I tried to use it with solr and the problems began. It's always
> > telling
> > > me
> > > : that it cannot find the class GlossAttributeImpl. I think the problem
> > is
> > > : that my jar file is added to the class path at run time not from the
> > > command
> > > : line. Do you have a good solution or workaround?
> > >
> > > You're likely to get mmore helpful answers from other people in the
> Solr
> > > User community (solr-u...@lucene.a.o)
> > >
> > > As long as you put your jar in the "lib" directory under your solr home
> > > (or refrence it using a <lib/> directive in your solrconfig.xml) Solr's
> > > plugin loader will take care of hte classloading for you.
> > >
> > > if you are confident you have your jar in the correct place, please
> > email
> > > solr-user with the ClassNotFound stack trace from your solr logs, as
> > well
> > > as hierarchy  of files from your solr home (ie: the output of "find .")
> > >
> > >
> > > -Hoss
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> > > For additional commands, e-mail: java-user-h...@lucene.apache.org
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> > For additional commands, e-mail: java-user-h...@lucene.apache.org
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-user-h...@lucene.apache.org
>
>


-- 
regards,
Ahmed Saad

Reply via email to