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