2008/5/22 Saminda Abeyruwan <[EMAIL PROTECTED]>:

> Did some debuging further. Class not found exception  occurs when the
> required class is loaded from TCCL.
> "Thread.currentThread().getContextClassLoader()"
> When I checked the TCCL, it's not OSGi aware (it's not create from Felix).
> TCCL contains the classloader coming from the boot classpath. Is this the
> accepted behaviour ?
>

from what I remember the OSGi spec doesn't mandate
setting TCCL to the bundle classloader, although some
frameworks like Equinox do set it to help legacy code
(they set it to a ContextFinder, which != bundle loader)

if you want access to the bundle classloader, select a
class, or instance, that was loaded by that bundle (like
the activator) and use class.getClassLoader()

or alternatively use loadClass() method from the bundle
object, which you get from the getBundle() method on
the bundle context, and this will use the right loader.

btw, you can also use services to support loading of
classes or instances from other bundles (just register
your own service to do this that provides some sort
of builder API)

HTH

Saminda
>
> On Thu, May 22, 2008 at 2:48 PM, Marcel Offermans <
> [EMAIL PROTECTED]> wrote:
>
> > Can you strip the example up to the point where we can have a look at it?
> > It could be that the class that refuses to load needs something that is
> not
> > available.
> >
> > Greetings, Marcel
> >
> >
> > On May 22, 2008, at 11:14 , Saminda Abeyruwan wrote:
> >
> >  "." is present
> >>
> >> Saminda
> >>
> >> On Thu, May 22, 2008 at 2:33 PM, Marcel Offermans <
> >> [EMAIL PROTECTED]> wrote:
> >>
> >>  On May 22, 2008, at 10:09 , Saminda Abeyruwan wrote:
> >>>
> >>> Bundle A exports some package "a.b". In addition to this, this bundle
> >>>
> >>>> embed
> >>>> a foo.jar and manifest has Bundle-Classpath: foo.jar
> >>>>
> >>>> Bundle B imports package "a.b". Say the activator of bundle B calls a
> >>>> class
> >>>> of this package. When this happen, I'm seen a class not found
> exception
> >>>> from
> >>>> a.b class, which is available in foo.jar. When bundle B's class loader
> >>>> delegates to bundle A's class loader, this shouldn't be a problem. Am
> I
> >>>> doing something wrong ?
> >>>>
> >>>>
> >>> If my memory serves me well, you need to explicitly include "." in the
> >>> bundle classpath, so:
> >>>
> >>> Bundle-Classpath: ., foo.jar
> >>>
> >>> Greetings, Marcel
> >>>
> >>>
> >>>
> >>
> >> --
> >> Saminda Abeyruwan
> >>
> >> Senior Software Engineer
> >> WSO2 Inc. - www.wso2.org
> >>
> >
> >
>
>
> --
> Saminda Abeyruwan
>
> Senior Software Engineer
> WSO2 Inc. - www.wso2.org
>



-- 
Cheers, Stuart

Reply via email to