From 3b72282c60aa6795f1e122211d889b14d80cfe33 Mon Sep 17 00:00:00 2001 From: ar-agt Date: Thu, 30 Apr 2026 22:45:01 -0300 Subject: [PATCH] Update q2 launcher script --- tutorials/channel-adaptor/src/dist/bin/q2 | 85 +++++++++++++++--- tutorials/dirpoll/src/dist/bin/q2 | 85 +++++++++++++++--- tutorials/logon-manager/src/dist/bin/q2 | 85 +++++++++++++++--- tutorials/muxpool/src/dist/bin/q2 | 85 +++++++++++++++--- tutorials/qbean-primer/src/dist/bin/q2 | 86 ++++++++++++++++--- tutorials/qbean-support/src/dist/bin/q2 | 86 ++++++++++++++++--- tutorials/qmux/src/dist/bin/q2 | 85 +++++++++++++++--- tutorials/qserver/src/dist/bin/q2 | 85 +++++++++++++++--- tutorials/transaction-manager/src/dist/bin/q2 | 85 +++++++++++++++--- 9 files changed, 657 insertions(+), 110 deletions(-) diff --git a/tutorials/channel-adaptor/src/dist/bin/q2 b/tutorials/channel-adaptor/src/dist/bin/q2 index a286e9d..275e9be 100755 --- a/tutorials/channel-adaptor/src/dist/bin/q2 +++ b/tutorials/channel-adaptor/src/dist/bin/q2 @@ -1,17 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/dirpoll/src/dist/bin/q2 b/tutorials/dirpoll/src/dist/bin/q2 index a286e9d..275e9be 100755 --- a/tutorials/dirpoll/src/dist/bin/q2 +++ b/tutorials/dirpoll/src/dist/bin/q2 @@ -1,17 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/logon-manager/src/dist/bin/q2 b/tutorials/logon-manager/src/dist/bin/q2 index a286e9d..275e9be 100755 --- a/tutorials/logon-manager/src/dist/bin/q2 +++ b/tutorials/logon-manager/src/dist/bin/q2 @@ -1,17 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/muxpool/src/dist/bin/q2 b/tutorials/muxpool/src/dist/bin/q2 index a286e9d..275e9be 100755 --- a/tutorials/muxpool/src/dist/bin/q2 +++ b/tutorials/muxpool/src/dist/bin/q2 @@ -1,17 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/qbean-primer/src/dist/bin/q2 b/tutorials/qbean-primer/src/dist/bin/q2 index 7c08ee7..275e9be 100755 --- a/tutorials/qbean-primer/src/dist/bin/q2 +++ b/tutorials/qbean-primer/src/dist/bin/q2 @@ -1,18 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -Dcom.sun.management.jmxremote=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/qbean-support/src/dist/bin/q2 b/tutorials/qbean-support/src/dist/bin/q2 index 7c08ee7..275e9be 100755 --- a/tutorials/qbean-support/src/dist/bin/q2 +++ b/tutorials/qbean-support/src/dist/bin/q2 @@ -1,18 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -Dcom.sun.management.jmxremote=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/qmux/src/dist/bin/q2 b/tutorials/qmux/src/dist/bin/q2 index a286e9d..275e9be 100755 --- a/tutorials/qmux/src/dist/bin/q2 +++ b/tutorials/qmux/src/dist/bin/q2 @@ -1,17 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/qserver/src/dist/bin/q2 b/tutorials/qserver/src/dist/bin/q2 index a286e9d..275e9be 100755 --- a/tutorials/qserver/src/dist/bin/q2 +++ b/tutorials/qserver/src/dist/bin/q2 @@ -1,17 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}" diff --git a/tutorials/transaction-manager/src/dist/bin/q2 b/tutorials/transaction-manager/src/dist/bin/q2 index a286e9d..275e9be 100755 --- a/tutorials/transaction-manager/src/dist/bin/q2 +++ b/tutorials/transaction-manager/src/dist/bin/q2 @@ -1,17 +1,78 @@ -#!/bin/sh +#!/bin/bash -cd `dirname $0`/.. || exit 1 +set -euo pipefail +cd "$(dirname "$0")/.." || exit 1 rm -f deploy/shutdown.xml -if [ -f jpos.pid ] && ps -p $(cat jpos.pid) > /dev/null 2>&1 -then - echo "Process $(cat jpos.pid) is running" -else - rm -f jpos.pid - exec java -server \ - -XX:+IgnoreUnrecognizedVMOptions \ - -Xmx1G \ - -Djava.net.preferIPv4Stack=true \ - -jar @jarname@ --pid="jpos.pid" "$@" +INHERITED_JAVA_OPTS="${JAVA_OPTS:-}" +EXTRA_JAVA_OPTS=() +EXTRA_OTHER_OPTS=() + +PID_FILE="jpos.pid" +USE_PID=true + +for arg in "$@"; do + case "$arg" in + -D*) + EXTRA_JAVA_OPTS+=("$arg") + ;; + --pid=*) + PID_FILE="${arg#--pid=}" + ;; + --no-pid) + USE_PID=false + ;; + --debug) + EXTRA_JAVA_OPTS+=("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005") + ;; + *) + EXTRA_OTHER_OPTS+=("$arg") + ;; + esac +done + +if $USE_PID; then + if [ -f "$PID_FILE" ] && ps -p "$(cat "$PID_FILE")" > /dev/null 2>&1; then + echo "Process $(cat "$PID_FILE") is running" + exit 1 + fi + rm -f "$PID_FILE" +fi + +mkdir -p log + +# Locate Java via JAVA_HOME or SDKMAN +if [ -z "${JAVA_HOME:-}" ]; then + SDKMAN_JAVA="$HOME/.sdkman/candidates/java/current" + if [ -d "$SDKMAN_JAVA" ]; then + export JAVA_HOME="$SDKMAN_JAVA" + fi +fi + +# Base JVM invocation. Order matters: every JVM flag (-D, -X, --add-*, +# agent flags from --debug, INHERITED_JAVA_OPTS from the env var) MUST +# land before -jar @jarname@. Anything after -jar is treated as a +# program argument by Java and triggers "Unrecognized option". +JAVA_CMD="${JAVA_HOME:+$JAVA_HOME/bin/}java" + +ENV_JAVA_OPTS=( ${INHERITED_JAVA_OPTS} ) + +CMD=( + "$JAVA_CMD" -server + -Xmx4G + --enable-native-access=ALL-UNNAMED + --sun-misc-unsafe-memory-access=allow + -Xlog:gc:log/gc.log +) +# JVM flags: in-script defaults first, then env-supplied, then CLI -D. +CMD+=( ${ENV_JAVA_OPTS[@]+"${ENV_JAVA_OPTS[@]}"} ) +CMD+=( ${EXTRA_JAVA_OPTS[@]+"${EXTRA_JAVA_OPTS[@]}"} ) +# Now the jar selector itself. +CMD+=( -jar @jarname@ ) +# Program args — these go to Q2's main, not the JVM. +if $USE_PID; then + CMD+=( --pid="$PID_FILE" ) fi +CMD+=( ${EXTRA_OTHER_OPTS[@]+"${EXTRA_OTHER_OPTS[@]}"} ) +exec "${CMD[@]}"