GARM is a suite of tools for managing GAR archives on J2EE containers.
The features of GARM are as follows:
- Dependency tracking and conflict resolution
- Optimised GAR management using repositories
- Ability to rollback containers to previous states
- Container normalisation
Dependency tracking enables GARM to correctly uninstall GARs
even when multiple GARs depend upon the same file. Conflict
resolution at present means that the newest file is kept
when installing a file from a GAR means overwriting an existing
file. Other conflict resolution strategies are possible, but
not yet available in early versions of GARM.
Existing systems for managing GARs on a network of machines
often rely either upon maintaining local copies of all the
GARs needed on a machine, or on downloading them over NFS
or HTTP each time they must be installed. In some systems,
this download is performed at every boot to ensure freshness.
GARM uses a system of XML descriptors which are much smaller
than the GARs they are built from to determine file freshness.
The GAR files themselves are downloaded only when files from them
GARM stores a history of files and their origins. Any file replaced
during an install is recorded in the history along with its origin.
Assuming the file is still available when the GAR that caused it
to be replaced is uninstalled, the file will be reinstalled from
its origin. This rollback makes recovering from bad installations
Container normalisation refers to the ability to specify not
only that the services offered by a container should include
some set of GARs, but also that these should be the ONLY services
offered by the container. Because GARM stores meta-information
about each container, GarmC is able to take an authoritative list
of GARs as an argument and install and uninstall GARs to make
the GARs on that list the only ones installed on the container.
This is a valuable property for convergent configuration.