Proposal: #NonHierarchicalLayers

mark.reinhold at oracle.com mark.reinhold at oracle.com
Mon Dec 5 23:08:56 UTC 2016


2016/11/29 18:51:22 -0800, david.lloyd at redhat.com:
> On 11/29/2016 06:10 PM, mark.reinhold at oracle.com wrote:
>> 2016/11/22 13:23:34 -0800, david.lloyd at redhat.com:
>>> ...
>>> 
>>> To degenerate the problem to the simplest case: I may have to layers, A
>>> and B, which are unrelated and both contain a module X.  I may need the
>>> module X in one layer to have a dependency on the module X in another
>>> layer.  Unless there's new code I haven't seen, each dependency is
>>> expressed by name only, therefore this is impossible.  Whereas in our
>>> system, a dependency is a tuple of (module loader, module name),
>>> allowing arbitrary weaving of modules from different name spaces with no
>>> problem.
>>> 
>>> I don't think we need it to work the exact same way, but we need some
>>> equivalent.
>> 
>> If this is how you need resolution to work for your modules then can't
>> you write your own resolver to make it so, using whatever additional
>> (weak) data structures you need to associate names with layers, class
>> loaders, etc., in whatever manner you require?
> 
> No, because the input to the resolver is just a name; there's no other 
> context to say which layer the module comes from, without some kind of 
> name mangling scheme which raises more problems (we ran into exactly 
> this issue more than six years ago).  In other words I can require a 
> module named "X", but I can't say that I require the module "X" from 
> this other layer/namespace; rather I have to flatten out all my 
> namespaces in a way that can be mutually resolvable, which means that I 
> must ultimately constrain user module names in some weird way.  This is 
> not so good when modules refer to one another by name programmatically, 
> nor in diagnostic output.

So, what do you suggest we do?

- Mark


More information about the jpms-spec-observers mailing list