blob: cac3ae186f2c9478e86837e661e80f50edc75d1a [file] [log] [blame]
#!/bin/sh
# ------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ------------------------------------------------------------------------
# Not all shells support the 'exec -a newname' syntax..
`exec -a test echo test 2> /dev/null`
if [ "$?" -eq "1" ] ; then
EXEC="exec -a apollo"
else
# Lets switch to bash if you have it installed...
if [ -f "/bin/bash" ] ; then
exec "/bin/bash" $0 $@
else
EXEC="exec"
fi
fi
# OS specific support.
cygwin=false;
darwin=false;
case "`uname`" in
CYGWIN*) cygwin=true
OSTYPE=cygwin
export OSTYPE
;;
Darwin*) darwin=true
if [ -z "$JAVA_HOME" ] ; then
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
fi
;;
esac
if [ -z "$APOLLO_HOME" ] ; then
## resolve links - $0 may be a link to apollo's home
PRG="$0"
progname=`basename "$0"`
saveddir=`pwd`
# need this for relative symlinks
dirname_prg=`dirname "$PRG"`
cd "$dirname_prg"
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '.*/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
APOLLO_HOME=`dirname "$PRG"`
cd "$saveddir"
# make it fully qualified
APOLLO_HOME=`cd "$APOLLO_HOME/.." && pwd`
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$APOLLO_HOME" ] &&
APOLLO_HOME=`cygpath --unix "$APOLLO_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD=`which java 2> /dev/null `
if [ -z "$JAVACMD" ] ; then
JAVACMD=java
fi
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly."
echo " We cannot execute $JAVACMD"
exit 1
fi
CLASSPATH="${APOLLO_HOME}/lib/apollo-boot.jar"
BOOTDIRS="${APOLLO_HOME}/lib"
if [ ! -z "$APOLLO_BASE" ] ; then
BOOTDIRS="${APOLLO_BASE}/lib\;${BOOTDIRS}"
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
BOOTDIRS=`cygpath --path --windows "${APOLLO_BASE}/lib\:${APOLLO_HOME}/lib"`
APOLLO_HOME=`cygpath --windows "$APOLLO_HOME"`
if [ ! -z "$APOLLO_BASE" ] ; then
APOLLO_BASE=`cygpath --windows "$APOLLO_BASE"`
fi
JAVA_HOME=`cygpath --windows "$JAVA_HOME"`
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
CYGHOME=`cygpath --windows "$HOME"`
fi
if [ -z "$JVM_FLAGS" ] ; then
JVM_FLAGS="-server -Xmx1G -XX:+HeapDumpOnOutOfMemoryError -XX:-UseBiasedLocking"
fi
if [ "$APOLLO_ASSERTIONS" != "false" ] ; then
JVM_FLAGS="-ea ${JVM_FLAGS}"
fi
if [ "x$APOLLO_OPTS" != "x" ] ; then
JVM_FLAGS="${JVM_FLAGS} ${APOLLO_OPTS}"
fi
# Optionally enable remote debugging
if [ "x$APOLLO_DEBUG" != "x" ]; then
JVM_FLAGS="${JVM_FLAGS} -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"
fi
# Optionally enable YourKit debugging
if [ "x$APOLLO_PROFILE" != "x" ]; then
JVM_FLAGS="-agentlib:yjpagent ${JVM_FLAGS}"
fi
if [ -z "$JMX_OPTS" ] ; then
JMX_OPTS="-Dcom.sun.management.jmxremote"
fi
JVM_FLAGS="${JVM_FLAGS} ${JMX_OPTS}"
SYSTEM_PROPS="${SYSTEM_PROPS} -Dapollo.home=${APOLLO_HOME}"
if [ ! -z "$APOLLO_BASE" ] ; then
SYSTEM_PROPS="${SYSTEM_PROPS} -Dapollo.base=${APOLLO_BASE}"
fi
# Attempt to bump up the ulimit
if [ -z "$APOLLO_ULIMIT" ] ; then
APOLLO_ULIMIT=100000
fi
# Does a binary search of the max ulimit we can set.
search_ulimit () {
low=$2; mid=$3; hi=$4
if [[ $mid -ne $hi && $mid -ne $low ]] ; then
ulimit $1 $mid >/dev/null 2>/dev/null
if [ $? -eq 0 ] ; then
# max ulimit is higher...
search_ulimit $1 $mid `expr \( \( $hi - $mid \) / 2 \) + $mid` $hi
else
# max ulimit is lower...
search_ulimit $1 $low `expr \( \( $mid - $low \) / 2 \) + $low` $mid
fi
fi
}
set_ulimit () {
ulimit $1 $2 >/dev/null 2>/dev/null
if [ $? -ne 0 ] ; then
search_ulimit $1 0 `expr $2 / 2` $2
fi
}
case $APOLLO_ULIMIT in
[0-9]*)
set_ulimit -n $APOLLO_ULIMIT # sets the file descriptor limit
set_ulimit -u $APOLLO_ULIMIT # sets the process limit to help us run lots of threads.
;;
*) ;;
esac
${EXEC} "$JAVACMD" ${JVM_FLAGS} ${SYSTEM_PROPS} -classpath "${CLASSPATH}" org.apache.activemq.apollo.boot.Apollo ${BOOTDIRS} org.apache.activemq.apollo.cli.Apollo $@