Configuration files and how they work
All configurations, both client and server work the same. This article documents their commonalities.
Features are:
- XML-based
- Multiple named configurations supported in a given file
- Multiple types of storage may be specified
- Aliases for configurations are allowed.
- Other configuration files may be included (as of OA4MP 1.1)
Comment: ALL tag names are case sensitive in the configuration file -- as per the XML spec,
so "fileStore" works, but "filestore" would not, for instance.
Parameters or, how the system finds its files
There are two things that determine which configuration to use, the file in which it resides and the name
of the configuration in that file. These will henceforth be referred to as the file parameter
and name parameter. To specify parameters you have two options:
- Specify them as context parameters in the web.xml file for Tomcat.
- Specify them as command line arguments to the JVM (prepend "-D"). This is much less common.
Tip: It is a very good idea to put your context parameters in the server web.xml (should be
located at $CATALINA_HOME/conf/web.xml.) This will allow you to swap out/upgrade versions of
OA4MP without having to touch any configuration -- just drop a new version of the war into the right
place and restart the server to get an upgrade.
Clients and servers as well as different versions of
OA4MP have different parameters. The specific of those will be documented elsewhere. However, here
is the definitive list for reference
Component |
Parameter |
Value |
client |
file |
oa4mp:oauth2.client.config.file |
name |
oa4mp:oauth2.client.config.name |
server |
file |
oa4mp:oauth2.server.config.file |
name |
oa4mp:oauth2.server.config.name |
A server example.
This how the the file and name parameters would be specified in the web.xml file:
<context-param>
<param-name>oa4mp:oauth2.server.config.file</param-name>
<param-value>/path/to/cfg.xml</param-value>
</context-param>
<context-param>
<param-name>oa4mp:oauth2.server.config.name</param-name>
<param-value>default</param-value>
</context-param>
in this case the server configuration file at /path/to/cfg.xml would be loaded, searched and the configuration
named "default" would be loaded. For a given version and component, use the appropriate parameter from the table above.
Aliases
An alias is a reference to another named configuration. They are completely analogous to
file links in unix. Only resolves an alias if it is specifically used. It will also throw an exception
if a cycle is detected. By that we mean a chain of aliases that resolves to itself. So if
A refers to B as an alias, and B refers to A, then an exception will occur and
no configuration will be loaded.
A client example using aliases
in this example, the name parameter is "default". Inside the configuration file though, there are a couple of
configurations possible. For instance a production instance and one for debugging. All you would need to switch your
entire installation is to change what the alias points to here (rather than messing around in Tomcat) and restarting the
server.
<config>
<client name="default" alias="postgres-cfg"/>
<client name="postgres-cfg">
<!-- lots of stuff -->
</client>
<client name="debug-cfg">
<!-- lots of other stuff -->
</client>
</config>
Included files.
Configuration files may now be included in other configuration files. Note that
- the other files must be completely correct syntactically. So no snippets.
- there is no limit on the number of files that may be included and referenced files can reference other files.
- all files are ingested first into what is essentially one large configuration internally. Hierarchies of
configurations
will not be understood. What distinguishes configurations is their name. If two configurations with the same
name are encountered, the result will be unpredictable.
- aliases are resolved after loading. This allows you to keep you aliases in any included file and they will be
resolved.
- referenced files are loaded exactly once. So if file A refers to file B which refers to A, Both A and B will
load but no recursion will take place. An informational message will be written to the logs if this happens.
This is not considered a fatal condition.
A client example of using files.
Reworking the above alias example, this is completely equivalent to
<config>
<file include="/path/to/file.xml"/>
<client name="default" alias="postgres-cfg"/>
</config>
and the next file, which is /path/to/file.xml in toto is
<config>
<client name="postgres-cfg">
<!-- lots of stuff -->
</client>
<client name="debug-cfg">
<!-- lots of other stuff -->
</client>
</config>
Refer to the first file in your deployment. The second will be loaded for you automatically.