The configuration syntax is Human-Optimized Configuration Object Notation (HOCON). HOCON is a superset of JavaScript Object Notation (JSON), enhanced for readability. The standard HOCON syntax can be found here. This section focuses on the conventions used to specify configuration data and any differences between the syntax supported in configuration files and the standard HOCON syntax.
Configuration data is contained in a file that must have a suffix of
.conf
. The file name can be any valid file name
supported by the underling operating system. There is no special
significance associated with the file name, i.e. configuration files can
be named anything you want.
The file character encoding can be UTF-8, UTF-16 or UTF-32 as defined by the JSON specification.
There is no support for include directives in configuration files. This is different behavior than standard HOCON, which allows include directives.
Every configuration file must start with a header that contains the configuration type, name, and version identifiers. These identifiers are all strings values. Following the header, a configuration envelope must be specified in which the configuration data is contained. The configuration data allowed within the configuration envelope is defined by the configuration type specified in the header. The supported configuration types are:
com.tibco.ep.dtm.configuration.application
- application definition configuration. See the Transactional Memory Developers Guide for
details.
com.tibco.ep.dtm.configuration.node
- node
deployment configuration. See Chapter 3, Node Deploy Configuration
for details.
com.tibco.ep.dtm.configuration.javaengine
-
Java engine configuration. See the section called “Java engine configuration objects” for
details.
com.tibco.ep.dtm.configuration.security
-
security configuration. See the section called “Configuration”
for details.
Example 8.5. Configuration header and envelope
// // Header values // name = "integration-test-application" version = "10.0.0" type = "com.tibco.ep.dtm.configuration.application" // // Configuration envelope // configuration = { // configuration data specific to configuration type }
These terms are used to describe configuration data:
Root Object - Root objects are the
first-level children in the configuration envelope for a type.
Each type defines one or more root objects. A configuration
envelope – that is, a single .conf
file – can
contain zero or one root objects for each schema defined. For
example, LocalAdminAuthenticationRealm
and
TrustedHosts
are root objects in this
configuration.
configuration = { LocalAdminAuthenticationRealm = { ... } TrustedHosts = { ... } }
Object - Objects are descendants of a
root object and its contents are delimited with braces. For
example, nodes
and
availabilityZones
are objects in this
configuration.
configuration = { NodeDeploy = { nodes = { ... } availabilityZones = { ... } } }
Array - Arrays are a keyword whose
contents are delimited with brackets, such as
jvmArgs
in this configuration. Each item in an
array can be delimited with an optional comma
(,
).
configuration = { JavaEngine = { jvmArgs = [ "-Xmx1024m", "-Xms512m", "-XX:MaxPermSize=768m", "-Xdebug", "-Xnoagent" "-Djava.compiler=NONE', "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005" ] } }
Property - Properties are fields that do
not contain an object or an array. For example,
minimumDispatchThreads
is a property in this
configuration.
configuration = { JavaEngine = { jvm = { minimumDispatchThreads = 10 } } }
Substitution variable support is provided in configuration
files. Substitution variables are specified as parameters to certain
epadmin
commands, either directly on the command
line, or using a substitution file. In all cases substitution variables
are merged using these rules (in priority order):
substitutions
parameter to install
node
(see the section called “install command”) or
load configuration
(see the section called “load command”).
a substitution file specified using the
substitutionfile
parameter to install
node
(see the section called “install command”) or
load configuration
(see the section called “load command”).
For example, if the same substitution variable value is specified
in a substitution file using the install node
substitutionfile
parameter and also in the
substitutions
parameter, the value specified in the
substitutions
parameter would be used.
There is no support for using an environment variable value as a substitution variable value. This is different behavior than standard HOCON, which allows environment variable values to be used as a substitution variable value.
Substitution variables must follow these rules:
Defined using
${
<variable-name>[:-<default-value>]
}
.
This defines a substitution variable named
<variable-name>
with an optional
default value of
<default-value>.
<variable-name>
can only
contain characters specified by this regular expression
[a-zA-Z0-9\\.-_]+
.
<variable-name>
cannot
contain the HOCON escape character (\
).
Substitution variable values, and
<default-value>
expressions, cannot
contain unescaped newlines. Escaped newlines
(\\n
) are permitted, and will result in a newline
character appearing in the substituted value.
Nested substitution variables are not allowed (these are allowed by standard HOCON). For example,
foo = bar bar = biz ${${foo}} // returns an error instead of the value biz
Substitution variables are supported anywhere in a configuration file, including the left-hand side of an assignment (extension to standard HOCON).
Substitution variables on the left-hand side of an assignment that contain the "." character must be surrounded with double quotes to prevent the value from being interpreted as a HOCON path (extension to standard HOCON)
Substitution variables are supported in quoted strings (extension to standard HOCON).
Example 8.6, “Substitution variables” and Example 8.7, “Default substitution variable value” show examples of the substitution variable rules.
Example 8.6. Substitution variables
// // Setting substitution variables on command line // epadmin load configuration source=my.conf substitutions="NODE_NAME=A.X,PROJECT_VERSION=1.0" // // Use substitution variable in configuration file header // name = "integration-test-application" version = ${PROJECT_VERSION} type = "com.tibco.ep.dtm.configuration.node" configuration = { NodeDeploy = { nodes = { // // Use substitution variable on left-hand side // of an assignment in a quoted string // "${NODE_NAME}" = { ... } } } }
Example 8.7. Default substitution variable value
configuration = { ApplicationDefinition = { execution { dataTransport = { // // Default value of 10 if not specified // nodeActiveTimeoutSeconds = ${TIME_OUT_VALUE:-10} } } } }
Per the standard HOCON specification, the \
escape character is used to escape the next character in the file. In
all cases, except one, the escape character is significant and must
follow the standard HOCON parsing rules. The one exception is escape
characters in front of substitution variable definitions are ignored.
For example,
configuration = { name = \${value} } // // Processed as (escape character stripped) // configuration = { name = ${value} }
To escape the $
character that starts a
substitution variable definition use:
configuration = { name = \\\${value} } // // Processed as (substitution variable escaped) // configuration = { name = \${value} }
Built-in substitution variables are available. Built-in substitution variables can be used anywhere in a configuration file where a standard substitution variable can be used. Built-in substitution variables do not need to specified as described in the section called “Substitution variables”. These are the built-in substitution variables:
The values in configuration objects follow the standard HOCON
syntax, including support for unit formatting, e.g.
ms
, bytes
, MB
.
The complete list of the standard supported unit formatting can be found
here.
The supported date formats for date fields are:
ISO8601 combined date and time -
yyyy-MM-dd'T'HH:mm:ss
ISO8601 with milliseconds -
yyyy-MM-dd'T'HH:mm:ss.SSS
Time only -
HH
:mm
:ss
.
// // Date value with timezone // dateValue = "1970-01-30T12:34:00" // // Date value with milliseconds // dateValue = "1970-01-30T12:34:00.100" // // Time-only date value // dateValue = "12:34:56"
HOCON configuration files embedded in another configuration
file, e.g. the section called “NodeDeploy”, must be embedded in a
triple ("""
) quote.
NodeDeploy = { globalConfiguration = [ // // Embedded configuration must be triple quoted // """ name = "mysecurity" type = "com.acme.security.keystore" version = "1.0.0" configuration = { CommunicationSecurity = { keyStore = "myKeyStore.jks" keyStorePassword = "secret" } } """ ] }