Case - class from required module is not available

Richard S. Hall richard.s.hall at oracle.com
Wed Mar 28 12:11:11 PDT 2012


On 3/28/12 13:24, Richard S. Hall wrote:
> On 3/28/12 6:34, David Holmes wrote:
>> On 28/03/2012 6:31 PM, Alan Bateman wrote:
>>> On 28/03/2012 02:48, David Holmes wrote:
>>>> On 28/03/2012 3:53 AM, Mandy Chung wrote:
>>>>> This is an interesting scenario - module c is linked with module b 
>>>>> only
>>>>> whereas module d is linked with module a only.
>>>>
>>>> So is that a bug or a feature? Given b will not be able to find a<1.0,
>>>> but a1.0 is already loaded, is it then necessary that b not be linked
>>>> to d?
>>> Right, a at 1.0 and b at 1.0 can't be the same configuration because of the
>>> constraint so the answer for d has to be {d at 1.0, a at 1.0} or {d at 1.0,
>>> b at 1.0}. There is code in the resolver that ensures that the 
>>> dependencies
>>> are examined in order so I assume this is why {d at 1.0, a at 1.0} is chosen.
>>> If d's dependencies are reversed then it will generate the other 
>>> answer.
>>> With c then the answer has to be {c at 1.0, b at 1.0}.
>>
>> Obviously there's a lot of detailed semantics here that I'm not clear 
>> on. Is this just an artifact of the current implementation strategy 
>> or a hard limitation in the overall model. My thinking is that b 
>> could still be made available to d as long as b's attempts to access 
>> anything in "a" give a "module not found" exception. But that all 
>> depends on how things are actually implemented.
>
> I would guess it is a hard limitation on the model. This is related to 
> "uses" constraints in OSGi. In OSGi, "uses" constraints are expressed 
> on exported packages and they specifically describe which other 
> imported/exported packages are used by a given exported package (i.e., 
> they are intra-module dependencies as opposed to the normal 
> inter-module dependencies). This allows OSGi to partition resolution 
> graphs in more fine-grained ways to support side-by-side types without 
> inconsistency issues.

Should have said, "...side-by-side versions..."

-> richard

>
> Since Jigsaw doesn't model "uses" constraints at all, the only thing 
> its resolver can do is assume that all required/exported types of a 
> given module are used by all its exported types, which means it has to 
> make coarser-grained decisions. So, in your case, it has to assume 
> that your D would be expecting to get A types from B if it were 
> resolved to both A and B. Thus, it cannot allow that since A isn't 
> satisfied for B and thus it can only allow D to resolve to A.
>
> -> richard
>
>>
>> Just curious.
>>
>> Thanks,
>> David
>>
>>> -Alan.
>>>
>>>



More information about the jigsaw-dev mailing list