Can a parent layer use a child layer?

Alan Bateman alan.bateman at oracle.com
Mon Oct 28 09:33:32 UTC 2024


On 26/10/2024 18:16, PavelTurk wrote:
> Hello.
>
> I'm developing a multi-layered JPMS application. Let's say that in the 
> boot layer, I have a car component (composed of several jars)
> that includes an engine (also made up of several jars). All child 
> layers will interact with the car, but they should not have any access
> to the engine or its jars (classes). To achieve this, I want to place 
> all jars related to the engine in a child layer, thereby hiding these
> jars and their classes from other child layers.
>
> However, I’m concerned that this setup results in the boot layer 
> depending on a child layer, which seems to go against JPMS principles,
> where typically child layers depend on or use parent layers.
>
> My question is: does placing the engine in a child layer violate JPMS 
> principles, and what would be the best approach in this situation?

I assume the concern is that engine exports its API to all modules. If 
car and engine were tightly coupled then engine could export its API to 
only car.

It would be feasible to have the engine modules in a child layer and 
uses services but only if the engine API (its interface) is in the boot 
layer. So think about the engine API in the boot layer as a service and 
where the implementation is provided by a service provider module in a 
child layer. The code in car would use ServiceLoader to locate the 
implementation. Random modules in other child layers that want to use 
engine will be disappointed as there will be no implementation visible 
to their use of ServiceLoader.

-Alan


More information about the jigsaw-dev mailing list