Question on Implied readability
Alan Bateman
Alan.Bateman at oracle.com
Mon Nov 2 18:48:04 UTC 2015
On 02/11/2015 13:20, Ali Ebrahimi wrote:
> :
>
> bar1
> Exception in thread "main" java.lang.reflect.InvocationTargetException
> at sun.reflect.NativeMethodAccessorImpl.invoke0(java.base at 9.0/Native
> Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(java.base at 9.0
> /NativeMethodAccessorImpl.java:62)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(java.base at 9.0
> /DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(java.base at 9.0/Method.java:531)
> at jakeplus.minicontainer.Bootstrapper.main(java.base at 9.0
> /Bootstrapper.java:67)
> Caused by: java.lang.IllegalAccessError: class com.foo.Main (in module:
> com.foo)
> cannot access class com.bar.Bar (in module: com.bar), com.foo cannot read
> com.bar
> at com.foo.Main.main(com.foo/Main.java:12)
> ... 5 more
>
> The exception message says: com.foo cannot read com.bar. Why?
> Is not two situation equivalent? (before Implied readability and after)
> This is bug?
I used the source from your mail to create a test case but I didn't
duplicate what you were seeing. In my test then I created two layers L1
and L2. In L1 then com.bar at 1 and com.baz are mapped to the same loader
CL1. In L2 then com.bar at 2 and com.foo are mapped to the same loader CL2.
The parent of L2 is L1. The parent of CL2 is CL1 with CL2 doing
local-first rather than parent delegation so that it loads the local
version of module com.bar's types.
The readability is setup as expected:
Module foo = layer2.findModule("com.foo").get();
Module bar2 = layer2.findModule("com.bar").get();
assertTrue(foo.canRead(bar2));
Module bar1 = layer1.findModule("com.bar").get();
assertFalse(foo.canRead(bar1))
I can't rule out a bug of course but I would need to see an outline of
what jakeplus.minicontainer.Bootstrapper is doing so that I can see how
the layers and class loaders are arranged.
-Alan.
More information about the jigsaw-dev
mailing list