Module Overview
Modules are physical containers.
When brought into memory and commissioned, they create
a private logical address space which can be populated
with resources and services.
Modules also contain physical level components
such as Java classes, script code, files, images, etc.
Physical level components are not automatically made
a part of the private address space, they must
be explicitly mapped into the private logical address
space in the module's definition file.
A module's private address space is empty
until the module's definition file populates it with
entries (resource mappings, service definitions, imports of
other modules, etc.).
Java class resources are loaded into memory with the module's own custom classloader.
Java classes are not a part of the private address space, they reside within
the classloader and may be mapped to a logical resource or service, or exported
as a pure Java class by the module's export definitions.
Physical resources are made available to the logical level through the
ffcpl:
scheme, which is implemented by the virtual file system accessor.
Resource requests may be one of three types:
-
External - requests arrive through the module's exported public address space.
-
Internal - requests are internally generated sub-requests.
-
Root - requests delivered from a transport registered in the module.
External Requests
External requests originate from an importing module
and are routed
into an imported module if they match the export declaration.
Once a request is routed to a module, it passes through
a rewrite section before it is sent to the interior
private address space.
Internal Requests
Requests may be issued by code running in the private address space.
These are generally called sub-requests and are directed back to the private
address space defined by the mapping section.
The mapping section defines entries that are used to match a requests
URI address.
It may direct the search into an imported module or delegate the
search to the super-stack.
Root Requests
Transports may be registered with a module.
Requests injected by a transport are called root requests
are directed to the private address space for processing.
Modules that host transports are called fulcrum modules.