8205533: Class.getPackage() fails with InternalError if class is defined to the bootstrap class loader but module is not in the boot layer
mandy chung
mandy.chung at oracle.com
Sun Jun 24 14:40:24 UTC 2018
On 6/24/18 7:32 AM, Alan Bateman wrote:
> This is a corner case that showed up while chasing an issue in another
> area.
>
> If a tool uses the attach mechanism to start the JMX agent in a running
> VM that doesn't have the jdk.management.agent module in the boot layer
> then the module is resolved and defined to the VM in its own module
> layer. This results in Java SE and JDK specific modules, such as
> java.management and jdk.management.agent, being loaded and mapped to the
> bootstrap class loader but the modules aren't in the boot layer.
>
> In this scenario, using Class::getPackage to get the legacy Package
> object of a class in one of these modules trips up with an
> InternalError. This is because the implementation assumes that modules
> defined to the bootstrap class loader are in boot layer. To fix this,
> the code that creates Package objects for the packages in modules mapped
> to the bootstrap class loader needs to use the stack of layers that
> supports the dynamic loading of the JMX and java agents.
>
> The webrev with the proposed changes, and test, is here:
> http://cr.openjdk.java.net/~alanb/8205533/webrev/index.html
Looks good.
Mandy
More information about the jigsaw-dev
mailing list