| #!/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 $@ |