What happened to ModuleClassLoader?
Peter Levart
peter.levart at gmail.com
Tue May 16 08:50:21 UTC 2017
Re-sending since I don't see my previous post in the jigsaw-dev archives
due to problems with mailing list in the past days...
-------- Forwarded Message --------
Subject: What happened to ModuleClassLoader
Date: Sun, 14 May 2017 23:11:37 +0200
From: Peter Levart <peter.levart at gmail.com>
To: jigsaw-dev <jigsaw-dev at openjdk.java.net>
Hi,
If I remember correctly, there was a phase in jigsaw development when
there was a class named ModuleClassLoader. It has since disappeared.
There are static and instance methods in ModuleLayer:
defineModulesWithOneLoader
defineModulesWithManyLoaders
...which create appropriate ClassLoader(s) that know how to load classes
and resources from modules defined in the Configuration. But what about
method:
defineModules
...which takes a classloader mapping function (Function<String,
ClassLoader>). I can't find helpers for constructing appropriate
ClassLoader(s) that know how to load classes and resources from the
modules defined in the Configuration. What do you recommend? Should user
look into jdk.internal.loader.Loader implementation to figure out the
details?
Suppose that user wants to create a layer that assigns class loaders to
modules in a manner that is neither 1 ClassLoader for all modules nor 1
ClassLoader per module. He doesn't want to implement details and just
wants to partition modules into disjoint subsets and assign each subset
a separate ClassLoader which would be provided by the platform.
Something that could be specified in a method with the following signature:
defineModulesWithLoaderPerSubset(Configuration cf,
List<ModuleLayer> parentLayers,
Function<String, Object> msskf);
Where:
msskf - The function to map a module name to a subset key (a key is an
object with appropriate equals/hashCode method - modules mapping to
equal keys belong to the same subset. each subset gets a separate
ClassLoader provided by the platform)
The method could check that module read edges and partitioning into a
subset(s) don't conflict and arrange delegation among class loaders
appropriately.
Above two utility methods (defineModulesWithOneLoader and
defineModulesWithManyLoaders) could then be just special cases:
defineModulesWithLoaderPerSubset(..., mn -> true); // equivalent to
defineModulesWithOneLoader(...)
defineModulesWithLoaderPerSubset(..., mn -> mn); // equivalent to
defineModulesWithManyLoaders(...)
What do you think?
Regards, Peter
More information about the jigsaw-dev
mailing list