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