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