Hi, Richard
Thanks a lot for you help .Exactly what I want to know .One more short question
please , thanks .I examine the code of Felix and find the place :
Felix.createBundleActivator [1]
What is the case when it comes to classes that newInstance() are not applicable
, for example there is no constructor without a parameter .Is there a
workaround other than newInstance() ?Thanks !![1] if (className != null)
{ className = className.trim(); Class clazz;
try { clazz =
impl.getCurrentModule().getClassByDelegation(className); }
catch (ClassNotFoundException ex) { throw new
BundleException("Not found: " + className, ex); }
activator = (BundleActivator) clazz.newInstance(); }
> Date: Thu, 6 Aug 2009 10:44:58 -0400
> From: [email protected]
> To: [email protected]
> Subject: Re: A questions about the classloading mechanism in Felix
>
> On 8/6/09 10:24, MichaelMichael wrote:
> > Hi Richard
> > Thanks for the reply.
> > Right , the moduleClassloaderBut how does the jvm know which classloader to
> > pick ??There are a number of bundles and so a number of modules Is there
> > some tricks inside ?
> >
>
> It uses the class loader of the class needing to load the class.
> Essentially, what happens is this:
>
> 1. The OSGi framework creates a class loader for each bundle.
> 2. The OSGi framework loads the bundle's activator class using its
> class loader.
> 3. Any classes needed by the activator (and thus all of the bundle)
> are requested from its class loader.
>
> So, the JVM always starts with the class loader of the class which is
> executing. We don't need to worry about this, it is automatic. Now, not
> all classes will come from the bundle, some will come from other
> bundles. In standard Java classes are only loaded from parent class
> loaders, but in OSGi parent class loaders are not used much.
>
> Instead, the bundle's class loader is "wired" to other bundle class
> loaders (based on imports). So, when a request comes in for a class
> (such as "new Foo()"), the instigating bundle's class loader is asked,
> at which point it will go out and ask other bundles if it is importing
> from them. This part happens in OSGi and it is framework implementation
> specific.
>
> -> richard
>
> >
> >> Date: Thu, 6 Aug 2009 10:03:43 -0400
> >> From: [email protected]
> >> To: [email protected]
> >> Subject: Re: A questions about the classloading mechanism in Felix
> >>
> >> When a bundle loads a class it does NOT go through
> >> Bundle.loadClass()...this is only if outside code wants to load a class
> >> from a bundle. When a bundle loads a class, it is loaded from its own
> >> class loader (called ModuleClassLoader in trunk). The call to this class
> >> loader's loadClass() method is done automatically by the JVM as needed.
> >>
> >> -> richard
> >>
> >> On 8/5/09 22:27, MichaelMichael wrote:
> >>
> >>> Hi all
> >>> I studying classloading's in felix.I have made many search but there is
> >>> still one thing I don't understand .
> >>> The question :(correct if I am wrong )As we know a "new" will invoke a
> >>> java.lang.classloader.load class normally.In felix , after the
> >>> frameword(Felix) started , a "new ClassType()"(take the ClassType be a
> >>> class could be found by the bundle ) will invoke the loadclass of
> >>> Bundle.loadclass .I am always wandering how could this happens .I
> >>> followed the source code , and also also tried the
> >>> thread.setcontextclassloader,all failed .Recently I found that this
> >>> should replace the systemclassloader ,is this correct ?But how to replace
> >>> it after the launching of Felix ?
> >>> Could anyone please explain this to me ?
> >>> Thanks a billion !!!
> >>>
> >>> RegardsMichael
> >>> _________________________________________________________________
> >>> 您可以借助 Windows Live 整理、编辑和共享您的照片。
> >>> http://www.microsoft.com/china/windows/windowslive/products/photo-gallery-edit.aspx
> >>>
> >>>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >>
> >>
> > _________________________________________________________________
> > 上Windows Live 中国首页,下载最新版Messenger!
> > http://www.windowslive.cn
> >
_________________________________________________________________
您可以借助 Windows Live 整理、编辑和共享您的照片。
http://www.microsoft.com/china/windows/windowslive/products/photo-gallery-edit.aspx