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
