1#!/bin/sh 2 3DIRNAME=`dirname "$0"` 4PROGNAME=`basename "$0"` 5GREP="grep" 6 7# Use the maximum available, or set MAX_FD != -1 to use that 8MAX_FD="maximum" 9 10# Process passed in parameters 11while [ "$#" -gt 0 ] 12do 13 case "$1" in 14 -secmgr) 15 SECMGR="true" 16 ;; 17 -Djava.security.manager=*) 18 echo "ERROR: The use of -Djava.security.manager has been removed. Please use the -secmgr command line argument or SECMGR=true environment variable." 19 exit 1 20 ;; 21 *) 22 SERVER_OPTS="$SERVER_OPTS '$1'" 23 ;; 24 esac 25 shift 26done 27 28# tell linux glibc how many memory pools can be created that are used by malloc 29MALLOC_ARENA_MAX="${MALLOC_ARENA_MAX:-1}" 30export MALLOC_ARENA_MAX 31 32# OS specific support (must be 'true' or 'false'). 33cygwin=false; 34darwin=false; 35linux=false; 36solaris=false; 37other=false; 38case "`uname`" in 39 CYGWIN*) 40 cygwin=true 41 ;; 42 43 Darwin*) 44 darwin=true 45 ;; 46 47 Linux) 48 linux=true 49 ;; 50 SunOS*) 51 solaris=true 52 ;; 53 *) 54 other=true 55 ;; 56esac 57 58# For Cygwin, ensure paths are in UNIX format before anything is touched 59if $cygwin ; then 60 [ -n "$JBOSS_HOME" ] && 61 JBOSS_HOME=`cygpath --unix "$JBOSS_HOME"` 62 [ -n "$JAVA_HOME" ] && 63 JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 64 [ -n "$JAVAC_JAR" ] && 65 JAVAC_JAR=`cygpath --unix "$JAVAC_JAR"` 66fi 67 68# Setup JBOSS_HOME 69RESOLVED_JBOSS_HOME=`cd "$DIRNAME/.."; pwd` 70if [ "x$JBOSS_HOME" = "x" ]; then 71 # get the full path (without any relative bits) 72 JBOSS_HOME=$RESOLVED_JBOSS_HOME 73else 74 SANITIZED_JBOSS_HOME=`cd "$JBOSS_HOME"; pwd` 75 if [ "$RESOLVED_JBOSS_HOME" != "$SANITIZED_JBOSS_HOME" ]; then 76 echo "WARNING JBOSS_HOME may be pointing to a different installation - unpredictable results may occur." 77 echo "" 78 fi 79fi 80export JBOSS_HOME 81 82# Read an optional running configuration file 83if [ "x$DOMAIN_CONF" = "x" ]; then 84 DOMAIN_CONF="$DIRNAME/domain.conf" 85fi 86if [ -r "$DOMAIN_CONF" ]; then 87 . "$DOMAIN_CONF" 88fi 89 90# Setup the JVM 91if [ "x$JAVA" = "x" ]; then 92 if [ "x$JAVA_HOME" != "x" ]; then 93 JAVA="$JAVA_HOME/bin/java" 94 else 95 JAVA="java" 96 fi 97fi 98 99# Check for -d32/-d64 in JAVA_OPTS 100JVM_OPTVERSION="-version" 101JVM_D64_OPTION=`echo $JAVA_OPTS | $GREP "\-d64"` 102JVM_D32_OPTION=`echo $JAVA_OPTS | $GREP "\-d32"` 103test "x$JVM_D64_OPTION" != "x" && JVM_OPTVERSION="-d64 $JVM_OPTVERSION" 104test "x$JVM_D32_OPTION" != "x" && JVM_OPTVERSION="-d32 $JVM_OPTVERSION" 105 106# If -server not set in JAVA_OPTS, set it, if supported 107SERVER_SET=`echo $JAVA_OPTS | $GREP "\-server"` 108if [ "x$SERVER_SET" = "x" ]; then 109 110 # Check for SUN(tm) JVM w/ HotSpot support 111 if [ "x$HAS_HOTSPOT" = "x" ]; then 112 HAS_HOTSPOT=`"$JAVA" $JVM_OPTVERSION -version 2>&1 | $GREP -i HotSpot` 113 fi 114 115 # Check for OpenJDK JVM w/server support 116 if [ "x$HAS_OPENJDK" = "x" ]; then 117 HAS_OPENJDK=`"$JAVA" $JVM_OPTVERSION 2>&1 | $GREP -i OpenJDK` 118 fi 119 120 # Check for IBM JVM w/server support 121 if [ "x$HAS_IBM" = "x" ]; then 122 HAS_IBM=`"$JAVA" $JVM_OPTVERSION 2>&1 | $GREP -i "IBM J9"` 123 fi 124 125 # Enable -server if we have Hotspot or OpenJDK, unless we can't 126 if [ "x$HAS_HOTSPOT" != "x" -o "x$HAS_OPENJDK" != "x" -o "x$HAS_IBM" != "x" ]; then 127 # MacOS does not support -server flag 128 if [ "$darwin" != "true" ]; then 129 PROCESS_CONTROLLER_JAVA_OPTS="-server $PROCESS_CONTROLLER_JAVA_OPTS" 130 HOST_CONTROLLER_JAVA_OPTS="-server $HOST_CONTROLLER_JAVA_OPTS" 131 JVM_OPTVERSION="-server $JVM_OPTVERSION" 132 fi 133 fi 134else 135 JVM_OPTVERSION="-server $JVM_OPTVERSION" 136fi 137 138if [ "x$JBOSS_MODULEPATH" = "x" ]; then 139 JBOSS_MODULEPATH="$JBOSS_HOME/modules" 140fi 141 142if $linux; then 143 # consolidate the host-controller and command line opts 144 HOST_CONTROLLER_OPTS="$HOST_CONTROLLER_JAVA_OPTS $SERVER_OPTS" 145 # process the host-controller options 146 for var in $HOST_CONTROLLER_OPTS 147 do 148 # Remove quotes 149 p=`echo $var | tr -d "'"` 150 case $p in 151 -Djboss.domain.base.dir=*) 152 JBOSS_BASE_DIR=`readlink -m ${p#*=}` 153 ;; 154 -Djboss.domain.log.dir=*) 155 JBOSS_LOG_DIR=`readlink -m ${p#*=}` 156 ;; 157 -Djboss.domain.config.dir=*) 158 JBOSS_CONFIG_DIR=`readlink -m ${p#*=}` 159 ;; 160 esac 161 done 162fi 163 164if $solaris; then 165 # consolidate the host-controller and command line opts 166 HOST_CONTROLLER_OPTS="$HOST_CONTROLLER_JAVA_OPTS $SERVER_OPTS" 167 # process the host-controller options 168 for var in $HOST_CONTROLLER_OPTS 169 do 170 # Remove quotes 171 p=`echo $var | tr -d "'"` 172 case $p in 173 -Djboss.domain.base.dir=*) 174 JBOSS_BASE_DIR=`echo $p | awk -F= '{print $2}'` 175 ;; 176 -Djboss.domain.log.dir=*) 177 JBOSS_LOG_DIR=`echo $p | awk -F= '{print $2}'` 178 ;; 179 -Djboss.domain.config.dir=*) 180 JBOSS_CONFIG_DIR=`echo $p | awk -F= '{print $2}'` 181 ;; 182 esac 183 done 184fi 185 186# No readlink -m on BSD and possibly other distros 187if $darwin || $other ; then 188 # consolidate the host-controller and command line opts 189 HOST_CONTROLLER_OPTS="$HOST_CONTROLLER_JAVA_OPTS $SERVER_OPTS" 190 # process the host-controller options 191 for var in $HOST_CONTROLLER_OPTS 192 do 193 # Remove quotes 194 p=`echo $var | tr -d "'"` 195 case $p in 196 -Djboss.domain.base.dir=*) 197 JBOSS_BASE_DIR=`cd ${p#*=} ; pwd -P` 198 ;; 199 -Djboss.domain.log.dir=*) 200 if [ -d "${p#*=}" ]; then 201 JBOSS_LOG_DIR=`cd ${p#*=} ; pwd -P` 202 else 203 #since the specified directory doesn't exist we don't validate it 204 JBOSS_LOG_DIR=${p#*=} 205 fi 206 ;; 207 -Djboss.domain.config.dir=*) 208 JBOSS_CONFIG_DIR=`cd ${p#*=} ; pwd -P` 209 ;; 210 esac 211 done 212fi 213# determine the default base dir, if not set 214if [ "x$JBOSS_BASE_DIR" = "x" ]; then 215 JBOSS_BASE_DIR="$JBOSS_HOME/domain" 216fi 217# determine the default log dir, if not set 218if [ "x$JBOSS_LOG_DIR" = "x" ]; then 219 JBOSS_LOG_DIR="$JBOSS_BASE_DIR/log" 220fi 221# determine the default configuration dir, if not set 222if [ "x$JBOSS_CONFIG_DIR" = "x" ]; then 223 JBOSS_CONFIG_DIR="$JBOSS_BASE_DIR/configuration" 224fi 225 226# Setup the java path to invoke from JVM 227# Needed to start domain from cygwin when the JAVA path will result in an invalid path 228JAVA_FROM_JVM="$JAVA" 229 230# For Cygwin, switch paths to Windows format before running java 231if $cygwin; then 232 JBOSS_HOME=`cygpath --path --windows "$JBOSS_HOME"` 233 JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` 234 JAVA_FROM_JVM=`cygpath --path --absolute --windows "$JAVA_FROM_JVM"` 235 JBOSS_BASE_DIR=`cygpath --path --windows "$JBOSS_BASE_DIR"` 236 JBOSS_LOG_DIR=`cygpath --path --windows "$JBOSS_LOG_DIR"` 237 JBOSS_CONFIG_DIR=`cygpath --path --windows "$JBOSS_CONFIG_DIR"` 238 JBOSS_MODULEPATH=`cygpath --path --windows "$JBOSS_MODULEPATH"` 239fi 240 241# If the -Djava.security.manager is found, enable the -secmgr and include a bogus security manager for JBoss Modules to replace 242# Note that HOST_CONTROLLER_JAVA_OPTS will not need to be handled here 243SECURITY_MANAGER_SET=`echo $PROCESS_CONTROLLER_JAVA_OPTS | $GREP "java\.security\.manager"` 244if [ "x$SECURITY_MANAGER_SET" != "x" ]; then 245 echo "ERROR: The use of -Djava.security.manager has been removed. Please use the -secmgr command line argument or SECMGR=true environment variable." 246 exit 1 247fi 248 249# Set up the module arguments 250MODULE_OPTS="" 251if [ "$SECMGR" = "true" ]; then 252 MODULE_OPTS="$MODULE_OPTS -secmgr"; 253fi 254 255# Display our environment 256echo "=========================================================================" 257echo "" 258echo " JBoss Bootstrap Environment" 259echo "" 260echo " JBOSS_HOME: $JBOSS_HOME" 261echo "" 262echo " JAVA: $JAVA" 263echo "" 264echo " JAVA_OPTS: $PROCESS_CONTROLLER_JAVA_OPTS" 265echo "" 266echo "=========================================================================" 267echo "" 268 269while true; do 270 if [ "x$LAUNCH_JBOSS_IN_BACKGROUND" = "x" ]; then 271 # Execute the JVM in the foreground 272 eval \"$JAVA\" -D\"[Process Controller]\" $PROCESS_CONTROLLER_JAVA_OPTS \ 273 \"-Dorg.jboss.boot.log.file="$JBOSS_LOG_DIR"/process-controller.log\" \ 274 \"-Dlogging.configuration=file:"$JBOSS_CONFIG_DIR"/logging.properties\" \ 275 -jar \""$JBOSS_HOME"/jboss-modules.jar\" \ 276 $MODULE_OPTS \ 277 -mp \""${JBOSS_MODULEPATH}"\" \ 278 org.jboss.as.process-controller \ 279 -jboss-home \""$JBOSS_HOME"\" \ 280 -jvm \"$JAVA_FROM_JVM\" \ 281 $MODULE_OPTS \ 282 -mp \""${JBOSS_MODULEPATH}"\" \ 283 -- \ 284 \"-Dorg.jboss.boot.log.file="$JBOSS_LOG_DIR"/host-controller.log\" \ 285 \"-Dlogging.configuration=file:"$JBOSS_CONFIG_DIR"/logging.properties\" \ 286 $HOST_CONTROLLER_JAVA_OPTS \ 287 -- \ 288 -default-jvm \"$JAVA_FROM_JVM\" \ 289 "$SERVER_OPTS" 290 JBOSS_STATUS=$? 291 else 292 # Execute the JVM in the background 293 eval \"$JAVA\" -D\"[Process Controller]\" $PROCESS_CONTROLLER_JAVA_OPTS \ 294 \"-Dorg.jboss.boot.log.file="$JBOSS_LOG_DIR"/process-controller.log\" \ 295 \"-Dlogging.configuration=file:"$JBOSS_CONFIG_DIR"/logging.properties\" \ 296 -jar \""$JBOSS_HOME"/jboss-modules.jar\" \ 297 $MODULE_OPTS \ 298 -mp \""${JBOSS_MODULEPATH}"\" \ 299 org.jboss.as.process-controller \ 300 -jboss-home \""$JBOSS_HOME"\" \ 301 -jvm \"$JAVA_FROM_JVM\" \ 302 $MODULE_OPTS \ 303 -mp \""${JBOSS_MODULEPATH}"\" \ 304 -- \ 305 \"-Dorg.jboss.boot.log.file="$JBOSS_LOG_DIR"/host-controller.log\" \ 306 \"-Dlogging.configuration=file:"$JBOSS_CONFIG_DIR"/logging.properties\" \ 307 $HOST_CONTROLLER_JAVA_OPTS \ 308 -- \ 309 -default-jvm \"$JAVA_FROM_JVM\" \ 310 "$SERVER_OPTS" "&" 311 JBOSS_PID=$! 312 # Trap common signals and relay them to the jboss process 313 trap "kill -HUP $JBOSS_PID" HUP 314 trap "kill -TERM $JBOSS_PID" INT 315 trap "kill -QUIT $JBOSS_PID" QUIT 316 trap "kill -PIPE $JBOSS_PID" PIPE 317 trap "kill -TERM $JBOSS_PID" TERM 318 if [ "x$JBOSS_PIDFILE" != "x" ]; then 319 echo $JBOSS_PID > $JBOSS_PIDFILE 320 fi 321 # Wait until the background process exits 322 WAIT_STATUS=128 323 while [ "$WAIT_STATUS" -ge 128 ]; do 324 wait $JBOSS_PID 2>/dev/null 325 WAIT_STATUS=$? 326 if [ "$WAIT_STATUS" -gt 128 ]; then 327 SIGNAL=`expr $WAIT_STATUS - 128` 328 SIGNAL_NAME=`kill -l $SIGNAL` 329 echo "*** JBossAS process ($JBOSS_PID) received $SIGNAL_NAME signal ***" >&2 330 fi 331 done 332 if [ "$WAIT_STATUS" -lt 127 ]; then 333 JBOSS_STATUS=$WAIT_STATUS 334 else 335 JBOSS_STATUS=0 336 fi 337 if [ "$JBOSS_STATUS" -ne 10 ]; then 338 # Wait for a complete shudown 339 wait $JBOSS_PID 2>/dev/null 340 fi 341 if [ "x$JBOSS_PIDFILE" != "x" ]; then 342 grep "$JBOSS_PID" $JBOSS_PIDFILE && rm $JBOSS_PIDFILE 343 fi 344 fi 345 if [ "$JBOSS_STATUS" -eq 10 ]; then 346 echo "Restarting JBoss..." 347 else 348 exit $JBOSS_STATUS 349 fi 350done 351