2.6. Data structure overview
Interchange has three major data stuctures, which correspond to the master server, the catalog, and the user.
You can examine two of these structures by setting in interchange.cfg:
This will by default dump an interchange.structure file which shows the global configuration, and a CATALOGNAME.structure file in each catalog directory showing that catalog's configuration.
The third structure, the user data session, can be viewed with the following ITL placed in a page:
This is held in a set of variables inhabiting the Global package. They define overall server behavior, and contain pointers to the catalog structures.
The Global configuration is defined in interchange.cfg and any files that it reads via include statements. The configuration is produced by parsing interchange.cfg with the routine Vend::Config::global_config.
Directives can be defined for parsing by the catalog configuration within the global configuration -- and they can be deleted as well.
The only way to define new global directives is via hacking the source. Luckily, this is just about never needed -- you can define settings for use by your programs in Variable or other repositories.
Each Interchange catalog has its own configuration completely independent from others. It is basically produced from the file catalog.cfg in the directory defined as the base for the catalog. It is parsed by the subroutine Vend::Config::config.
We say basically, because there are many ways to alter catalog configuration. (CATNAME below refers to the name of the catalog being configured.)
Global catalog configuration preamble, affecting all catalogs, can be defined by the Global directive ConfigAllBefore. It defaults to catalog_before.cfg in the Interchange software directory (/usr/local/interchange).
An individual per-catalog preamble configuration is defined in $Global::ConfDir/CATNAME.before.
By default it would be /usr/local/interchange/etc/CATNAME.before.
A file in the catalog directory which is read before catalog.cfg. Deprecated.
The normal configuration file.
An individual per-catalog postamble configuration is defined in $Global::ConfDir/CATALOGNAME.after. This can be used to prevent user catalogs from doing unsafe things -- for instance enforcing the use of encryption, or preventing running in WideOpen mode.
By default it would be /usr/local/interchange/etc/CATALOGNAME.after.
Global catalog configuration postamble, affecting all catalogs, can be defined by the Global directive ConfigAllAfter. It defaults to catalog_after.cfg in the Interchange software directory (/usr/local/interchange).
Any configuration passed on the command line at Interchange startup is applied last. For instance, to test out a catalog named foundation with a different invocation URL without having to alter the config files:
bin/interchange --foundation:VendURL=http://localhost/cgi-bin/found \
- foundation:SecureURL=http://localhost/cgi-bin/found \
That will set the foundation catalog directive values VendURL, SecureURL, and RobotLimit, overriding any settings in the configuration files.
Interchange has dynamic catalog configuration as well. See Programming Watch Points in catalog.cfg.