From 21f32755b315089a3c8f793d79e6ae4af0b721c9 Mon Sep 17 00:00:00 2001 From: Tony Germano Date: Sat, 14 Jun 2025 01:44:18 -0400 Subject: [PATCH] Add oieserver launcher script This script is the main launcher for the Open Integration Engine (OIE) server. It prepares the Java environment and executes the server launcher JAR file. The script automatically finds a compatible Java runtime (version 17+ by default) by searching for a valid executable in the following priority order: 1. The OIE_JAVA_PATH environment variable. 2. The -java-cmd directive in the oieserver.vmoptions file or included .vmoptions files. Must specify the path to the 'java' executable. This is the preferred way to declare the desired version for running the server and can be overridden by OIE_JAVA_PATH. Can be a relative path from the location of this script. 3. The JAVA_HOME environment variable. 4. The 'java' command available in the system's PATH. It also parses the 'oieserver.vmoptions' file to configure JVM options, system properties (-D...), and classpath modifications. Signed-off-by: Tony Germano Co-authored-by: Mitch Gaffigan Issue: https://github.com/OpenIntegrationEngine/engine/issues/2 --- server/basedir-includes/oieserver | 281 +++++++++++++++++++++++++ server/basedir-includes/oieserver.ps1 | 292 ++++++++++++++++++++++++++ server/build.xml | 3 + server/conf/custom.vmoptions | 6 +- 4 files changed, 580 insertions(+), 2 deletions(-) create mode 100755 server/basedir-includes/oieserver create mode 100644 server/basedir-includes/oieserver.ps1 diff --git a/server/basedir-includes/oieserver b/server/basedir-includes/oieserver new file mode 100755 index 000000000..b1180e5db --- /dev/null +++ b/server/basedir-includes/oieserver @@ -0,0 +1,281 @@ +#!/usr/bin/env bash +# +# SPDX-License-Identifier: MPL-2.0 +# SPDX-FileCopyrightText: 2025 Tony Germano and Mitch Gaffigan +# + +# ============================================================================= +# Open Integration Engine Server Launcher Script +# +# Description: +# This script is the main launcher for the Open Integration Engine (OIE) +# server. It prepares the Java environment and executes the server launcher +# JAR file. +# +# The script automatically finds a compatible Java runtime (version 17+ by +# default) by searching for a valid executable in the following priority order: +# 1. The OIE_JAVA_PATH environment variable. +# 2. The -java-cmd directive in the oieserver.vmoptions file or included +# .vmoptions files. Must specify the path to the 'java' executable. +# This is the preferred way to declare the desired version for running +# the server and can be overridden by OIE_JAVA_PATH. Can be a relative +# path from the location of this script. +# 3. The JAVA_HOME environment variable. +# 4. The 'java' command available in the system's PATH. +# +# It also parses the 'oieserver.vmoptions' file to configure JVM options, +# system properties (-D...), and classpath modifications. +# +# Usage: +# ./oieserver.sh [app-arguments] +# +# All [app-arguments] are passed directly to the underlying Java application +# (com.mirth.connect.server.launcher.MirthLauncher). +# +# Configuration via Environment Variables: +# OIE_JAVA_PATH - (Highest priority) Set the full path to the 'java' +# executable to be used. Can be a relative path from the +# location of this script or a tilde path +# (e.g., ~/path/to/java). +# JAVA_HOME - Set the path to the root of a Java installation. The +# script will look for 'bin/java' within this path. +# ============================================================================= + +APP_ARGS=("$@") +MIN_JAVA_VERSION=17 + +# Set OIE_HOME to the script directory +OIE_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" +# The engine expects it's working directory to be OIE_HOME +if ! cd "$OIE_HOME"; then + echo "Error: Could not change to the OIE_HOME directory: $OIE_HOME" >&2 + exit 1 +fi +LAUNCHER_JAR="$OIE_HOME/mirth-server-launcher.jar" +CLASSPATH="$LAUNCHER_JAR" +VMOPTIONS=() +# This will hold the validated path to the Java executable. It is intentionally left empty for now. +FINAL_JAVA_CMD="" +# This will temporarily hold the result from parsing the vmoptions file. +VMOPTIONS_JAVA_CMD="" +VMOPTIONS_JAVA_CMD_FILE="" + + +# --- Function to resolve a path to a canonical absolute path --- +# Resolves a given path, handling tilde, relative, and '..' components. +# @param $1: The path to resolve. +# @echo: The resolved, canonical absolute path. +resolve_canonical_path() { + local path_to_resolve="$1" + + # Explicitly handle tilde expansion first + path_to_resolve=$(sed -E "s,^~(/|$),${HOME}\1," <<< "$path_to_resolve") + + # If the path is not absolute, assume it's relative to OIE_HOME + if [[ ! "$path_to_resolve" =~ ^/ ]]; then + path_to_resolve="$OIE_HOME/$path_to_resolve" + fi + + # Use cd and pwd to resolve '..' and '.' components for a canonical path. + if [[ -d "$(dirname "$path_to_resolve")" ]]; then + echo "$(cd "$(dirname "$path_to_resolve")" && pwd)/$(basename "$path_to_resolve")" + else + echo "$path_to_resolve" + fi +} + +# --- Function to expand environment variable in a string --- +# @param $1: The line to expand +# @echo: The expanded line +expand_line_variables() { + local line="$1" + local result_line="" + + # This loop consumes the line from left to right, preventing recursive expansion. + while [[ "$line" =~ (\$\{([a-zA-Z_][a-zA-Z0-9_]*)\}) ]]; do + # Append the text before the match to our result. + result_line+="${line%%"${BASH_REMATCH[0]}"*}" + + # Get the variable name and its value. + local var_name="${BASH_REMATCH[2]}" + # Use indirect expansion to get the variable's value. Do not replace if not set. + if [[ -v "$var_name" ]]; then + local var_value="${!var_name}" + result_line+="$var_value" + else + result_line+="${BASH_REMATCH[0]}" + fi + + # Update the line to be only the portion *after* the match. + line="${line#*"${BASH_REMATCH[0]}"}" + done + + # Append any remaining part of the line after the last match and return. + echo "$result_line$line" +} + +# --- Function to validate Java version --- +# Checks if a given command points to a Java executable of the required minimum version. +# @param $1: The java command or path to check +# @return: 0 on success (is valid), 1 on failure. +is_valid_java_version() { + local java_cmd="$1" + + # Check if the command is found and is executable + if ! command -v "$java_cmd" &> /dev/null || ! [[ -x "$(command -v "$java_cmd")" ]]; then + return 1 + fi + + # Execute 'java -version' and capture the output from stderr + # Example output: openjdk version "17.0.2" 2022-07-19 + local version_output + version_output=$("$java_cmd" -version 2>&1) + + # Check if the version command succeeded + if [[ $? -ne 0 ]]; then + return 1 + fi + + # Extract the major version number. This works for formats like "1.8.0" and "17.0.2". + local major_version + major_version=$(echo "$version_output" | head -n 1 | cut -d '"' -f 2 | cut -d '.' -f 1) + + # Check if the extracted version is a number and meets the minimum requirement + if [[ "$major_version" =~ ^[0-9]+$ ]] && [[ "$major_version" -ge "$MIN_JAVA_VERSION" ]]; then + return 0 # Success + else + return 1 # Failure + fi +} + +# Set Java options by parsing the vmoptions file +parse_vmoptions() { + local file="$1" + + if [[ ! -f "$file" ]]; then + echo "Warning: VM options file not found: $file" >&2 + return 1 + fi + + # Read the file line by line + while IFS= read -r line; do + # Trim leading/trailing whitespace + line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + + # Skip empty lines and comments + if [[ -z "$line" || "$line" =~ ^# ]]; then + continue + fi + + line=$(expand_line_variables "$line") + + # Check for -include-options directive + if [[ "$line" =~ ^-include-options[[:space:]]+(.+) ]]; then + local included_file="${BASH_REMATCH[1]}" + # Resolve relative paths + if [[ ! "$included_file" =~ ^/ ]]; then # Not an absolute path + included_file="$(dirname "$file")/$included_file" + fi + # Recursively call parse_vmoptions for the included file + parse_vmoptions "$included_file" + elif [[ "$line" =~ ^-classpath[[:space:]]+(.+) ]]; then + # Handle -classpath directive + CLASSPATH="${BASH_REMATCH[1]}" + elif [[ "$line" =~ ^-classpath/a[[:space:]]+(.+) ]]; then + # Handle -classpath/a directive (append to existing classpath) + CLASSPATH="${CLASSPATH}:${BASH_REMATCH[1]}" + elif [[ "$line" =~ ^-classpath/p[[:space:]]+(.+) ]]; then + # Handle -classpath/p directive (prepend to existing classpath) + CLASSPATH="${BASH_REMATCH[1]}:${CLASSPATH}" + elif [[ "$line" =~ ^-java-cmd[[:space:]]+(.+) ]]; then + # Handle -java-cmd directive + # Store the path and the file it was found in. Validation is deferred. + VMOPTIONS_JAVA_CMD=$(resolve_canonical_path "${BASH_REMATCH[1]}") + VMOPTIONS_JAVA_CMD_FILE="$file" + else + # Add the option to the accumulated string + VMOPTIONS+=("$line") + fi + done < "$file" + return 0 +} + +# --- Main Logic --- + +# 1. Recursively parse the VM options file to populate vmoptions variables. +parse_vmoptions "$OIE_HOME/oieserver.vmoptions" + +# 2. Ensure the launcher JAR is always in the classpath. +case "$CLASSPATH" in + *"$LAUNCHER_JAR"*) + # It's already there, do nothing. + ;; + *) + # Prepend the launcher JAR if a custom classpath was provided. + echo "Info: Prepending mirth-server-launcher.jar to the classpath." + CLASSPATH="$LAUNCHER_JAR:$CLASSPATH" + ;; +esac + +# 3. Discover the Java executable using the documented priority order. + +# Check OIE_JAVA_PATH (fail-fast on invalid). +if [[ -n "$OIE_JAVA_PATH" ]]; then + resolved_path=$(resolve_canonical_path "$OIE_JAVA_PATH") + if is_valid_java_version "$resolved_path"; then + echo "Info: Found suitable java version specified by the OIE_JAVA_PATH environment variable" + FINAL_JAVA_CMD="$resolved_path" + else + echo "Error: '$resolved_path' is specified by the OIE_JAVA_PATH environment variable, which is not a valid Java executable of at least version $MIN_JAVA_VERSION. Exiting." >&2 + exit 1 + fi +fi + +# Check -java-cmd from vmoptions (fail-fast on invalid, only if not already found). +if [[ -z "$FINAL_JAVA_CMD" ]] && [[ -n "$VMOPTIONS_JAVA_CMD" ]]; then + if is_valid_java_version "$VMOPTIONS_JAVA_CMD"; then + echo "Info: Found suitable java version specified by the -java-cmd directive in '$VMOPTIONS_JAVA_CMD_FILE'" + FINAL_JAVA_CMD="$VMOPTIONS_JAVA_CMD" + else + echo "Error: '$VMOPTIONS_JAVA_CMD' is specified by the -java-cmd directive in '$VMOPTIONS_JAVA_CMD_FILE', which is not a valid Java executable of at least version $MIN_JAVA_VERSION. Exiting." >&2 + exit 1 + fi +fi + +# Check JAVA_HOME (no fail-fast). +if [[ -z "$FINAL_JAVA_CMD" ]] && [[ -d "$JAVA_HOME" ]]; then + java_home_path="$JAVA_HOME/bin/java" + if is_valid_java_version "$java_home_path"; then + echo "Info: Found suitable java version specified by the JAVA_HOME environment variable" + FINAL_JAVA_CMD="$java_home_path" + else + echo "Warning: '$java_home_path' is specified by the JAVA_HOME environment variable, which is not a valid Java executable of at least version $MIN_JAVA_VERSION. Ignoring." >&2 + fi +fi + +# Check system PATH (no fail-fast). +if [[ -z "$FINAL_JAVA_CMD" ]]; then + if is_valid_java_version "java"; then + echo "Info: Found suitable java version in the PATH" + FINAL_JAVA_CMD="java" + else + echo "Warning: 'java' does not exist in your PATH or is not a valid Java executable of at least version $MIN_JAVA_VERSION." >&2 + fi +fi + +# 4. Final check for a valid Java path before execution. +if [[ -z "$FINAL_JAVA_CMD" ]]; then + echo "Error: Could not find a Java ${MIN_JAVA_VERSION}+ installation." >&2 + echo "Please configure -java-cmd in conf/custom.vmoptions, set OIE_JAVA_PATH, set JAVA_HOME, or ensure 'java' in your PATH is version ${MIN_JAVA_VERSION} or higher." >&2 + exit 1 +fi + +JAVA_OPTS=("${VMOPTIONS[@]}" + "-cp" "$CLASSPATH" + "com.mirth.connect.server.launcher.MirthLauncher" + "${APP_ARGS[@]}") + +# Launch Open Integration Engine (as this PID with exec) +echo "Starting Open Integration Engine..." +echo "$FINAL_JAVA_CMD ${JAVA_OPTS[*]}" +exec "$FINAL_JAVA_CMD" "${JAVA_OPTS[@]}" diff --git a/server/basedir-includes/oieserver.ps1 b/server/basedir-includes/oieserver.ps1 new file mode 100644 index 000000000..79ff35350 --- /dev/null +++ b/server/basedir-includes/oieserver.ps1 @@ -0,0 +1,292 @@ +# +# SPDX-License-Identifier: MPL-2.0 +# SPDX-FileCopyrightText: 2025 Tony Germano and Mitch Gaffigan +# + +<# +.SYNOPSIS + Open Integration Engine Server Launcher Script (PowerShell Version) + +.DESCRIPTION + This script is the main launcher for the Open Integration Engine (OIE) + server. It prepares the Java environment and executes the server launcher + JAR file. + + The script automatically finds a compatible Java runtime (version 17+ by + default) by searching for a valid executable in the following priority order: + + 1. The OIE_JAVA_PATH environment variable. + 2. The -java-cmd directive in the oieserver.vmoptions file or included .vmoptions + files. Must specify the path to the 'java' executable. This is the preferred + way to declare the desired version for running the server and can be overridden + by OIE_JAVA_PATH. Can be a relative path from the location of this script. + 3. The JAVA_HOME environment variable. + 4. The 'java' command available in the system's PATH. + + It also parses the 'oieserver.vmoptions' file to configure JVM options, + system properties (-D...), and classpath modifications. + +.NOTES + Configuration via Environment Variables: + OIE_JAVA_PATH - (Highest priority) Set the full path to the 'java' + executable to be used. Can be a relative path from the + location of this script or a tilde path + (e.g., ~/path/to/java). + JAVA_HOME - Set the path to the root of a Java installation. The + script will look for 'bin/java' within this path. + +.PARAMETER AppArgs + Arguments passed directly to the underlying Java application + (com.mirth.connect.server.launcher.MirthLauncher). + +.EXAMPLE + ./oieserver.ps1 + +.EXAMPLE + $env:OIE_JAVA_PATH = 'C:\path\to\java.exe'; + ./oieserver.ps1 -Dproperty=value --some-arg value +#> + +param( + [parameter(ValueFromRemainingArguments = $true)][string[]] $AppArgs +) + +# Stop on any error and exit non-zero +$ErrorActionPreference = "Stop" +$MinJavaVersion = 17 + +# Set OieHome to the script directory using PowerShell's built-in variable +$OieHome = $PSScriptRoot +$LauncherJar = Join-Path -Path $OieHome -ChildPath "mirth-server-launcher.jar" + # Use script scope to be modifiable by functions +$script:Classpath = [System.Collections.Generic.List[string]]::new() +$script:Classpath.Add($LauncherJar) +$script:VmOptions = [System.Collections.Generic.List[string]]::new() + +# This will hold the validated path to the Java executable. +$FinalJavaCmd = $null +# This will temporarily hold the result from parsing the vmoptions file. +$script:VmOptionsJavaCmd = $null +$script:VmOptionsJavaCmdFile = $null + +# --- Function to resolve a path to a canonical absolute path --- +function Resolve-CanonicalPath([string]$PathToResolve) { + # Explicitly handle simple tilde expansion first (`~/` or `~`) + if ($PathToResolve -match '^~(/|$)') { + $homePath = $env:HOME + if ([string]::IsNullOrWhiteSpace($homePath)) { + $homePath = $env:USERPROFILE + } + $PathToResolve = ($PathToResolve -replace '^~/', "$($homePath)/") -replace '^~$', $homePath + } + + # If the path is not absolute, assume it's relative to OieHome + if (-not [System.IO.Path]::IsPathRooted($PathToResolve)) { + $PathToResolve = Join-Path -Path $OieHome -ChildPath $PathToResolve + } + + $parentDir = [System.IO.Path]::GetDirectoryName($PathToResolve) + $leaf = [System.IO.Path]::GetFileName($PathToResolve) + + # Only resolve the path if the parent directory actually exists. + if (Test-Path -LiteralPath $parentDir -PathType Container) { + $resolvedParentDir = (Resolve-Path -LiteralPath $parentDir).Path + return Join-Path -Path $resolvedParentDir -ChildPath $leaf + } + else { + return $PathToResolve + } +} + +# --- Function to safely expand specific variable formats in a string --- +function Expand-LineVariables([string]$Line) { + # Define a "match evaluator" script block. This block will be called + # for every match the regex finds. + $evaluator = { + param($match) + + # The variable name is in the first capture group. + $varName = $match.Groups[1].Value + + # Look for a PowerShell variable first. + $varValue = (Get-Variable -Name $varName -Scope "global" -ErrorAction SilentlyContinue).Value + # If not found, look for an environment variable. + if ($null -eq $varValue) { + $varValue = (Get-Variable -Name "env:$varName" -ErrorAction SilentlyContinue).Value + } + + # If a value was found (it's not null), return it. + # Otherwise, return the original text that was matched (e.g., "${UNDEFINED_VAR}"). + if ($null -ne $varValue) { + return $varValue + } else { + return $match.Value + } + } + + # Define the regex pattern to find ${...} variables. + $regex = '\$\{([a-zA-Z_][a-zA-Z0-9_]*)\}' + + # Use the static Replace method, passing the input line, the regex, and our evaluator. + $expandedLine = [regex]::Replace($Line, $regex, $evaluator) + + return $expandedLine +} + +# --- Function to validate Java version --- +function Test-IsValidJavaVersion([string] $JavaCmd) { + # Check if the command is found and is executable + if (-not (Get-Command $JavaCmd -ErrorAction SilentlyContinue)) { + return $false + } + + # Execute 'java -version' and capture the output from stderr + # Example output: openjdk version "17.0.2" 2022-07-19 + try { + $versionOutput = & $JavaCmd -version 2>&1 + } + catch { + return $false + } + + if ($LASTEXITCODE -ne 0) { + return $false + } + + # Extract the major version number. This works for formats like "1.8.0" and "17.0.2". + $match = $versionOutput | Select-String -Pattern '"(\d+)\.' + return ($match -and ($match.Matches[0].Groups[1].Value -as [int]) -ge $MinJavaVersion) +} + +# --- Function to parse vmoptions file --- +function Parse-VmOptions([string] $File) { + + if (-not (Test-Path -LiteralPath $File -PathType Leaf)) { + Write-Warning "VM options file not found: $File" + return + } + + # Read the file line by line + Get-Content -Path $File | ForEach-Object { + $line = $_.Trim() + + # Skip empty lines and comments + if ([string]::IsNullOrWhiteSpace($line) -or $line.StartsWith('#')) { + return + } + + $line = Expand-LineVariables -Line $line + + if ($line -match '^-include-options\s+(.+)') { + $includedFile = $matches[1].Trim() + # Resolve relative paths to the current file's directory + if (-not [System.IO.Path]::IsPathRooted($includedFile)) { + $includedFile = Join-Path -Path (Split-Path -Path $File -Parent) -ChildPath $includedFile + } + Parse-VmOptions -File $includedFile + } + elseif ($line -match '^-classpath\s+(.+)') { + $script:Classpath.Clear() + $script:Classpath.Add($matches[1].Trim()) + } + elseif ($line -match '^-classpath/a\s+(.+)') { + $script:Classpath.Add($($matches[1].Trim()) + } + elseif ($line -match '^-classpath/p\s+(.+)') { + $script:Classpath.Insert(0, $($matches[1].Trim()) + } + elseif ($line -match '^-java-cmd\s+(.+)') { + # Store the path and the file it was found in. Validation is deferred. + $script:VmOptionsJavaCmd = Resolve-CanonicalPath -PathToResolve $matches[1].Trim() + $script:VmOptionsJavaCmdFile = $File + } + else { + $script:VmOptions.Add($line) + } + } +} + +# --- Main Logic --- + +# 1. Recursively parse the VM options file to populate vmoptions variables. +Parse-VmOptions -File (Join-Path -Path $OieHome -ChildPath "oieserver.vmoptions") + +# 2. Ensure the launcher JAR is always in the classpath. +if (-not $script:Classpath.Contains($LauncherJar)) { + Write-Host "Info: Prepending mirth-server-launcher.jar to the classpath." -ForegroundColor Green + $script:Classpath.Insert(0, $LauncherJar) +} + +# 3. Discover the Java executable using the documented priority order. + +# Check OIE_JAVA_PATH (fail-fast on invalid). +if (-not [string]::IsNullOrWhiteSpace($env:OIE_JAVA_PATH)) { + $resolvedPath = Resolve-CanonicalPath -PathToResolve $env:OIE_JAVA_PATH + if (Test-IsValidJavaVersion -JavaCmd $resolvedPath) { + Write-Host "Info: Found suitable java version specified by the OIE_JAVA_PATH environment variable" -ForegroundColor Green + $FinalJavaCmd = $resolvedPath + } else { + Write-Error "'$resolvedPath' is specified by the OIE_JAVA_PATH environment variable, which is not a valid Java executable of at least version $MinJavaVersion. Exiting." + } +} + +# Check -java-cmd from vmoptions (fail-fast on invalid, only if not already found). +if (-not $FinalJavaCmd -and -not [string]::IsNullOrWhiteSpace($script:VmOptionsJavaCmd)) { + if (Test-IsValidJavaVersion -JavaCmd $script:VmOptionsJavaCmd) { + Write-Host "Info: Found suitable java version specified by the -java-cmd directive in '$($script:VmOptionsJavaCmdFile)'" -ForegroundColor Green + $FinalJavaCmd = $script:VmOptionsJavaCmd + } else { + Write-Error "'$($script:VmOptionsJavaCmd)' is specified by the -java-cmd directive in '$($script:VmOptionsJavaCmdFile)', which is not a valid Java executable of at least version $MinJavaVersion. Exiting." + exit 1 + } +} + +# Check JAVA_HOME (no fail-fast). +if (-not $FinalJavaCmd -and (Test-Path -Path $env:JAVA_HOME -PathType Container)) { + $javaHomePath = Join-Path -Path (Join-Path -Path $env:JAVA_HOME -ChildPath "bin") -ChildPath "java" + if (Test-IsValidJavaVersion -JavaCmd $javaHomePath) { + Write-Host "Info: Found suitable java version specified by the JAVA_HOME environment variable" -ForegroundColor Green + $FinalJavaCmd = $javaHomePath + } else { + Write-Warning "'$javaHomePath' is specified by the JAVA_HOME environment variable, which is not a valid Java executable of at least version $MinJavaVersion. Ignoring." + } +} + +# Check system PATH (no fail-fast). +if (-not $FinalJavaCmd) { + if (Get-Command "java" -ErrorAction SilentlyContinue) { + if (Test-IsValidJavaVersion -JavaCmd "java") { + Write-Host "Info: Found suitable java version in the PATH" -ForegroundColor Green + $FinalJavaCmd = "java" + } else { + Write-Warning "'java' does not exist in your PATH or is not a valid Java executable of at least version $MinJavaVersion." + } + } +} + +# 4. Final check for a valid Java path before execution. +if (-not $FinalJavaCmd) { + Write-Error "Could not find a Java $($MinJavaVersion)+ installation. Please configure -java-cmd in conf/custom.vmoptions, set OIE_JAVA_PATH, set JAVA_HOME, or ensure 'java' in your PATH is version $($MinJavaVersion) or higher." +} + +# 5. Assemble final arguments and launch the process. +$javaOpts = [System.Collections.Generic.List[string]]::new() +$javaOpts.AddRange($script:VmOptions) +$javaOpts.Add("-cp") +$javaOpts.Add($script:Classpath -join [System.IO.Path]::PathSeparator) +$javaOpts.Add("com.mirth.connect.server.launcher.MirthLauncher") +if ($AppArgs) { $javaOpts.AddRange($AppArgs) } + +# Launch Open Integration Engine +Write-Host "Starting Open Integration Engine..." -ForegroundColor Green +Write-Host ("$FinalJavaCmd " + (($javaOpts | %{ "`"$_`"" }) -join ' ')); + +# The engine expects it's working directory to be OieHome +Push-Location -Path $OieHome +try { + & $FinalJavaCmd @javaOpts + exit $LASTEXITCODE +} +finally { + Pop-Location +} diff --git a/server/build.xml b/server/build.xml index b49139b87..6fb6f316d 100644 --- a/server/build.xml +++ b/server/build.xml @@ -1007,6 +1007,9 @@ + + + diff --git a/server/conf/custom.vmoptions b/server/conf/custom.vmoptions index 1acaf2e42..ab1f51fc0 100644 --- a/server/conf/custom.vmoptions +++ b/server/conf/custom.vmoptions @@ -1,7 +1,8 @@ # Add any custom vmoptions to this file. Special directives are: # # -include-options -# : include options from another .vmoptions file. Applied recursively. +# : include options from another .vmoptions file. Applied recursively. Relative paths +# : are relative to the current vmoptions file. # # -classpath # : replace the classpath built so far with @@ -13,7 +14,8 @@ # : append to classpath. # # -java-cmd -# : use the java binary specified to launch the engine. +# : use the java binary specified to launch the engine. Relative paths are relative to +# : the engine home directory. # # Additionally, the form ${ENV_VAR} can be used anywhere in the file to substitute the value # from an environment variable.