RFC: VMClassLoader changes proposition

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Olivier,

Olivier Jolly wrote:

>Hi,
>  it seems to me that there is a missing/incomplete feature in the
>VMClassLoader.
>  For now, the vm implementation are not encouraged, helped nor told to
>define packages in which classes are loaded from when the boot class
>loader is defining them. Notably, this makes such that java.lang package
>is not defined (i.e. basically getPackage on the VMClassLoader for
>"java.lang" is null)
>  
>
Well the actual comment on the getBootPackages method are
 /**
   * Returns a String[] of native package names. The default
   * implementation returns an empty array, or you may decide
   * this needs native help.
   */

So if the VM implementer decides that he wants to return the strings
of all gnu-classpath + vm-specific packages, he has to redefine 
getBootPackages.
We could force getBootPackages to be native though.

>  I spent my week end trying to hack cacao to call a new VMClassLoader
>method (definePackageIfNeeded) in the native implementation of
>VMClassLoader.loadClass. I had to skip this call when the loaded class
>was coming from java.lang.** since the definePackageIfNeeded was using
>java.lang.** classes and we would run into an infinite loop else. The
>definePackageIfNeeded is taking a class name as parameter and extract
>the package name and then defines the package using default values for
>vendor and such (like the reference <clinit> of VMClassLoader) if it's
>not defined yet.
>  Since java.lang.** packages can not be defined by this method, I
>overrided the getBootPackages reference method to return the
>java.lang.** packages (which are then defined by the <clinit>)
>  Please find attached the hack I did on my environment (which I do not
>consider to be usable but a working proof of concept) as a support of my
>explanations.
>
>  
>
This looks complex compared to the (native - should be) getBootPackages 
method.
Maybe I'm missing something, but all of this can be solved by implementing
the getBootPackages on the VM side.

Best,
Nicolas



[Index of Archives]     [Linux Kernel]     [Linux Cryptography]     [Fedora]     [Fedora Directory]     [Red Hat Development]

  Powered by Linux