JNI changes for modules
Florian Weimer
fw at deneb.enyo.de
Sun Aug 23 18:41:27 UTC 2020
* Mandy Chung:
> On 8/21/20 4:42 AM, Florian Weimer wrote:
>> I see there's a new GetModule entry point, but I can't find anything
>> that interacts directly with it.
>>
>> The challenge I see is that FindClass often cannot find application
>> classes once modules are involved. Technically, I guess that's not a
>> new phenomenon and could have happened before once multiple class
>> loaders are involved. However, modules seem to encourage such setups
>> and expose this functionality to more developers, I suppose.
>>
>> Is the recommended way to use the jclass parameter of native methods
>> with GetModule to obtain the application module, and call
>> getClassLoader() and its loadClass(String) methods to get this to
>> work? Isn't this a tad bit involved? There's also an asymmetry due
>> to the use of source class names, unlike FindClass.
>
> JNI FindClass is equivalent to calling 3-arg Class::forName using the
> loader of the caller class that invokes FindClass. It can find the
> classes that are visible to the loader. It will find classes in another
> module as long as it's exported to the caller's module.
Ahh. I should have read the JNI spec more closely. This behavior
does in fact follow from this clause:
| FindClass locates the class loader associated with the current
| native method; that is, the class loader of the class that declared
| the native method. If the native method belongs to a system class,
| no class loader will be involved. Otherwise, the proper class loader
| will be invoked to load, link, and initialize, the named class.
Maybe it's time to remove the references to JDK 1.1 and JDK 1.2. 8-)
> Can you say more about the scenarios what you refer to "FindClass often
> cannot find application classes once modules are involved"?
I must have had a different bug, sorry. I removed my code which more
or less did what FindClass is expected to do, and I don't see any
issues anymore.
More information about the jigsaw-dev
mailing list