Java Options¶
Java options are the settings QIE reads at startup, before it can reach the database: where the QIE home directory is, which database to connect to, whether to run clustered. Everything on the System Configuration page is stored in the database. Java options are how QIE finds the database in the first place.
They are named qie.* and are supplied to the JVM as -D arguments:
Every option, generated¶
QIE ships a generated reference for every option, listing its name, label, default, description, and an example. The reference is built from the same definitions the engine reads at startup, so it can never drift from the running build.
Every option is also listed individually under All Java Options in the navigation just below this page, grouped by category and searchable by name. That reference is authoritative and this page does not duplicate it. What follows is the part the generated reference cannot tell you: where to put an option, and which one wins when the same setting is specified twice.
Note
There are far more options than most systems ever set. The large majority are internal tuning values with sensible defaults, and are hidden from the reference for that reason. Setting an option you have not been asked to set is rarely an improvement. The defaults are what every QIE installation is tested against.
Where to set them¶
Where an option goes depends on how QIE was installed. The same option name works in all four places.
Windows service: Use the QIE Service Manager, which writes the arguments into the service definition. See Service Manager. Editing the service by hand is not necessary and is easy to get wrong.
Linux and macOS: Add the -D argument to the launcher invocation in the service unit or start script. See Installing on Linux/Mac.
Containers: Set the equivalent environment variable rather than a -D argument, so the option can be supplied by the orchestrator. See Java Options and Environment Variables for the container-specific names and the Kubernetes examples.
A developer workstation: Add them to the run configuration's VM options.
Environment variables work too¶
Every option can be supplied as an environment variable instead of a -D argument. QIE looks for the system property first, and falls back to the environment, trying both the option name and the name with dots replaced by underscores:
| Form | Example |
|---|---|
| System property | -Dqie.haEngine=EnterpriseHAServiceImpl |
| Environment variable, underscores | QIE_HAENGINE=EnterpriseHAServiceImpl |
| Environment variable, dotted | qie.haEngine=EnterpriseHAServiceImpl |
A -D argument silently wins over the environment
Because the system property is checked first, an option set both ways takes the -D value and the environment variable is ignored with no warning. This is the usual explanation for a container that appears to ignore an environment variable you know you set: something is also passing it as a -D. Check the launcher arguments before assuming the variable is wrong.
Options that need a restart¶
All of them. Java options are read as the JVM starts, so changing one means restarting QIE. The settings on the System Configuration page are different, and most of them take effect on save.
The options most systems do set¶
These four come up in nearly every installation. Everything else, check the generated reference first.
| Option | Purpose |
|---|---|
qie.home |
The QIE installation folder, holding logs, lib, and the working directory. QIE cannot start without it. |
qie.haEngine |
Set to EnterpriseHAServiceImpl to run clustered. Left unset, QIE runs standalone. See High Availability. |
qie.lib.folder |
Where third-party JARs are loaded from. Defaults to {qie.home}/lib; override when libraries are on a shared volume, which is the usual arrangement in a cluster. |
qie.tempWarDirectory |
Where the service extracts the WAR. Defaults to {qie.home}/qieWorkingDirectory. Worth setting when the OS temp directory is small or aggressively cleaned. |
The database connection options (connection.url, connection.driver, connection.username, connection.password, hibernate.dialect) are set the same way. See Supported Databases, and Encrypting the Database Password for keeping the password out of plain text.