Types of Module
Whilst these patterns describe the general classes of module - it is sometimes convenient to partition an application into modules which implement several
of the patterns at once. Just like with Web-site design there are no hard and fast rules how you choose to partition your URI address spaces.
Fulcrum
Definition
The Fulcrum pattern is a module which hosts one or more Transports. A Fulcrum does not generally
provide any local resources or services - it is a container which imports the address spaces of other modules.
A fulcrum is never imported by another module so it does not export a public address space.
Operation
A Transport receives an external event. The Transport interprets the event and issues a request to
the Internal address space of the fulcrum module which hosts it. The request is matched by an imported module's address space
and enters that module to be serviced.
If a request is unmatched by the imported modules a Fulcrum can provide a fallback default match which initiates an exception
process.
Example
<install>/modules/front_end_fulcrum/
Application
Definition
The Application pattern is a module which exports an application specific URI address space. An application module
is imported into a Fulcrum module. An application module hosts application specific services and resources and will
import other application-specific modules and/or lower level library modules.
Operation
An application module receives requests on it's public application URI interface. Generally requests are rewritten to invoke an internal service
or process (see Internal patterns below).
Example
<install>/modules/mod_developer-x.x.x.jar
- Virtual Host
A subclass of the application pattern - the Virtual host exports a public address space for one or more
host specific URI address spaces. See virtual hosting guide.
Service Collection
Definition
A service collection is a module which exports a set of services - these might be application specific
services or general utility services. The module exposing a service collection does not expose how the services are implemented.
Services are implemented internally and may use the services of other modules imported into the service collection module.
Operation
A service collection module receives a request for a service on it's public URI interface. The request is rewritten to invoke an internal service implementation.
Example
<install>/modules/mod_xml-ura-x.x.x.jar
Resource Library
Definition
A resource library is a module which hosts and exports a set of resource URIs for a collection of internally hosted resources.
Generally the resources are static though they could be dynamically generated.
Operation
A resource library is useful for hosting a collection of common resources - for example images or XSLT transforms. A resource library may be imported
by many application modules.
Example
<install>/modules/xlib-x.x.x.jar
Class Library
Definition
A class library is similar to a resource library but hosts Java classes and exports a public Java package space for it's hosted classes.
Operation
A class package space is exported from the module. The package space is available for import by Java classes whose parent module imports the class library module.
A class library generally only exports classes which it implements internally though it can, if absolutely necessary, also export the class path of any
jar libraries which it hosts in its lib/ directory (this is not recommended).
Example
<install>/modules/ext_xml-core-x.x.x.jar