Two questions regarding implementing ModuleFinder
Alan Bateman
Alan.Bateman at oracle.com
Thu Jul 28 17:03:23 UTC 2016
On 28/07/2016 16:59, Andrew Dinn wrote:
> :
>
> The part I am dubious about here is the URI, in particular the need to
> provide a scheme (supplied as the String "byteman"). I passed that
> because I get an error if I simply pass null for the scheme (it
> complains that this is not an absolute URI). I can see that the module
> should have a name but why does it need to be absolute? Indeed, why is
> it needed at all? The various javadocs eventually lead to a suggestion
> that the URI may be used by a security manager. If this is really what
> it is for then do I need to worry about having invented scheme 'byteman'
> out of thin air? WIl the security code ever try to convert it to a URL?
The IllegalArgumentException "URI is not absolute" is a bug, it arises
when converting the URI to a URL, we'll get that fixed.
But to your question then the module location is used as the CodeSource:
* <p> This URI, when present, is used as the {@linkplain
* java.security.CodeSource#getLocation location} value of a {@link
* java.security.CodeSource CodeSource} so that a module's classes
can be
* granted specific permissions when loaded by a {@link
* java.security.SecureClassLoader SecureClassLoader}.
and so interesting when running with a security manager and granting the
module permissions.
>
> I am required to implement find as it has no default. I also need to
> implement read so I can redirect to the agent to provide the class
> format byte[]. However, it appears that find is only needed so it can be
> called from the default method open and that open is only there to be
> called from the default method read. Is there any possibility that
> something else might call find?
>
The main user of ModuleReader is class loaders that load
classes/resources from the modules. ClassLoaders need to implement
methods such as findResource and findResources will attempt to return a
URL to resources in modules defined to the ClassLoader. You should see
your find method invoked for these cases.
-Alan
More information about the jigsaw-dev
mailing list