Classloader problems when creating Factory and Parser objects

View: New views
4 Messages — Rating Filter:   Alert me  

Classloader problems when creating Factory and Parser objects

by Zeenat Lainwala :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

In my product, the abdera classes are packaged in an OSGI bundle. This is
version 0.4.0. When abdera creates a Factory, Parser, etc, it uses the
application classloader and the system class loader
(org.apache.abdera.util.ServiceUtil.java locateInstance) instead of using
the classloader from
the bundle. Since the Factory, Parser etc classes are in the bundle, the
classloading fails.

Does anyone have an idea on how I can circumvent this problem?

thanks,
Zeenat

Re: Classloader problems when creating Factory and Parser objects

by Sergio Bossa-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Thu, Jul 10, 2008 at 7:24 PM, Zeenat Lainwala <lainwala@...> wrote:

> In my product, the abdera classes are packaged in an OSGI bundle. This is
> version 0.4.0. When abdera creates a Factory, Parser, etc, it uses the
> application classloader and the system class loader
> (org.apache.abdera.util.ServiceUtil.java locateInstance) instead of using
> the classloader from
> the bundle. Since the Factory, Parser etc classes are in the bundle, the
> classloading fails.

Hi,

you may try to overwrite the current thread classloader by calling the
following method into your code:
Thread.currentThread().setContextClassLoader(osgiClassloader).
Let us know if it works.
Cheers,

Sergio B.

--
Sergio Bossa
Software Passionate, Java Technologies Specialist and Open Source Enthusiast.
Blog : http://sbtourist.blogspot.com
Sourcesense - making sense of Open Source : http://www.sourcesense.com
Pro-netics s.p.a. : http://www.pronetics.it

Re: Classloader problems when creating Factory and Parser objects

by Ugo Cei :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On Jul 10, 2008, at 7:24 PM, Zeenat Lainwala wrote:

> In my product, the abdera classes are packaged in an OSGI bundle.  
> This is
> version 0.4.0. When abdera creates a Factory, Parser, etc, it uses the
> application classloader and the system class loader
> (org.apache.abdera.util.ServiceUtil.java locateInstance) instead of  
> using
> the classloader from
> the bundle. Since the Factory, Parser etc classes are in the bundle,  
> the
> classloading fails.
>
> Does anyone have an idea on how I can circumvent this problem?


I had the same problem, in a different context. See the following  
thread:

http://www.nabble.com/Using-Abdera-in-a-Confluence-plugin-tt17207744.html

In the end I had to manually move all jars to my webapp's WEB-INF/lib  
directory, which sucks, but I don't want to have to fight with too  
many frameworks trying to do too many clever things with class-
loading: in my case it was Confluence, Commons Logging, Abdera and  
maybe more. Good luck trying to figure out how to introduce OSGi in  
the mix.

        Ugo


Re: Classloader problems when creating Factory and Parser objects

by Zeenat Lainwala :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Yes, this solution worked for me. I set the context classloader on the
thread to the osgi classloader and then once I am done getting the Factory
and
Parser objects, I reset it back to the original classloader.
Thank you.


Zeenat
IBM Websphere Process Server




"Sergio Bossa" <sergio.bossa@...>
07/11/2008 01:34 AM
Please respond to
abdera-user@...


To
abdera-user@...
cc

Subject
Re: Classloader problems when creating Factory and Parser objects






On Thu, Jul 10, 2008 at 7:24 PM, Zeenat Lainwala <lainwala@...>
wrote:

> In my product, the abdera classes are packaged in an OSGI bundle. This
is
> version 0.4.0. When abdera creates a Factory, Parser, etc, it uses the
> application classloader and the system class loader
> (org.apache.abdera.util.ServiceUtil.java locateInstance) instead of
using
> the classloader from
> the bundle. Since the Factory, Parser etc classes are in the bundle, the
> classloading fails.

Hi,

you may try to overwrite the current thread classloader by calling the
following method into your code:
Thread.currentThread().setContextClassLoader(osgiClassloader).
Let us know if it works.
Cheers,

Sergio B.

--
Sergio Bossa
Software Passionate, Java Technologies Specialist and Open Source
Enthusiast.
Blog : http://sbtourist.blogspot.com
Sourcesense - making sense of Open Source : http://www.sourcesense.com
Pro-netics s.p.a. : http://www.pronetics.it

LightInTheBox - Buy quality products at wholesale price