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

Reply via email to